

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

# 数据加密
<a name="data-encryption"></a>

本主题提供有关传输中加密和静态加密的 Amazon Connect 决策的特定信息。

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

客户与 Amazon Connect 决策之间以及亚马逊连接决策与其下游依赖项之间的所有通信均使用 TLS 1.2 或更高版本的连接进行保护。

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

所有静态数据均使用服务器端加密进行加密。由于该服务以透明方式处理加密，因此无需进行其他配置。

默认情况下，Amazon Connect Decisions 使用来自 AWS 密钥管理服务 (AWS KMS) 的 AWS 自有加密密钥对您的数据进行加密。您无需采取任何措施来保护加密数据的 AWS 拥有的密钥。有关更多信息，请参阅《[ AWS 密钥管理服务开发人员指南》](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)*中的 AWS 拥有的密钥*。

您可以选择配置客户管理的 KMS 密钥，以完全控制密钥生命周期，包括创建、轮换、禁用和访问策略管理。

### 使用客户管理的 KMS 密钥加密静态数据
<a name="data-encryption-customer-managed-kms-keys"></a>

#### Amazon Connect 决策如何使用客户管理的 KMS 密钥
<a name="data-encryption-how-uses-cmk"></a>

当您配置客户管理的 KMS 密钥时，Amazon Connect Decisions 会使用它来加密实例中的所有静态数据。这包括存储在该服务的底层基础架构中的数据。

该服务通过三种机制访问您的密钥：
+ **服务主体 ** — `scn.amazonaws.com` 服务主体直接调用 KMS 进行加密、解密和 GenerateDataKey 操作，传递加密上下文和混乱的代理标头。
+ **授权 **-当您创建实例时，该服务会对您的密钥创建授权。这些补助允许依赖的 AWS 服务使用您的密钥加密和解密数据。删除实例后，赠款将停用。
+ **通过 FAS 实现实例角色 ** — 当您与控制台交互时，服务相关角色通过`scn.<region>.amazonaws.com` ViaService 条件访问您的密钥。

**加密上下文：**所有直接 KMS 操作都包括以下加密上下文：

```
{"aws:scn:arn": "arn:aws:scn:<region>:<account-id>:instance/<instance-id>"}
```

**数据密钥缓存：**亚马逊连接决策最多可缓存数据密钥 15 分钟。这意味着，在您禁用或撤消对 KMS 密钥的访问权限后，该服务可以在操作开始失败之前继续使用缓存的数据密钥长达 15 分钟。

#### 配置客户管理的 KMS 密钥
<a name="data-encryption-configuring-cmk"></a>

Amazon Connect 决策仅支持对称加密 KMS 密钥。 Multi-region 支持密钥。

##### 配置使用客户管理的 KMS 密钥的权限
<a name="data-encryption-configuring-permissions"></a>

要使用客户管理的 KMS 密钥，请按照以下三个步骤配置您的密钥策略：

1. **使用以下基本策略创建 KMS 密钥**。

1. **创建一个 Amazon Connect 决策实例**并选择该密钥。

1. **（可选，推荐）使用实例级限制**更新密钥策略。

##### 第 1 步 — 使用基本策略创建密钥
<a name="data-encryption-step1-base-policy"></a>

