

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# WorkSpaces 在 WorkSpaces 个人模式下加密
<a name="encrypt-workspaces"></a>

WorkSpaces 与 AWS Key Management Service (AWS KMS) 集成。这使您能够 WorkSpaces 使用密 AWS KMS 钥加密存储量。当你启动时 WorkSpace，你可以加密根卷（对于微软 Windows，为 C 盘；对于 Linux，/）和用户卷（对于 Windows，则为 D 盘；对于 Linux，/home）。这样做可以确保静态存储的数据、磁盘 I/O 到卷的数据以及从卷创建的快照都经过加密。

**注意**  
除了加密您的 WorkSpaces，您还可以在某些 AWS 美国地区使用 FIPS 终端节点加密。有关更多信息，请参阅 [为个人配置 FedRAMP 授权或 DoD SRG 合规性 WorkSpaces](fips-encryption.md)。
亚马逊不支持 Windows BitLocker 加密 WorkSpaces。  如果适用，亚马逊 WorkSpaces 将尝试解密所有Windows操作系统启动期间检测到的所有卷。  如果为任何卷启用了密码、PIN 或启动密钥的任意组合，则卷在启动过程中可能会变得无响应， WorkSpace 这可能会变得不正常且无法正常启动。

**Topics**
+ [前提条件](#encryption_prerequisites)
+ [限制](#encryption_limits)
+ [使用 WorkSpaces 加密概述 AWS KMS](#kms-workspaces-overview)
+ [WorkSpaces 加密上下文](#kms-workspaces-encryption-context)
+ [WorkSpaces 授予代表您使用 KMS 密钥的权限](#kms-workspaces-permissions)
+ [加密 WorkSpace](#encrypt_workspace)
+ [查看已加密 WorkSpaces](#maintain_encryption)

## 前提条件
<a name="encryption_prerequisites"></a>

在开始加密过程之前，您需要一个密 AWS KMS 钥。此 KMS 密钥可以是亚马逊[AWS 托管 KMS 密钥 ](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) WorkSpaces (**aws/workspaces**)，也可以是对称的[客户管理的 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。
+ **AWS 托管 KMS 密钥 ** — 当您首次 WorkSpace 从某个区域的 WorkSpaces 控制台启动未加密的 KMS 密钥时，亚马逊 WorkSpaces 会自动在您的账户中创建 AWS 托管 KMS 密钥 (**aws/workspaces**)。您可以选择此 AWS 托管 KMS 密钥来加密您的用户和根卷 WorkSpace。有关更多信息，请参阅 [使用 WorkSpaces 加密概述 AWS KMS](#kms-workspaces-overview)。

  您可以查看此 AWS 托管的 KMS 密钥，包括其策略和授权，也可以在 AWS CloudTrail 日志中跟踪其使用情况，但不能使用或管理此 KMS 密钥。亚马逊 WorkSpaces 创建和管理此 KMS 密钥。只有亚马逊 WorkSpaces 可以使用此 KMS 密钥，并且 WorkSpaces 只能使用它来加密您账户中的 WorkSpaces 资源。

  AWS 托管 KMS 密钥，包括亚马逊 WorkSpaces 支持的密钥，每年轮换。有关详细信息，请参阅*AWS Key Management Service 开发者指南[中的](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)轮换 AWS KMS 密钥*。
+ **客户管理的 KMS 密钥 ** — 或者，您可以选择使用 AWS KMS创建的对称客户管理的 KMS 密钥。您可以查看、使用和管理此 KMS 密钥，包括设置其策略。有关创建 KMS 密钥的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。有关使用 AWS KMS API 创建 KMS 密钥的更多信息，请参阅*AWS Key Management Service 开发人员指南[中的](https://docs.aws.amazon.com/kms/latest/developerguide/programming-keys.html)使用密钥*。

  除非您决定启用自动密钥轮换，否则客户托管 KMS 密钥不会自动轮换。有关详细信息，请参阅《*AWS Key Management Service 开发者指南》[中的](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)轮换 AWS KMS 密钥*。

**重要**  
手动轮换 KMS 密钥时，必须保持原始 KMS 密钥和新 KMS 密钥处于启用状态，这样 AWS KMS 才能解密原始 KMS 密钥加密的密钥。 WorkSpaces 如果您不想保持原始 KMS 密钥处于启用状态，则必须重新创建您的密钥 WorkSpaces并使用新的 KMS 密钥对其进行加密。

您必须满足以下要求才能使用 AWS KMS 密钥加密您的 WorkSpaces：
+ **KMS 密钥必须是对称的。**亚马逊 WorkSpaces 不支持非对称 KMS 密钥。有关区分对称和非对称 KMS 密钥的信息，请参阅《AWS Key Management Service 开发人员指南》**中的[识别对称和非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)。
+ **KMS 密钥必须已启用。**要确定是否启用 KMS 密钥，请参阅《AWS Key Management Service 开发人员指南》**中的[显示 KMS 密钥详细信息](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys-console.html#viewing-console-details)。
+ **您必须拥有与 KMS 密钥相关联的正确权限和策略。**有关更多信息，请参阅 [第 2 部分：使用 IAM 策略向 WorkSpaces 管理员授予额外权限](#kms-permissions-iam-policy)。

## 限制
<a name="encryption_limits"></a>
+ 你无法加密现有的 WorkSpace。启动 WorkSpace 时必须对其进行加密。
+ 不支持使用加密 WorkSpace 镜像创建自定义镜像。
+ 目前不支持对加密 WorkSpace 对象禁用加密。
+ WorkSpaces 在启用根卷加密的情况下启动可能需要长达一个小时的预置时间。
+ 要重新启动或重建加密密钥 WorkSpace，请首先确保 AWS KMS 密钥已启用；否则，密钥 WorkSpace 将无法使用。要确定是否启用 KMS 密钥，请参阅《AWS Key Management Service 开发人员指南》**中的[显示 KMS 密钥详细信息](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys-console.html#viewing-console-details)。

## 使用 WorkSpaces 加密概述 AWS KMS
<a name="kms-workspaces-overview"></a>

当您使用 WorkSpaces 加密卷创建时， WorkSpaces 使用亚马逊弹性区块商店（亚马逊 EBS）来创建和管理这些卷。Amazon EBS 使用行业标准 AES-256 算法使用数据密钥对您的卷进行加密。亚马逊 EBS 和亚马逊都 WorkSpaces 使用您的 KMS 密钥来处理加密卷。有关 EBS 卷加密的更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EBS 加密](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html)。

当您 WorkSpaces 使用加密卷启动时，端到端过程如下所示：

1. 您可以指定用于加密的 KMS 密钥以及的用户和目录 WorkSpace。此操作会创建一项[授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)，该授权仅 WorkSpaces 允许将您的 KMS 密钥用于此目的， WorkSpace即仅适用于与指定用户和目录 WorkSpace关联的用户。

1. WorkSpaces 为创建加密的 EBS 卷 WorkSpace 并指定要使用的 KMS 密钥以及该卷的用户和目录。此操作会创建一项授权，允许 Amazon EBS 将您的 KMS 密钥仅用于此 WorkSpace 和卷，也就是说，仅用于与指定用户和目录 WorkSpace 关联的密钥，并且仅用于指定卷。

1. <a name="WSP-EBS-requests-encrypted-volume-data-key"></a>亚马逊 EBS 请求使用您的 KMS 密钥加密的卷数据密钥，并指定 WorkSpace 用户的 Active Directory 安全标识符 (SID) 和 AWS Directory Service 目录 ID 以及亚马逊 EBS 卷 ID 作为[加密上下文。](#kms-workspaces-encryption-context)

1. <a name="WSP-KMS-creates-data-key"></a>AWS KMS 创建新的数据密钥，使用您的 KMS 密钥对其进行加密，然后将加密的数据密钥发送到 Amazon EBS。

1. <a name="WSP-uses-EBS-to-attach-encrypted-volume"></a>WorkSpaces 使用亚马逊 EBS 将加密卷连接到您的 WorkSpace。Amazon EBS AWS KMS 通过[`Decrypt`](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求将加密的数据密钥发送到并指定 WorkSpace 用户的 SID、目录 ID 和卷 ID，后者用作加密上下文。

1. AWS KMS 使用您的 KMS 密钥解密数据密钥，然后将纯文本数据密钥发送到 Amazon EBS。

1. Amazon EBS 使用纯文本数据密钥加密所有传入和传出加密卷的数据。只要卷连接到，Amazon EBS 就会将纯文本数据密钥保留在内存中 WorkSpace。

1. Amazon EBS 将加密的数据密钥（接收于[Step 4](#WSP-KMS-creates-data-key)）与卷元数据一起存储，以备将来重启或重建。 WorkSpace

1. 当您使用 AWS 管理控制台 移除 WorkSpace （或使用 WorkSpaces API 中的[`TerminateWorkspaces`](https://docs.aws.amazon.com/workspaces/latest/devguide/API_TerminateWorkspaces.html)操作）时， WorkSpaces Amazon EBS 会取消允许他们使用您的 KMS 密钥执行此操作的 WorkSpace授权。

## WorkSpaces 加密上下文
<a name="kms-workspaces-encryption-context"></a>

WorkSpaces 不直接使用您的 KMS 密钥进行加密操作（例如[`Encrypt`](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)[`Decrypt`](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)[`GenerateDataKey`](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、、等），这意味着 WorkSpaces 不会向包含[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)的请求发送请求。 AWS KMS 但是，当 Amazon EBS 请求您的 WorkSpaces （[Step 3](#WSP-EBS-requests-encrypted-volume-data-key)中[使用 WorkSpaces 加密概述 AWS KMS](#kms-workspaces-overview)）加密卷的加密数据密钥以及请求该数据密钥的纯文本副本（[Step 5](#WSP-uses-EBS-to-attach-encrypted-volume)）时，它会在请求中包含加密上下文。

 加密环境提供[额外的经过身份验证的数据 ](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad) (AAD)， AWS KMS 用于确保数据完整性。加密上下文也会写入您的 AWS CloudTrail 日志文件，这可以帮助您了解使用给定的 KMS 密钥的原因。Amazon EBS 会对加密上下文使用以下内容：
+ 与关联的 Active Directory 用户的安全标识符 (SID) WorkSpace
+ 与关联的 AWS Directory Service 目录的目录 ID WorkSpace
+ Amazon EBS 加密卷的卷 ID

以下示例显示了 Amazon EBS 使用的加密上下文的 JSON 表示形式：

```
{
  "aws:workspaces:sid-directoryid": "[{{S-1-5-21-277731876-1789304096-451871588-1107}}]@[{{d-1234abcd01}}]",
  "aws:ebs:id": "{{vol-1234abcd}}"
}
```

## WorkSpaces 授予代表您使用 KMS 密钥的权限
<a name="kms-workspaces-permissions"></a>

您可以使用 WorkSpaces (**aws/workspaces**) 的 AWS 托管 KMS 密钥或客户管理的 KMS 密钥保护您的 WorkSpace 数据。如果您使用客户管理的 KMS 密钥，则需要 WorkSpaces 授予代表账户 WorkSpaces 管理员使用 KMS 密钥的权限。默认情况下，的 AWS 托管 KMS 密钥 WorkSpaces具有所需的权限。

要准备您的客户管理的 KMS 密钥以供使用 WorkSpaces，请使用以下步骤。

1. [将您的 WorkSpaces 管理员添加到 KMS 密钥策略中的密钥用户列表中 ](#kms-permissions-key-users)

1. [使用 IAM 策略为您的 WorkSpaces 管理员提供额外权限 ](#kms-permissions-iam-policy)

您的 WorkSpaces 管理员还需要权限才能使用 WorkSpaces。有关这些权限的更多信息，请参阅 [的身份和访问管理 WorkSpaces](workspaces-access-control.md)。

### 第 1 部分：将 WorkSpaces 管理员添加为密钥用户
<a name="kms-permissions-key-users"></a>

要向 WorkSpaces 管理员提供所需的权限，您可以使用 AWS 管理控制台 或 AWS KMS API。

#### 将 WorkSpaces 管理员添加为 KMS 密钥的密钥用户（控制台）
<a name="kms-permissions-users-consoleAPI"></a>

1. 登录 AWS 管理控制台 并打开 AWS Key Management Service (AWS KMS) 控制台，网址为[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms)。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。

1. 选择首选客户托管 KMS 密钥的密钥 ID 或别名。

1. 选择 **Key policy (密钥策略)** 选项卡。在 **Key users**（密钥用户）下，选择 **Add**（添加）。

1. 在 IAM 用户和角色列表中，选择与您的 WorkSpaces 管理员对应的用户和角色，然后选择**添加**。

#### 将 WorkSpaces 管理员添加为 KMS 密钥 (API) 的密钥用户
<a name="kms-permissions-users-api"></a>

1. 使用该[GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html)操作获取现有密钥策略，然后将策略文档保存到文件中。

1. 在您的首选文本编辑器中打开策略文档。将与您的 WorkSpaces 管理员相对应的 IAM 用户和角色添加到向密钥用户授[予权限的策略声明中](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)。然后保存文件。

1. 使用[PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)操作将密钥策略应用于 KMS 密钥。

### 第 2 部分：使用 IAM 策略向 WorkSpaces 管理员授予额外权限
<a name="kms-permissions-iam-policy"></a>

如果您选择客户管理的 KMS 密钥进行加密，则必须制定 IAM 政策， WorkSpaces 允许亚马逊代表您账户中启动加密的 IAM 用户使用 KMS 密钥 WorkSpaces。该用户还需要获得许可才能使用亚马逊 WorkSpaces。有关创建和编辑 IAM 用户策略的更多信息，请参阅《IAM 用户指南》**中的[管理 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)和 [的身份和访问管理 WorkSpaces](workspaces-access-control.md)。

WorkSpaces 加密需要对 KMS 密钥的有限访问权限。以下是您可以使用的一个示例密钥策略。此策略将可以管理 AWS KMS 密钥的主体与可以使用此密钥的主体分开。在使用此示例密钥策略之前，请将示例账户 ID 和 IAM 用户名替换为您账户中的实际值。

第一条语句与默认 AWS KMS 密钥策略相匹配。它授予您的账户使用 IAM 策略控制对 KMS 密钥的访问的权限。第二和第三条语句分别定义哪些 AWS 委托人可以管理和使用密钥。第四个语句 AWS KMS 允许与集成的 AWS 服务代表指定的主体使用密钥。该语句允许 AWS 服务创建和管理授权。该声明使用条件元素，将 KMS 密钥的授予限制为 AWS 服务代表您账户中的用户发放的授权。

**注意**  
如果您的 WorkSpaces 管理员使用创建 WorkSpaces 加密卷，则管理员需要列出别名和列出密钥（`"kms:ListAliases"`和`"kms:ListKeys"`权限）的权限。 AWS 管理控制台 如果您的 WorkSpaces 管理员仅使用亚马逊 WorkSpaces API（不使用控制台），则可以省略`"kms:ListAliases"`和`"kms:ListKeys"`权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::{{123456789012}}:root"},
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::{{123456789012}}:user/{{Alice}}"},
      "Action": [
        "kms:Create*",
        "kms:Describe*",
        "kms:Enable*",
        "kms:List*",
        "kms:Put*",
        "kms:Update*",
        "kms:Revoke*",
        "kms:Disable*",
        "kms:Get*",
        "kms:Delete*"
       ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::{{123456789012}}:user/{{Alice}}"},
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncryptFrom",
        "kms:ReEncryptTo",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::{{123456789012}}:user/{{Alice}}"},
      "Action": [
        "kms:CreateGrant",
        "kms:ListGrants",
        "kms:RevokeGrant"
      ],
      "Resource": "*",
      "Condition": {"Bool": {"kms:GrantIsForAWSResource": "true"}}
    }
  ]
}
```

------

加密用户或角色的 IAM 策略 WorkSpace 必须包括对客户管理的 KMS 密钥的使用权限以及对的访问 WorkSpaces权限。要向 IAM 用户或角色 WorkSpaces 授予权限，您可以将以下示例策略附加到 IAM 用户或角色。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ds:*",
                "ds:DescribeDirectories",
                "workspaces:*",
                "workspaces:DescribeWorkspaceBundles",
                "workspaces:CreateWorkspaces",
                "workspaces:DescribeWorkspaceBundles",
                "workspaces:DescribeWorkspaceDirectories",
                "workspaces:DescribeWorkspaces",
                "workspaces:RebootWorkspaces",
                "workspaces:RebuildWorkspaces"
            ],
            "Resource": "*"
        }
    ]
}
```

------

用户需要以下 IAM 策略才能使用 AWS KMS。它为用户提供了对 KMS 密钥的只读访问权限以及创建授权的能力。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:Describe*",
                "kms:List*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

如果您想在策略中指定 KMS 密钥，请使用类似于以下内容的 IAM 策略。将示例 KMS 密钥 ARN 替换为有效值。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:CreateGrant",
      "Resource": "{{arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab}}"
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:ListAliases",
        "kms:ListKeys"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 加密 WorkSpace
<a name="encrypt_workspace"></a>

**要加密 WorkSpace**

1. 在处打开 WorkSpaces 控制台[https://console.aws.amazon.com/workspaces/v2/home](https://console.aws.amazon.com/workspaces/v2/home)。

1. 选择 ** Launch WorkSpaces ** 并完成前三个步骤。

1. 对于**WorkSpaces 配置**步骤，请执行以下操作：

   1. 选择要加密的卷：**根卷**、**用户卷**或这两种卷。

   1. 对于**加密密钥**，选择一个 AWS KMS 密钥，即由 Amazon 创建的 AWS 托管 KMS 密钥 WorkSpaces 或您创建的 KMS 密钥。您选择的 KMS 密钥必须是对称的。亚马逊 WorkSpaces 不支持非对称 KMS 密钥。

   1. 选择**下一步**。

1. 选择**启动 WorkSpaces**。

## 查看已加密 WorkSpaces
<a name="maintain_encryption"></a>

要查看哪些 WorkSpaces 卷已从 WorkSpaces 控制台加密，请**WorkSpaces**从左侧的导航栏中选择。**卷加密**列显示每个卷加密是启用还是禁用 WorkSpace 了加密。要查看哪些特定卷已加密，请展开 WorkSpace 条目以查看 “**加密卷” ** 字段。