

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

# 中的数据加密 AWS Transform
<a name="data-encryption"></a>

本主题提供有关传输中加密和静态加密的特定信息。 AWS Transform 

AWS Transform 默认情况下提供加密，使用 AWS 自有密钥进行加密，以保护敏感的客户数据。

## 加密类型
<a name="encryption-types"></a>

### 传输中加密
<a name="encryption-transit"></a>

使用 TLS 1.2 或更高版本的连接，保护客户之间 AWS Transform AWS Transform 和客户之间的通信及其下游依赖关系。

**重要**  
当您[连接发现账户时](https://docs.aws.amazon.com/transform-vmware-connect-discovery-account.html)，T AWS ransform 会代表您在该账户中创建一个 Amazon S3 存储桶。默认情况下，该存储桶未`SecureTransport`启用。如果您希望存储桶策略包含安全传输，则必须更新该策略。有关更多信息，请参阅 Amazon S3 [ 的安全最佳实践](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)。

### 静态加密
<a name="encryption-rest"></a>

AWS Transform 使用亚马逊 DynamoDB 和亚马逊简单存储服务 (亚马逊 S3) 存储静态数据。默认情况下，静态数据使用 AWS 加密解决方案进行加密。 AWS Transform 使用来自 AWS Key Management Service (AWS KMS) 的 AWS 自有密钥加密您的数据。您无需采取任何措施来保护加密数据的 AWS 托管密钥。有关更多信息，请参阅《*AWS Key Management Service 开发人员指南*》中的 [AWS 拥有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。


| 数据类型 | AWS-自有密钥加密 | 客户托管密钥加密（可选） | 
| --- | --- | --- | 
| 客户存储桶数据<br />客户输入和输出，例如存储在 Amazon S3 存储桶中的代码和文档 | 已启用 | 已启用 | 
| 神器商店<br />作为代码转换一部分的中间构件存储在 S3 存储桶中 | 已启用 | 已启用 | 
| 工作目标<br />客户对存储在 Amazon S3 存储桶中的任务的意图 | 已启用 | 已启用 | 
| 聊天消息<br />客户之间和 AWS Transform 存储在 Amazon S3 存储桶中的消息 | 已启用 | 已启用 | 
| 聊天知识库<br />与亚马逊相关的索引数据 AWS Transform 和客户聊天记录，并通过 AWS Bedro OpenSearch ck 进行处理 | 已启用 | 已启用 | 

注意：客户可以注册自己的客户管理密钥 (CMK)，用于加密所有上述数据类型。

客户托管密钥是您创建、拥有和管理的 AWS 账户中的 KMS 密钥，用于通过控制 KMS 密钥的访问权限来直接控制对数据的访问权限。仅支持对称密钥。有关创建自己的 KMS 密钥的信息，请参阅*AWS Key Management Service 开发人员指南[中的](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)创建密钥*。

当您使用客户管理的密钥时 AWS Transform ，使用 KMS 授权，允许授权用户、角色或应用程序使用 KMS 密钥。当 AWS Transform 管理员选择在配置期间使用客户管理的密钥进行加密时，将为他们创建授权。此项授权可让最终用户使用加密密钥进行静态数据加密。有关授权的更多信息，请参阅 [Grants in AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。

#### AWS 自有密钥（默认）
<a name="encryption-types-amz-owned"></a>

**注意**  
**AWS 拥有的密钥 ** — 默认情况下 AWS Transform 使用这些密钥自动加密个人身份数据。您无法查看、管理或使用 AWS 自有密钥，也无法审核其使用情况。但是，无需采取任何措施或更改任何计划即可保护用于加密数据的密钥。有关更多信息，请参阅密钥管理服务开发人员指南中的 AWS 自有 AWS密钥。

默认情况下，静态数据加密有助于降低保护敏感数据的操作开销和复杂性。同时，它还支持构建符合严格加密合规性和监管要求的安全应用程序。

虽然您无法禁用此加密层或选择其他加密类型，但可以在创建转换时选择客户管理的密钥来在现有 AWS 自有加密密钥之上添加第二层加密：

#### 客户管理的密钥（可选）
<a name="encryption-types-customer"></a>

**客户管理的密钥 ** — AWS Transform 支持使用您创建、 AWS 拥有和管理的对称客户管理密钥，在使用自有密钥的现有加密基础上添加第二层加密。由于您可以完全控制这层加密，因此可以执行以下任务：
+ 制定和维护关键策略
+ 建立和维护 IAM 策略和授权
+ 启用和禁用密钥策略
+ 轮换加密材料
+ 添加 标签
+ 创建密钥别名
+ 轮换加密材料
+ 添加 标签
+ 创建密钥别名
+ 安排密钥删除
+ 有关更多信息，请参阅《AWS Key Management Service Developer Guide》**中的 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
AWS Transform 使用 AWS 自有密钥自动启用静态加密，以免费保护个人身份数据。但是，使用客户管理的密钥需要 AWS KMS 付费。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://docs.aws.amazon.com/kms/pricing/)。

有关更多信息 AWS KMS，请参阅[什么是 AWS Key Management Service？](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)

### 操作方法 AWS Transform 将补助金用于 AWS Key Management Service
<a name="how-use-kms"></a>

AWS Transform 需要获得授权才能使用您的客户管理密钥。

当您创建使用客户管理密钥加密的 [资源名称] 时，通过向发送 CreateGrant 请求来代表您 AWS Transform 创建授权 AWS Key Management Service。中的授权 AWS Key Management Service 用于授予对客户账户中的 KMS 密钥的 AWS Transform 访问权限。

AWS Transform 需要获得授权，才能使用您的客户管理密钥进行以下内部操作：
+ 向发送 [KMS API] 请求， AWS KMS 以验证创建 [资源名称] 时输入的对称客户管理的 KMS 密钥 ID 是否有效。
+ 向发送 [KMS API] 请求 AWS KMS 以生成由您的客户管理密钥加密的数据密钥。
+ 发送 [KMS API] 请求 AWS KMS 以解密加密的数据密钥，以便它们可用于加密您的数据。

您可以随时撤销授予访问权限，或删除服务对客户托管密钥的访问权限。如果你这样做，将 AWS Transform 无法访问由客户管理的密钥加密的任何数据，这会影响依赖该数据的操作。例如，如果您尝试从 AWS Transform 无法访问的加密 [资源名称] 获取 [资源名称]，则该操作将返回 AccessDeniedException 错误。

## 创建客户托管密钥
<a name="create-customer-key"></a>

您可以使用管理控制台或 AWS Key Management Service API 创建对称的客户 AWS 管理密钥。

要创建对称客户托管密钥，请按照《AWS Key Management Service 开发人员指南》**中的[创建对称客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)步骤进行操作。

要将您的客户管理密钥与您的 AWS Transform 资源一起使用，密钥政策中必须允许以下 API 操作：

kms: CreateGrant — 向客户管理的密钥添加授权。授予对指定 KMS 密钥的控制访问权限，这允许访问权限以授予 AWS Transform 操作需求。有关[使用授权](https://docs.aws.amazon.com/)的更多信息，请参阅**《AWS Key Management Service 开发人员指南》。

这 AWS Transform 允许执行以下操作：
+ 调用 [KMS API ([GenerateDataKeyWithoutPlainText](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext)/[GenerateDatakey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey)) 生成加密的数据密钥并将其存储，因为数据密钥不会立即用于加密。
+ 调用 [KMS API（[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt)）] 以使用存储的加密数据密钥访问加密数据。
+ 设置停用主体，以允许服务 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant)。
+ [kms: DescribeKey ](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey) — 提供客户管理的密钥详细信息，以允许 [服务名称] 验证密钥。

### 用于 SQL 现代化的加密
<a name="encryption-sql-mod"></a>

在 [ SQL Server 现代化](sql-server-modernization.md)过程中，会在您的账户中 AWS Transform 创建资源，例如 EC2 实例、ECS 集群、ECR 映像和 S3 对象。您可以选择提供客户管理的密钥来加密您账户中的数据。您需要使用密钥**CreatedFor**和值标记您的 KMS 密钥 ** AWSTrans ** Form。如果您没有默认密钥策略，此示例策略列出了密钥策略中所需的最低权限。如果您有默认密钥策略，除了默认密钥策略外，您还需要手动更新 KMS 密钥，以允许 ECS 使用您的密钥。

```
 "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "s3.*.amazonaws.com",
          "kms:EncryptionContext:aws-transform": "*"
        },
        "ArnLike": {
          "aws:PrincipalArn": "arn:aws:iam::*:role/*AWSTransform*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:ReEncrypt*"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": "ec2.*.amazonaws.com"
        },
        "ArnLike": {
          "aws:PrincipalArn": "arn:aws:iam::*:role/*AWSTransform*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "kms:CreateGrant",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:ViaService": [
            "ec2.*.amazonaws.com",
            "ecr.*.amazonaws.com"
          ]
        },
        "Bool": {
          "kms:GrantIsForAWSResource": "true"
        },
        "ArnLike": {
          "aws:PrincipalArn": "arn:aws:iam::*:role/*AWSTransform*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "fargate.amazonaws.com"
      },
      "Action": "kms:GenerateDataKeyWithoutPlaintext",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:ecs:clusterName": "AWSTransform*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "fargate.amazonaws.com"
      },
      "Action": "kms:CreateGrant",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:ecs:clusterName": "AWSTransform*"
        },
        "ForAllValues:StringEquals": {
          "kms:GrantOperations": "Decrypt"
        }
      }
    }
  ]
```

### 数据库迁移加密
<a name="encryption-db-migration"></a>

在数据库迁移过程中， AWS Transform 使用 AWS 数据库迁移服务 (DMS) 迁移数据库数据。您可以选择提供客户管理的密钥以在迁移期间加密您的数据库数据。

以下政策包含三个声明。第一条语句授予根账户对 AWS KMS 密钥的权限。第二条语句允许连接器角色在发现期间验证密钥。第三条语句允许连接器角色使用密钥进行 DMS 操作。

```
 "Statement": [
    {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::{{111122223333}}:root" },
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "Allow connector role to validate key during discovery",
      "Effect": "Allow",
      "Principal": { "AWS": "{{connector-role-arn}}" },
      "Action": "kms:DescribeKey",
      "Resource": "*"
    },
    {
      "Sid": "Allow connector role to use key via DMS",
      "Effect": "Allow",
      "Principal": { "AWS": "{{connector-role-arn}}" },
      "Action": [
        "kms:CreateGrant",
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:ReEncrypt*"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "dms.{{us-east-1}}.amazonaws.com"
        }
      }
    }
  ]
```

## 使用客户自主管理型 KMS 密钥
<a name="kms-keys"></a>

创建客户管理的 KMS 密钥后， AWS Transform 管理员必须在 AWS Transform 控制台中提供密钥才能使用它来加密数据。

要设置客户管理的密钥以对中的数据进行加密 AWS Transform，管理员需要权限才能使用 AWS KMS。

要使用使用客户管理的密钥加密的功能，用户需要 AWS Transform 允许访问客户管理的密钥的权限。

如果您在使用时看到与 KMS 授权相关的错误 AWS Transform，则可能需要更新权限 AWS Transform 以允许创建授权。要自动配置所需的权限，请转到 AWS Transform 控制台并在页面顶部的横幅中选择**更新权限**。 AWS Transform 为了允许创建授权，您需要更新 AWS Transform 控制台页面上的权限。

## 允许 AWS Transform 访问客户管理的密钥
<a name="id-based-policy-examples-allow-q-access-encryption"></a>

以下示例策略声明通过允许用户访问密钥来授予用户 AWS Transform 访问使用客户管理密钥加密的功能的权限。 AWS Transform 如果管理员设置了客户管理的密钥进行加密，则必须使用此策略。

**注意**  
 此信息不适用于使用 CMK 的 SQL Server 现代化部署工作流程。

```
 "Statement": [
    {
      "Sid": "QKMSDecryptGenerateDataKeyPermissions",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:ReEncryptFrom",
        "kms:ReEncryptTo"
      ],
      "Resource": [
        "arn:aws:kms:{{arn:aws:}}:{{111122223333}}:key/[[key_id]]"
      ],
      "Condition": {
        "StringLike": {
          "kms:ViaService": [
            "q.{{us-east-1}}.amazonaws.com"
          ]
        }
      }
    }
  ]
```