打开 [ AWS KMS 控制台](https://console.aws.amazon.com/kms)，选择**创建密钥**，然后将默认策略替换为以下内容。`<customer-account-id>`替换为您的 AWS 账户 ID `<region>` 和 AWS 区域。

```
{
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "AllowAccountRootFullAccess",
              "Effect": "Allow",
              "Principal": {
                "AWS": "arn:aws:iam::<customer-account-id>:root"
              },
              "Action": "kms:*",
              "Resource": "*"
            },
            {
              "Sid": "AllowScnRetrievalOfKeyMetadata",
              "Effect": "Allow",
              "Principal": {
                "Service": "scn.amazonaws.com"
              },
              "Action": "kms:DescribeKey",
              "Resource": "*",
              "Condition": {
                "StringEquals": {
                  "aws:SourceAccount": "<customer-account-id>"
                }
              }
            },
            {
              "Sid": "AllowScnEncryptDecryptWithContext",
              "Effect": "Allow",
              "Principal": {
                "Service": "scn.amazonaws.com"
              },
              "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey",
                "kms:GenerateDataKeyWithoutPlaintext"
              ],
              "Resource": "*",
              "Condition": {
                "StringEquals": {
                  "aws:SourceAccount": "<customer-account-id>"
                }
              }
            },
            {
              "Sid": "AllowScnCryptoViaDependencyServices",
              "Effect": "Allow",
              "Principal": {
                "Service": "scn.amazonaws.com"
              },
              "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
              ],
              "Resource": "*",
              "Condition": {
                "StringEquals": {
                  "kms:ViaService": [
                    "redshift-serverless.<region>.amazonaws.com",
                    "aoss.<region>.amazonaws.com",
                    "dynamodb.<region>.amazonaws.com",
                    "s3.<region>.amazonaws.com"
                  ]
                }
              }
            },
            {
              "Sid": "AllowScnCreateGrantForDependencyServices",
              "Effect": "Allow",
              "Principal": {
                "Service": "scn.amazonaws.com"
              },
              "Action": "kms:CreateGrant",
              "Resource": "*",
              "Condition": {
                "ForAllValues:StringEquals": {
                  "kms:GrantOperations": [
                    "Encrypt",
                    "Decrypt",
                    "GenerateDataKey",
                    "GenerateDataKeyWithoutPlaintext",
                    "DescribeKey",
                    "RetireGrant",
                    "ReEncryptFrom",
                    "ReEncryptTo",
                    "CreateGrant"
                  ]
                },
                "Bool": {
                  "kms:GrantIsForAWSResource": "true"
                }
              }
            },
            {
              "Sid": "AllowInstanceRoleDescribeKey",
              "Effect": "Allow",
              "Principal": {
                "AWS": "*"
              },
              "Action": "kms:DescribeKey",
              "Resource": "*",
              "Condition": {
                "ArnLike": {
                  "aws:PrincipalArn": "arn:aws:iam::<customer-account-id>:role/service-role/scn-instance-role-*"
                },
                "StringEquals": {
                  "kms:ViaService": "scn.<region>.amazonaws.com"
                }
              }
            },
            {
              "Sid": "AllowInstanceRoleEncryptDecrypt",
              "Effect": "Allow",
              "Principal": {
                "AWS": "*"
              },
              "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey*"
              ],
              "Resource": "*",
              "Condition": {
                "ArnLike": {
                  "aws:PrincipalArn": "arn:aws:iam::<customer-account-id>:role/service-role/scn-instance-role-*"
                },
                "StringEquals": {
                  "kms:ViaService": "scn.<region>.amazonaws.com"
                }
              }
            },
            {
              "Sid": "AllowInstanceRoleCreateGrant",
              "Effect": "Allow",
              "Principal": {
                "AWS": "*"
              },
              "Action": "kms:CreateGrant",
              "Resource": "*",
              "Condition": {
                "ArnLike": {
                  "aws:PrincipalArn": "arn:aws:iam::<customer-account-id>:role/service-role/scn-instance-role-*"
                },
                "StringEquals": {
                  "kms:ViaService": "scn.<region>.amazonaws.com"
                },
                "ForAllValues:StringEquals": {
                  "kms:GrantOperations": [
                    "Encrypt",
                    "Decrypt",
                    "GenerateDataKey",
                    "GenerateDataKeyWithoutPlaintext",
                    "DescribeKey",
                    "CreateGrant"
                  ]
                },
                "Bool": {
                  "kms:GrantIsForAWSResource": "true"
                }
              }
            }
          ]
        }
```

**政策声明解释：**
+ **AllowAccountRootFullAccess**— 确保密钥所有者保持完全控制权。需要防止钥匙锁定。
+ **AllowScnRetrievalOfKeyMetadata**— 允许该服务在实例创建期间验证密钥配置。通过`aws:SourceAccount`以下方式限定范围到您的账户。
+ **AllowScnEncryptDecryptWithContext**— 允许对您的数据进行直接加密操作。在步骤 3 之后，将通过加密上下文将其范围进一步限定为您的特定实例。
+ **AllowScnCryptoViaDependencyServices**— 允许通过不支持加密上下文的依赖关系服务进行加密操作。范围限定`kms:ViaService`为特定的服务端点。
+ **AllowScnCreateGrantForDependencyServices**— 允许为依赖项服务创建授权。仅限于列出的业务，仅限于 AWS 资源。
+ **AllowInstanceRoleDescribeKey**— 允许实例的服务相关角色通过 FAS 描述密钥。
+ **AllowInstanceRoleEncryptDecrypt**— 允许实例角色通过 FAS 解密和生成数据密钥。
+ **AllowInstanceRoleCreateGrant**— 允许实例角色为下游集成创建授权。

##### 第 2 步 — 创建您的 Amazon Connect决策实例
<a name="data-encryption-step2-create-instance"></a>

在创建实例期间，在加密设置**下选择**客户管理的密钥，然后选择您在步骤 1 中创建的密钥。

**重要**  
创建实例后，您无法更改此选择。如果您将来需要使用其他密钥，则必须创建一个新实例。

##### 第 3 步（可选）-添加实例级别限制
<a name="data-encryption-step3-instance-restrictions"></a>

创建您的实例后，更新密钥策略以限制仅访问该实例。这可以防止同一账户中的其他实例使用该密钥。

替换`<customer-account-id>``<region>`、和`<instance-id>`（Amazon Connection Decisions 控制台上显示的 UUID）。

与基本政策相比的变化是：
+ 在服务主体声明中添加`aws:SourceArn`条件，仅限于您的实例 ARN。
+ 为加密操作添加`kms:EncryptionContext:aws:scn:arn`条件，要求加密上下文与您的实例相匹配。

更新的政策（仅显示更改的声明）：

**AllowScnRetrievalOfKeyMetadata**— 添加`ArnLike`条件：

```
"Condition": {
          "StringEquals": {
            "aws:SourceAccount": "<customer-account-id>"
          },
          "ArnLike": {
            "aws:SourceArn": "arn:aws:scn:<region>:<customer-account-id>:instance/<instance-id>"
          }
        }
```

**AllowScnEncryptDecryptWithContext**— 添加`EncryptionContext`和`SourceArn`条件：

```
"Condition": {
          "StringEquals": {
            "aws:SourceAccount": "<customer-account-id>",
            "kms:EncryptionContext:aws:scn:arn": "arn:aws:scn:<region>:<customer-account-id>:instance/<instance-id>"
          },
          "ArnLike": {
            "aws:SourceArn": "arn:aws:scn:<region>:<customer-account-id>:instance/<instance-id>"
          }
        }
```

**AllowInstanceRoleEncryptDecrypt**— 添加`EncryptionContext`条件：

```
"Condition": {
          "ArnLike": {
            "aws:PrincipalArn": "arn:aws:iam::<customer-account-id>:role/scn-instance-role-*"
          },
          "StringEquals": {
            "kms:EncryptionContext:aws:scn:arn": "arn:aws:scn:<region>:<customer-account-id>:instance/<instance-id>",
            "kms:ViaService": "scn.<region>.amazonaws.com"
          }
        }
```

##### 使用客户管理的 KMS 密钥创建新实例
<a name="data-encryption-creating-instance-with-cmk"></a>

在 Amazon Connect 决策控制台中创建实例期间，您可以选择 KMS 密钥。有关创建实例的更多信息，请参阅[创建 Amazon Connect 决策实例](https://docs.aws.amazon.com/connect-decisions/latest/adminguide/creating-your-instance.html)。

##### 更改现有实例的加密配置
<a name="data-encryption-changing-encryption-config"></a>

亚马逊连接决策不支持更改活动实例上的 KMS 密钥。如果您需要使用其他密钥，则必须创建一个使用所需密钥配置的新实例。使用先前密钥加密的数据不会保留在新实例上。

##### 缩小对客户管理的 KMS 密钥的访问权限
<a name="data-encryption-scoping-down-access"></a>

您可以使用以下机制限制对密钥的访问：
+ **加密上下文 **-`kms:EncryptionContext:aws:scn:arn` 在密钥策略中使用来限制对特定实例的操作（请参阅步骤 3）。
+ **令人困惑的副手保护 ** — 该服务会通过 `aws:SourceAccount` KMS 调用。`aws:SourceArn`使用这些条件来确保只有您的账户和实例可以访问密钥。
+ **kms: ViaService ** — 实例角色只能通过访问密钥`scn.<region>.amazonaws.com`，防止在服务之外直接使用。
+ **拨款限制 ** — 拨款的范围限定`kms:GrantIsForAWSResource`并仅限于明确列出的业务。

**注意**  
依赖项服务（Redshift 无服务器、 OpenSearch 无服务器、DynamoDB）不支持加密上下文或混淆的副标头。这些服务的访问权限`kms:ViaService`仅限于使用。

### 监控亚马逊连接决策与 AWS KMS 的互动
<a name="data-encryption-monitoring-kms"></a>

您可以使用 AWS CloudTrail 跟踪亚马逊连接决策代表您提出的 KMS 请求。查找具有以下值的日志条目：


| 字段 | 预期价值 | 
| --- | --- | 
| eventName | `Decrypt`, `GenerateDataKey`, `CreateGrant` | 
| 用户 Identity.invokedBy | `scn.amazonaws.com` | 
| 请求 Parameters.encryptionContext | `{"aws:scn:arn": "arn:aws:scn:<region>:<account-id>:instance/<instance-id>"}` | 

您可以使用这些值筛选 CloudTrail 事件，审计 Amazon Connect 决策访问您的 KMS 密钥的时间和方式。

有关更多信息，请参阅使用 AWS [ 记录 AWS KMS API 调用 CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html)。