

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

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

Amazon Bedrock 使用加密来保护静态数据和传输中数据。

**传输中加密**

在内部 AWS，所有传输中的网络间数据都支持 TLS 1.2 加密。

通过安全 (SSL) 连接发出对 Amazon Bedrock API 和控制台的请求。您将 AWS Identity and Access Management (IAM) 角色传递给 Amazon Bedrock，以提供代表您访问资源以进行培训和部署的权限。

**静态加密**

Amazon Bedrock 提供静态[自定义模型加密](encryption-custom-job.md)。

## 密钥管理
<a name="key-management"></a>

使用 AWS Key Management Service 来管理用于加密资源的密钥。有关更多信息，请参阅 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)。您可以使用 KMS 密钥来加密以下资源。
+ 通过 Amazon Bedrock
  + 模型自定义任务及其输出自定义模型-在控制台中创建任务期间或通过在 [CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)API 调用中指定`customModelKmsKeyId`字段。
  + 代理-在控制台中创建代理期间，或者在 [CreateAgent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_CreateAgent.html)API 调用中指定`customerEncryptionKeyArn`字段。
  + 知识库的数据源提取作业-在控制台中创建知识库期间，或者通过在[CreateDataSource](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_CreateDataSource.html)或 [UpdateDataSource](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_UpdateDataSource.html)API 调用中指定`kmsKeyArn`字段。
  + Amazon S OpenSearch ervice 中的矢量存储-在创建矢量商店期间。有关更多信息，请参阅[创建、列出和删除亚马逊 OpenSearch 服务馆藏](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html)以及[加密亚马逊 OpenSearch 服务的静态数据](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html)。
  + 模型评估作业 — 在控制台中创建模型评估任务或在 [CreateEvaluationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateEvaluationJob.html)API 调用` customerEncryptionKeyId`中指定密钥 ARN 时。
+ 通过 Amazon S3 — 有关更多信息，请参阅[使用带 AWS KMS 密钥的服务器端加密 (SSE-](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) KMS)。
  + 用于模型自定义的训练、验证和输出数据
  + 知识库的数据来源
+ 通过 AWS Secrets Manager — 有关更多信息，请参阅中的[秘密加密和解密 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html)
  + 第三方模型的向量存储

加密资源后，您可以通过选择资源并在控制台中查看其**详细信息**或使用以下 `Get` API 调用来查找 KMS 密钥的 ARN。
+ [GetModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetModelCustomizationJob.html)
+ [GetAgent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetAgent.html)
+ [GetIngestionJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetIngestionJob.html)

# 自定义模型加密
<a name="encryption-custom-job"></a>

Amazon Bedrock 将您的训练数据与[CreateModelCustomizationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelCustomizationJob.html)操作或[控制台](model-customization-submit.md)一起使用，创建自定义模型，该模型是 Amazon Bedrock 基础模型的微调版本。您的自定义模型由管理和存储AWS。

Amazon Bedrock 仅使用您提供的微调数据对 Amazon Bedrock 模型进行微调。Amazon Bedrock 不会将微调数据用于任何其他用途。您的训练数据不会用于训练 Titan 基础模型，也不会分发给第三方。其他使用数据，例如使用时间戳、登录的账户 IDs以及服务记录的其他信息，也不会用于训练模型。

微调作业完成后，您为进行微调而提供的训练或验证数据都不会存储在 Amazon Bedrock 中。

请注意，经过微调的模型可以在生成完成时重放部分微调数据。如果您的应用程序不应以任何形式公开微调数据，那么您应首先从训练数据中筛选掉机密数据。如果您已经错误地使用机密数据创建了自定义模型，则可以删除该自定义模型，从训练数据中筛选掉机密信息，然后创建一个新模型。

要加密自定义模型（包括复制的模型），Amazon Bedrock 为您提供了两个选项：

1. **AWS 拥有的密钥**— 默认情况下，Amazon Bedrock 使用加密自定义模型。AWS 拥有的密钥您无法查看、管理AWS 拥有的密钥、使用或审核其使用情况。但是您无需执行任何工作或更改任何计划即可保护用于加密数据的密钥。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS 拥有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。

1. **客户托管密钥** – 您可以选择使用自行管理的客户自主管理型密钥加密自定义模型。有关更多信息AWS KMS keys，请参阅《*AWS Key Management Service开发人员指南》*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
Amazon Bedrock 自动启用静态加密AWS 拥有的密钥，不收取任何费用。如果您使用客户管理的密钥，则需要AWS KMS付费。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

有关的更多信息AWS KMS，请参阅《[AWS Key Management Service开发人员指南》](https://docs.aws.amazon.com/kms/latest/developerguide/)。

**Topics**
+ [Amazon Bedrock 如何使用补助金 AWS KMS](#encryption-br-grants)
+ [了解如何创建客户自主管理型密钥以及如何为其附加密钥策略](#encryption-key-policy)
+ [自定义模型和复制模型的权限和密钥策略](#encryption-cm-statements)
+ [监控 Amazon Bedrock 服务的加密密钥](#encryption-monitor-key)
+ [训练、验证和输出数据的加密](#encryption-custom-job-data)

## Amazon Bedrock 如何使用补助金 AWS KMS
<a name="encryption-br-grants"></a>

如果您指定客户托管密钥来加密自定义模型以进行模型自定义或模型复制任务，Amazon Bedrock 会通过向发送[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求来代表您创建与该自定义模型关联**的主要** KMS [授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。AWS KMS此授权允许 Amazon Bedrock 访问和使用您的客户自主管理型密钥。中的赠款AWS KMS用于让 Amazon Bedrock 访问客户账户中的 KMS 密钥。

Amazon Bedrock 需要主授权，才能将客户自主管理型密钥用于以下内部操作：
+ 向发送[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)请求，AWS KMS以验证您在创建任务时输入的对称客户托管 KMS 密钥 ID 是否有效。
+ 向发送[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)和[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求，AWS KMS以生成由您的客户托管密钥加密的数据密钥并解密加密的数据密钥，以便它们可用于加密模型工件。
+ 向发送[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求，使用上述操作的子集（`DescribeKey`、、`Decrypt`）创建限定范围的次要授权`GenerateDataKey`，用于异步执行模型自定义、模型复制或预配置吞吐量创建。AWS KMS
+ Amazon Bedrock 在创建补助金时指定了退休委托人，因此该服务可以发送请求。[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)

您拥有对客户托管AWS KMS密钥的完全访问权限。您可以按照 [AWS Key Management Service开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/)的[停用和撤销授权](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#grant-delete)中的步骤撤销授权，也可以通过修改[密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)随时删除服务对您的客户自主管理型密钥的访问权限。这样一来，Amazon Bedrock 将无法访问由您的密钥加密的自定义模型。

### 自定义模型的主授权和二级授权的生命周期
<a name="encryption-primary-secondary-grants"></a>
+ **主授权**的使用期限较长，只要相关的自定义模型仍在使用，它就会一直处于有效状态。删除自定义模型后，相应的主授权将自动停用。
+ **二级授权**的使用期限较短。一旦 Amazon Bedrock 代表客户执行的操作完成，它们就会自动停用。例如，模型复制任务完成后，允许 Amazon Bedrock 对复制的自定义模型进行加密的二级授权将立即停用。

## 了解如何创建客户自主管理型密钥以及如何为其附加密钥策略
<a name="encryption-key-policy"></a>

要使用您创建和管理的密钥对AWS资源进行加密，请执行以下常规步骤：

1. （先决条件）确保您的 IAM 角色拥有[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作权限。

1. 按照[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)中的步骤，使用AWS KMS控制台或[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作创建客户托管密钥。

1. 创建密钥时会返回密钥的 `Arn`，您可以将其用于需要使用密钥的操作（例如，[提交模型自定义作业](model-customization-submit.md)或[运行模型推理](inference-invoke.md)时）。

1. 创建密钥策略并为其附加所需权限。要创建密钥策略，请按照《AWS Key Management Service开发人员指南》中[创建密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)中的步骤进行操作。

## 自定义模型和复制模型的权限和密钥策略
<a name="encryption-cm-statements"></a>

创建 KMS 密钥后，您可以为其附加密钥策略。密钥策略是[基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)，您可以将其附加到客户自主管理型密钥上，用于控制对密钥的访问权限。每个客户托管式密钥必须只有一个密钥策略，其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时，可以指定密钥策略。您可以随时修改密钥策略，但在更改在整个 AWS KMS 中可用之前可能会出现短暂的延迟。有关更多信息，请参阅[https://docs.aws.amazon.com/kms/latest/developerguide/](https://docs.aws.amazon.com/kms/latest/developerguide/)《AWS Key Management Service 开发人员指南》中的[管理对客户托管密钥的访问](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#managing-access)。

以下 KMS [操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-actions-as-permissions)用于加密自定义模型和复制模型的密钥：

1. k@@ [ms: CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) — 允许 Amazon Bedrock 服务委托人通过授权[操作访问指定的 KMS 密钥，从而为客户托管密钥创建授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)。有关授权的更多信息，请参阅 [AWS Key Management Service 开发人员指南](https://docs.aws.amazon.com/kms/latest/developerguide/)中的 [Grants in AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。
**注意**  
Amazon Bedrock 还设置了停用主体，并将在不再需要授权后自动停用授权。

1. [kms: DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) — 提供客户托管的密钥详细信息以允许 Amazon Bedrock 验证密钥。

1. [kms: GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) — 提供客户托管的密钥详细信息以允许 Amazon Bedrock 验证用户访问权限。Amazon Bedrock 会将生成的加密文字与自定义模型一起存储，用作对自定义模型用户的额外验证检查。

1. [kms: decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) – 解密存储的加密文字，以验证角色是否有适当权限访问加密自定义模型的 KMS 密钥。

作为最佳安全实践，我们建议您添加 k [ms: ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service) 条件密钥，以限制对 Amazon Bedrock 服务的访问密钥。

虽然一个密钥只能附加一个密钥策略，但您可以通过在策略的 `Statement` 字段的列表中添加语句，将多个语句附加到密钥策略。

以下语句与加密自定义模型和复制模型有关：

### 加密模型
<a name="encryption-key-policy-encrypt"></a>

要使用您的客户自主管理型密钥加密自定义模型或复制的模型，请在密钥策略中包含以下语句，以允许加密模型。在 `Principal` 字段中，将您要允许加密和解密密钥的账户添加到 `AWS` 子字段映射的列表中。如果您使用`kms:ViaService`条件键，则可以为每个区域添加一行，或者使用*\$1*代替*\$1\$1region\$1*来允许所有支持 Amazon Bedrock 的区域。

```
{
    "Sid": "PermissionsEncryptDecryptModel",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::${account-id}:role/${role}"
        ]
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:DescribeKey",
        "kms:CreateGrant"
    ],
    "Resource": "*",
    "Condition": {
        "StringLike": {
            "kms:ViaService": [
                "bedrock.${region}.amazonaws.com"
            ] 
        }
    }
}
```

### 允许访问加密模型
<a name="encryption-key-policy-decrypt"></a>

要允许访问使用 KMS 密钥加密的模型，请在密钥策略中加入以下语句以允许解密密钥。在 `Principal` 字段中，将您要允许解密密钥的账户添加到 `AWS` 子字段映射的列表中。如果您使用`kms:ViaService`条件键，则可以为每个区域添加一行，或者使用*\$1*代替*\$1\$1region\$1*来允许所有支持 Amazon Bedrock 的区域。

```
{
    "Sid": "PermissionsDecryptModel",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::${account-id}:role/${role}"
        ]
    },
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": "*",
    "Condition": {
        "StringLike": {
            "kms:ViaService": [
                "bedrock.${region}.amazonaws.com"
            ] 
        }
    }
}
```

要了解您需要创建的密钥策略，请展开与您的使用案例相对应的部分：

### 设置用于加密自定义模型的密钥权限
<a name="encryption-cm"></a>

如果您计划使用 KMS 密钥对自定义模型进行加密，那么该密钥的密钥策略将取决于您的使用案例。展开与您的使用案例相对应的部分：

#### 用于自定义模型的角色和用于调用模型的角色相同
<a name="encryption-cm-custom-invoke-same"></a>

如果用于调用自定义模型的角色与用于自定义模型的角色相同，则您只需使用 [加密模型](#encryption-key-policy-encrypt) 中的语句。在以下策略模板的 `Principal` 字段中，将您要允许自定义和调用自定义模型的账户添加到 `AWS` 子字段映射的列表中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PermissionsCustomModelKey",
    "Statement": [
        {
            "Sid": "PermissionsEncryptCustomModel",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/Role"
                ]
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

#### 用于自定义模型的角色和用于调用模型的角色不同
<a name="encryption-custom-invoke-different"></a>

如果用于调用自定义模型的角色与用于自定义模型的角色不同，您需要同时使用 [加密模型](#encryption-key-policy-encrypt) 和 [允许访问加密模型](#encryption-key-policy-decrypt) 中的语句。按如下方式修改以下策略模板中的语句：

1. 第一条语句允许加密和解密密钥。在 `Principal` 字段中，将您要允许自定义自定义模型的账户添加到 `AWS` 子字段映射的列表中。

1. 第二条语句仅允许对密钥进行解密。在 `Principal` 字段中，将您要仅允许调用自定义模型的账户添加到 `AWS` 子字段映射的列表中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PermissionsCustomModelKey",
    "Statement": [
        {
            "Sid": "PermissionsEncryptCustomModel",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/Role"
                ]
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "PermissionsDecryptModel",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/Role"
                ]
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

### 设置用于复制自定义模型的密钥权限
<a name="encryption-copy"></a>

当您复制自己拥有或已共享给的模型时，您可能需要管理最多两个密钥策略：

#### 用于加密复制模型的密钥的密钥策略
<a name="encryption-copied-model-key-policy"></a>

如果您计划使用 KMS 密钥对复制模型进行加密，那么该密钥的密钥策略将取决于您的使用案例。展开与您的使用案例相对应的部分：

##### 用于复制模型的角色和用于调用模型的角色相同
<a name="encryption-copied-model-copy-invoke-same"></a>

如果用于调用复制模型的角色与用于创建模型复制的角色相同，则您只需使用 [加密模型](#encryption-key-policy-encrypt) 中的语句。在以下策略模板的 `Principal` 字段中，将您要允许复制和调用复制模型的账户添加到 `AWS` 子字段映射的列表中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PermissionsCopiedModelKey",
    "Statement": [
        {
            "Sid": "PermissionsEncryptCopiedModel",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/Role"
                ]
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

##### 用于复制模型的角色与用于调用模型的角色不同
<a name="encryption-copied-model-copy-invoke-different"></a>

如果用于调用复制模型的角色与用于创建模型复制的角色不同，您需要同时使用 [加密模型](#encryption-key-policy-encrypt) 和 [允许访问加密模型](#encryption-key-policy-decrypt) 中的语句。按如下方式修改以下策略模板中的语句：

1. 第一条语句允许加密和解密密钥。在 `Principal` 字段中，将您要允许创建复制模型的账户添加到 `AWS` 子字段映射的列表中。

1. 第二条语句仅允许对密钥进行解密。在 `Principal` 字段中，将您要仅允许调用复制模型的账户添加到 `AWS` 子字段映射的列表中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PermissionsCopiedModelKey",
    "Statement": [
        {
            "Sid": "PermissionsEncryptCopiedModel",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/Role"
                ]
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "PermissionsDecryptCopiedModel",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/Role"
                ]
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

#### 对要复制的源模型进行加密的密钥策略
<a name="encryption-copy-source-model-key-policy"></a>

如果您要复制的源模型是使用 KMS 密钥加密的，请将 [允许访问加密模型](#encryption-key-policy-decrypt) 中的语句附加到用于加密源模型的密钥策略中。此语句允许模型复制角色对用于加密源模型的密钥进行解密。在以下策略模板的 `Principal` 字段中，将您要允许复制源模型的账户添加到 `AWS` 子字段映射的列表中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PermissionsSourceModelKey",
    "Statement": [
        {
            "Sid": "PermissionsDecryptModel",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/Role"
                ]
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

## 监控 Amazon Bedrock 服务的加密密钥
<a name="encryption-monitor-key"></a>

当您将AWS KMS客户托管密钥与您的 Amazon Bedrock 资源一起使用时，您可以使用[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)或 [Amazon CloudWatch Logs 来跟踪 Amaz](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) on Bedrock 向其发送的请求。AWS KMS

以下是 Amazon Bedrock [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)为创建主拨款而调用的监控 KMS 操作的示例AWS CloudTrail事件：

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:SampleUser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/RoleForModelCopy/SampleUser01",
        "accountId": "111122223333",
        "accessKeyId": "EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/RoleForModelCopy",
                "accountId": "111122223333",
                "userName": "RoleForModelCopy"
            },
            "attributes": {
                "creationDate": "2024-05-07T21:46:28Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "bedrock.amazonaws.com"
    },
    "eventTime": "2024-05-07T21:49:44Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "bedrock.amazonaws.com",
    "userAgent": "bedrock.amazonaws.com",
    "requestParameters": {
        "granteePrincipal": "bedrock.amazonaws.com",
        "retiringPrincipal": "bedrock.amazonaws.com",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
        "operations": [
            "Decrypt",
            "CreateGrant",
            "GenerateDataKey",
            "DescribeKey"
        ]
    },
    "responseElements": {
        "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

## 训练、验证和输出数据的加密
<a name="encryption-custom-job-data"></a>

当您使用 Amazon Bedrock 运行模型自定义作业时，需要将输入文件存储在您的 Amazon S3 存储桶中。任务完成后，Amazon Bedrock 会将输出指标文件存储在您在创建任务时指定的 S3 存储桶中，并将生成的自定义模型项目存储在由控制的 S3 存储桶中。AWS

输出文件使用 S3 存储桶的加密配置进行加密。这些文件是使用 [SSE-S3 服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)或 [AWS KMS KMS SSE-KMS 加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)进行加密的，具体取决于您对 S3 存储桶的设置。

# 导入的自定义模型的加密
<a name="encryption-import-model"></a>

Amazon Bedrock 支持通过两种方式创建自定义模型，这两种方式使用了相同的加密方法。您的自定义模型由以下人员管理和存储AWS：
+ **自定义模型导入作业** – 用于导入自定义的开源基础模型（如 Mistral AI 或 Llama 模型）。
+ **创建自定义模型** — 用于导入你在 A SageMaker I 中自定义的 Amazon Nova 模型。

对于自定义模型的加密，Amazon Bedrock 提供了以下选项：
+ **AWS自有密钥** — 默认情况下，Amazon Bedrock 使用AWS自有密钥对导入的自定义模型进行加密。您无法查看、管理或使用AWS自有密钥，也无法审核其使用情况。但是，无需采取任何措施或更改任何计划即可保护用于加密数据的密钥。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS 拥有的密钥](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#aws-owned-cmk)。
+ **客户托管密钥 (CMK)** — 您可以通过选择客户托管密钥 (CMK) 来选择在现有AWS拥有的加密密钥之上添加第二层加密。您可以创建、拥有和管理自己的客户自主管理型密钥。

   由于您可以完全控制这层加密，因此可以执行以下任务：
  + 建立和维护密钥策略
  + 创建和维护 IAM 策略和授权
  + 启用和禁用密钥策略
  + 轮换密钥加密材料
  + 添加标签
  + 创建密钥别名
  + 计划密钥删除

  有关更多信息，请参阅《AWS Key Management Service Developer Guide》**中的 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
对于您导入的所有自定义模型，Amazon Bedrock 会使用AWS自有密钥自动启用静态加密，从而免费保护客户数据。如果您使用客户管理的密钥，则需要AWS KMS付费。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://docs.aws.amazon.com/)。

## Amazon Bedrock 如何使用补助金 AWS KMS
<a name="import-model-kms-grants"></a>

如果您指定客户自主管理型密钥来加密导入的模型。Amazon Bedrock 通过向发送[CreateGrant](https://docs.aws.amazon.com//kms/latest/APIReference/API_CreateGrant.html)申请，代表您创建与导入模型相关**的主要AWS KMS**[授权](https://docs.aws.amazon.com/)。AWS KMS此授权允许 Amazon Bedrock 访问和使用您的客户自主管理型密钥。中的赠款AWS KMS用于让 Amazon Bedrock 访问客户账户中的 KMS 密钥。

Amazon Bedrock 需要主授权，才能将客户自主管理型密钥用于以下内部操作：
+ 向发送[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)请求，AWS KMS以验证您在创建任务时输入的对称客户托管 KMS 密钥 ID 是否有效。
+ 向发送[GenerateDataKey](https://docs.aws.amazon.com//kms/latest/APIReference/API_GenerateDataKey.html)和[解密](https://docs.aws.amazon.com//kms/latest/APIReference/API_Decrypt.html)请求，AWS KMS以生成由您的客户托管密钥加密的数据密钥并解密加密的数据密钥，以便它们可用于加密模型工件。
+ 向发送[CreateGrant](https://docs.aws.amazon.com//kms/latest/APIReference/API_CreateGrant.html)请求AWS KMS，使用上述操作的子集（`DescribeKey`、、`GenerateDataKey``Decrypt`）创建限定范围的次要授权，用于异步执行模型导入和按需推理。
+ Amazon Bedrock 在创建补助金时指定了退休委托人，因此该服务可以发送请求。[RetireGrant](https://docs.aws.amazon.com//kms/latest/APIReference/API_RetireGrant.html)

您拥有对客户托管AWS KMS密钥的完全访问权限。您可以按照《AWS Key Management Service 开发人员指南》**的[停用和撤销授权](https://docs.aws.amazon.com//kms/latest/developerguide/grant-manage.html#grant-delete)中的步骤撤销授权，也可以通过修改密钥策略随时删除服务对您的客户自主管理型密钥的访问权限。这样一来，Amazon Bedrock 将无法访问由您的密钥加密的导入模型。

### 自定义导入模型的主授权和二级授权的生命周期
<a name="import-model-kms-grants-lifecycle"></a>
+ **主授权**的使用期限较长，只要相关的自定义模型仍在使用，它就会一直处于有效状态。删除自定义导入模型后，相应的主授权将自动停用。
+ **二级授权**的使用期限较短。一旦 Amazon Bedrock 代表客户执行的操作完成，它们就会自动停用。例如，自定义模型导入作业完成后，允许 Amazon Bedrock 对导入模型进行加密的二级授权将立即停用。

# 使用客户自主管理型密钥（CMK）
<a name="import-model-using-cmk"></a>

如果您计划使用客户自主管理型密钥来加密您的自定义导入模型，请完成以下步骤：

1. 使用 AWS Key Management Service 创建客户自主管理型密钥。

1. 附加一个[基于资源的策略](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_identity-vs-resource.html)，允许指定角色创建和使用自定义导入的模型。

**创建客户托管密钥**

首先确保您拥有 `CreateKey` 的权限。然后按照[创建密钥](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html)中的步骤在AWS KMS控制台或 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)API 操作中创建客户托管密钥。确保创建对称加密密钥。

创建密钥时会返回密钥的 `Arn` 值，在使用自定义模型导入功能导入自定义模型时，您可以使用该密钥作为 `importedModelKmsKeyId `。

**创建密钥策略并将其附加到客户自主管理型密钥上**

密钥策略是[基于资源的策略](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_identity-vs-resource.html)，您可以将其附加到客户自主管理型密钥上，以控制对密钥的访问权限。每个客户托管式密钥必须只有一个密钥策略，其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时，可以指定密钥策略。您可以随时修改密钥策略，但在更改在整个 AWS KMS 中可用之前可能会出现短暂的延迟。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[管理对客户托管密钥的访问权限](https://docs.aws.amazon.com//kms/latest/developerguide/control-access-overview.html#managing-access)。

**对导入的自定义模型进行加密**

要使用您的客户托管密钥对导入的自定义模型进行加密，您必须在密钥策略中包含以下AWS KMS操作：
+ k@@ [ms: CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) — 允许 Amazon Bedrock 服务委托人通过授权[操作访问指定的 KMS 密钥，从而为客户托管密钥创建授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)。有关使用授权的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [Grants in AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。
**注意**  
Amazon Bedrock 还设置了停用主体，并将在不再需要授权后自动停用授权。
+ [kms: DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) — 提供客户托管的密钥详细信息以允许 Amazon Bedrock 验证密钥。
+ [kms: GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) — 提供客户托管的密钥详细信息以允许 Amazon Bedrock 验证用户访问权限。Amazon Bedrock 会将生成的加密文字与导入的自定义模型一起存储，用作对导入的自定义模型用户的额外验证检查。
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)：解密存储的加密文字，以验证角色是否有适当权限访问加密导入的自定义模型的 KMS 密钥。

以下是一个策略示例，您可以将该密钥附加到用于加密导入模型的角色的密钥上：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "KMS key policy for a key to encrypt an imported custom model",
    "Statement": [
        {
            "Sid": "Permissions for model import API invocation role",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/role"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**解密已加密的导入自定义模型**

如果您要导入的自定义模型已被其他客户自主管理型密钥加密，则必须为同一角色添加 `kms:Decrypt` 权限，如以下策略所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "KMS key policy for a key that encrypted a custom imported model",
    "Statement": [
        {
            "Sid": "Permissions for model import API invocation role",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/role"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# 监控 Amazon Bedrock 服务的加密密钥
<a name="import-model-monitor-encryption-keys"></a>

当您将AWS KMS客户托管密钥与您的 Amazon Bedrock 资源一起使用时，您可以使用[AWS CloudTrail](https://docs.aws.amazon.com//awscloudtrail/latest/userguide/cloudtrail-user-guide.html)或 [Amazon CloudWatch Logs 来跟踪 Amaz](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) on Bedrock 向其发送的请求。AWS KMS

以下是 Amazon Bedrock [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)为创建主拨款而调用的监控AWS KMS操作的示例AWS CloudTrail事件：

```
{
"eventVersion": "1.09",
    "userIdentity": {
"type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:SampleUser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/RoleForModelImport/SampleUser01",
        "accountId": "111122223333",
        "accessKeyId": "EXAMPLE",
        "sessionContext": {
"sessionIssuer": {
"type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/RoleForModelImport",
                "accountId": "111122223333",
                "userName": "RoleForModelImport"
            },
            "attributes": {
"creationDate": "2024-05-07T21:46:28Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "bedrock.amazonaws.com"
    },
    "eventTime": "2024-05-07T21:49:44Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "bedrock.amazonaws.com",
    "userAgent": "bedrock.amazonaws.com",
    "requestParameters": {
"granteePrincipal": "bedrock.amazonaws.com",
        "retiringPrincipal": "bedrock.amazonaws.com",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
        "operations": [
            "Decrypt",
            "CreateGrant",
            "GenerateDataKey",
            "DescribeKey"
        ]
    },
    "responseElements": {
"grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": false,
    "resources": [
        {
"accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

按照[创建策略](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-overview.html)中的步骤，将以下基于资源的策略附加到 KMS 密钥。该策略包含两个语句。

1. 角色对模型自定义构件进行加密的权限。将导入 ARNs 的自定义模型构建器角色添加到该`Principal`字段。

1. 角色在推理中使用导入的自定义模型的权限。将导入 ARNs 的自定义模型用户角色添加到该`Principal`字段。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "KMS Key Policy",
    "Statement": [
        {
            "Sid": "Permissions for imported model builders",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/role"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Permissions for imported model users",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/role"
            },
            "Action": "kms:Decrypt",
            "Resource": "*"
        }
    ]
}
```

------

# Amazon Bedrock数据自动化中的加密
<a name="encryption-bda"></a>

 Amazon Bedrock数据自动化 (BDA) 使用加密来保护您的静态数据。这包括由服务存储的蓝图、项目和提取的见解。BDA 提供了两个加密数据的选项：

1. AWS自有密钥 — 默认情况下，BDA 使用AWS自有密钥加密您的数据。您无法查看、管理或使用AWS自有密钥，也无法审核其使用情况。但是，无需采取任何措施或更改任何计划即可保护用于加密数据的密钥。有关更多信息，请参阅《[密AWS钥管理服务开发者指南》中的AWS自](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)有密钥。

1.  客户自主管理型密钥 – 您可以选择使用您自行管理的客户自主管理型密钥来加密数据。有关AWS KMS密钥的更多信息，请参阅《密[钥管理服务开发人员指南》AWS中的客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。BDA 不支持在 Amazon Bedrock 控制台中使用客户自主管理型密钥，仅支持在 API 操作中使用。

Amazon Bedrock数据自动化自动启用使用AWS自有密钥进行静态加密，不收取任何费用。如果您使用客户管理的密钥，则需要AWS KMS付费。有关定价的更多信息，请参阅AWS KMS[定价](https://aws.amazon.com/kms/pricing/)。

## 如何在中Amazon Bedrock使用补助 AWS KMS
<a name="encryption-bda-grants"></a>

 如果您在调用 A invokeDataAutomation sync 时指定了用于加密您的 BDA 的客户托管密钥，则该服务会通过向发送 CreateGrant 请求来代表您创建与您的资源关联的授权。AWS KMS该授权允许 BDA 访问和使用您的客户自主管理型密钥。

 BDA 将对您的客户自主管理型密钥使用该授权，以执行以下内部操作：
+ DescribeKey — 向发送请求AWS KMS以验证您提供的对称客户托管AWS KMS密钥 ID 是否有效。
+ GenerateDataKey 和 Decrypt — 向发送请求AWS KMS以生成由您的客户托管密钥加密的数据密钥并解密加密的数据密钥，以便它们可用于加密您的资源。
+ CreateGrant — 向发送请求，AWS KMS使用上述操作的子集（DescribeKey、、 GenerateDataKey Decrypt）创建限定范围的授权，用于异步执行操作。

 您拥有对客户托管AWS KMS密钥的完全访问权限。您可以按照《AWS KMS 开发人员指南》的“停用和撤销授权”中的步骤撤销授权，也可以通过修改密钥策略随时删除服务对您的客户自主管理型密钥的访问权限。如果您这样做，BDA 将无法访问由您的密钥加密的资源。

如果您在撤销授权后发起新的 invokeDataAutomation Async 调用，BDA 将重新创建授权。授权将在 30 小时后由 BDA 停用。

## 创建客户自主管理型密钥并附加密钥策略
<a name="encryption-bda-creating-keys"></a>

 要使用自己创建和管理的密钥加密 BDA 资源，请执行以下常规步骤：

1.  （先决条件）确保您的 IAM 角色拥有 CreateKey 操作权限。

1.  按照[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)中的步骤使用AWS KMS控制台或 CreateKey 操作创建客户托管密钥。

1.  创建密钥会返回一个 ARN，您可以将其用于需要使用密钥的操作（例如，在 BDA 中创建项目或蓝图时），例如异步操作。 invokeDataAutomation

1.  创建密钥策略并为其附加所需权限。要创建密钥策略，请按照《AWS KMS开发人员指南》中[创建密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-create.html)中的步骤进行操作。

## Amazon Bedrock数据自动化资源的权限和密钥策略
<a name="encryption-bda-key-policies.title"></a>

 创建AWS KMS密钥后，您可以为其附加密钥策略。以下 AWS KMS 操作用于加密 BDA 资源的密钥：

1.  kms:CreateGrant — 允许 BDA 服务通过授权操作访问指定密钥，从而为客户托管AWS KMS密钥创建授权（需要）。 InvokeDataAutomationAsync

1.  kms:DescribeKey — 提供客户管理的密钥详细信息，以便 BDA 验证密钥。

1.  kms:GenerateDataKey — 提供客户管理的密钥详细信息，以允许 BDA 验证用户访问权限。

1.  kms:解密 — 解密存储的密文以验证角色是否可以正确访问加密 BDA 资源的AWS KMS密钥。

**针对 Amazon Bedrock 数据自动化功能的密钥策略**

 要使用客户自主管理型密钥加密 BDA 资源，请在密钥策略中添加以下语句，并将 `${account-id}`、`${region}`、和 `${key-id}` 替换为您的特定值：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "KMS key policy for a key to encrypt data for BDA resource",
    "Statement": [
        {
            "Sid": "Permissions for encryption of data for BDA resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/Role"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

**IAM 角色权限**

用于与 BDA 交互的 IAM 角色AWS KMS应具有以下权限，`${key-id}`用您的特定值替换`${region}``${account-id}`、和：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/KeyId",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "bedrock.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

## Amazon Bedrock 自动化加密上下文
<a name="encryption-bda-context"></a>

BDA 在所有加密操作中使用相同的AWS KMS加密上下文，其中密钥是`aws:bedrock:data-automation-customer-account-id`，值是您的AWS账户 ID。加密上下文的示例如下。

```
"encryptionContext": {
     "bedrock:data-automation-customer-account-id": "account id"
}
```

**使用加密上下文进行监控**  
使用对称的客户自主管理型密钥来加密您的数据时，您还可以使用审计记录和日志中的加密上下文来识别客户自主管理型密钥的使用情况。加密上下文还会显示在AWS CloudTrail或 Amazon Logs 生成的 CloudWatch 日志中。

**使用加密上下文控制对客户托管密钥的访问**  
您可以使用密钥策略和 IAM 策略中的加密上下文作为条件来控制对您的对称客户托管密钥的访问。您也可以在授予中使用加密上下文约束。BDA 在授权中使用加密上下文约束来控制对您账户或区域中客户自主管理型密钥的访问。授权约束要求授权允许的操作使用指定的加密上下文。

以下是密钥策略声明示例，用于授予对特定加密上下文的客户托管密钥的访问权限。此策略语句中的条件要求授权具有指定加密上下文的加密上下文约束。

```
[
    {
        "Sid": "Enable DescribeKey, Decrypt, GenerateDataKey",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
        },
        "Action": ["kms:DescribeKey", "kms:Decrypt", "kms:GenerateDataKey"],
        "Resource": "*"
    },
    {
        "Sid": "Enable CreateGrant",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
        },
        "Action": "kms:CreateGrant",
        "Resource": "*",
        "Condition": {
            "StringLike": {
                "kms:EncryptionContext:aws:bedrock:data-automation-customer-account-id": "111122223333"
            },
            "StringEquals": {
                "kms:GrantOperations": ["Decrypt", "DescribeKey", "GenerateDataKey"]
            }
        }
    }
]
```

## 监控您的加密密钥以实现Amazon Bedrock数据自动化
<a name="encryption-bda-monitoring"></a>

 当您在Amazon Bedrock数据自动化资源中使用AWS KMS客户托管密钥时，您可以使用[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)或[Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)跟踪Amazon Bedrock数据自动化发送到的请求AWS KMS。以下是用于监控Amazon Bedrock数据自动化[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)为创建主授权而调用的AWS KMS操作AWS CloudTrail的事件示例：

```
{
    "eventVersion": "1.09",
        "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:SampleUser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/RoleForDataAutomation/SampleUser01",
        "accountId": "111122223333",
        "accessKeyId": "EXAMPLE",
        "sessionContext": {
        "sessionIssuer": {
        "type": "Role",
        "principalId": "AROAIGDTESTANDEXAMPLE",
        "arn": "arn:aws:iam::111122223333:role/RoleForDataAutomation",
        "accountId": "111122223333",
        "userName": "RoleForDataAutomation"
        },
        "attributes": {
        "creationDate": "2024-05-07T21:46:28Z",
        "mfaAuthenticated": "false"
    }
    },
    "invokedBy": "bedrock.amazonaws.com"
    },
    "eventTime": "2024-05-07T21:49:44Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "bedrock.amazonaws.com",
    "userAgent": "bedrock.amazonaws.com",
    "requestParameters": {
    "granteePrincipal": "bedrock.amazonaws.com",
    "retiringPrincipal": "bedrock.amazonaws.com",
    "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
     "constraints": {
            "encryptionContextSubset": {
                "aws:bedrock:data-automation-customer-account-id": "000000000000"
            }
        },
    "operations": [
    "Decrypt",
    "CreateGrant",
    "GenerateDataKey",
    "DescribeKey"
    ]
    },
    "responseElements": {
    "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
    "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": false,
    "resources": [
    {
    "accountId": "111122223333",
    "type": "AWS::KMS::Key",
    "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

# 代理资源的加密
<a name="encryption-agents-new"></a>

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

Amazon Bedrock 使用默认的 AWS 拥有的密钥自动加密代理的信息。这包括控制面板和会话数据。您无法查看、管理或审计对 AWS 拥有的密钥的使用。有关更多信息，请参阅 [AWS 拥有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。

虽然您无法禁用此加密层，但您可以选择使用客户自主管理型密钥而不是 AWS 拥有的密钥来加密代理的信息。Amazon Bedrock 支持使用您可以创建、拥有和管理的对称客户自主管理型密钥，而非使用默认的 AWS 拥有的加密功能。有关更多信息，请参阅[客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**重要**  
Amazon Bedrock 会自动使用 AWS 拥有的密钥来加密您代理的会话信息，且不收取任何费用。
使用客户自主管理型密钥会产生 AWS KMS 费用。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。
如果您是在 2025 年 1 月 22 日*之前*创建的代理，并且想要使用客户自主管理型密钥来加密代理资源，请按照[加密 2025 年 1 月 22 日之前创建的代理的代理资源](encryption-agents.md)中的说明进行操作。

# 使用客户自主管理型密钥（CMK）加密代理资源
<a name="cmk-agent-resources"></a>

您可以随时创建客户自主管理型密钥，使用在构建代理时提供的以下代理信息，来加密您的代理信息。

**注意**  
以下代理资源仅针对 2025 年 1 月 22 日之后创建的代理进行加密。


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/cmk-agent-resources.html)

要创建客户自主管理型密钥，请使用以下步骤：

1. 使用 AWS Key Management Service创建客户自主管理型密钥。

1. 创建密钥策略并附加到客户自主管理型密钥上

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

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

 首先确保您拥有 `CreateKey` 权限，然后按照《AWS Key Management Service 开发人员指南》**中有关[创建对称的客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)的步骤进行操作。

**密钥策略** – 密钥策略控制对客户自主管理型密钥的访问。每个客户托管式密钥必须只有一个密钥策略，其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时，可以指定密钥策略。有关更多信息，请参阅**《AWS Key Management Service 开发人员指南》中的[管理对客户自主管理型密钥的访问](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)。

如果您在 2025 年 1 月 22 日之后创建了代理，并且希望使用客户自主管理型密钥来加密代理的信息，请确保调用代理 API 操作的用户或角色在密钥策略中具有以下权限：
+ [kms: GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) — 返回一个唯一的对称数据密钥以供在 AWS KMS 之外使用。
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) – 解密已通过 KMS 密钥加密的加密文字。

创建密钥时会返回密钥的 `Arn`，在创建代理时，您可以将其用作 `customerEncryptionKeyArn`。

## 创建密钥策略并将其附加到客户自主管理型密钥上
<a name="attach-policy-agent"></a>

如果您使用客户自主管理型密钥加密代理资源，则必须设置基于身份的策略和基于资源的策略，以允许 Amazon Bedrock 代表您加密和解密代理资源。

**基于身份的政策**

将以下基于身份的策略附加到有权代表您加密和解密代理资源的代理 APIs 的 IAM 角色或用户。此策略验证发出 API 调用的用户是否拥有 AWS KMS 权限。将 `${region}`、`${account-id}`、`${agent-id}` 和 `${key-id}` 替换为相应值。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EncryptAgents",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/${key-id}",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:bedrock:arn": "arn:aws:bedrock:us-east-1:123456789012:agent/${agent-id}"
                }
            }
        }
    ]
}
```

------

**基于资源的政策**

*仅*当您在创建操作组时将 Amazon S3 中的架构加密，才会将以下基于资源的策略附加到您的密 AWS KMS 钥。对于任何其他使用案例，您无需附加基于资源的策略。

要附加以下基于资源的策略，请根据需要更改权限范围，并使用相应的值替换 `${region}`、`${account-id}`、`${agent-id}` 和 `${key-id}`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow account root to modify the KMS key, not used by Amazon Bedrock.",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/${key-id}"
        },
        {
            "Sid": "Allow Amazon Bedrock to encrypt and decrypt Agent resources on behalf of authorized users",
            "Effect": "Allow",
            "Principal": {
                "Service": "bedrock.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/${key-id}",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws:bedrock:arn": "arn:aws:bedrock:us-east-1:123456789012:agent/${agent-id}"
                }
            }
        }
    ]
}
```

------

## 更改客户自主管理型密钥
<a name="change-cmk"></a>

当更改与*草稿*代理关联的客户托管密钥或从客户托管密钥切换到自有密钥时，Amazon Bedrock 代理不支持对 AWS 版本控制代理进行重新加密。只有*草稿*资源的数据才会使用新密钥重新加密。

对于有版本控制的代理，如果将其用于提供生产数据，请确保您没有删除或移除该代理的任何密钥的权限。

要查看和验证某个版本正在使用的密钥，请调用[GetAgentVersion](https://docs.aws.amazon.com//bedrock/latest/APIReference/API_agent_GetAgentVersion.html)并在响应`customerEncryptionKeyArn`中查看。

# 使用客户自主管理型密钥（CMK）加密代理会话
<a name="ltm-permissions"></a>

如果您已经为代理启用内存，并且使用客户自主管理型密钥加密代理会话，则必须配置以下密钥政策，并调用身份 IAM 权限来配置您的客户自主管理型密钥。

**客户自主管理型密钥策略**

Amazon Bedrock 使用这些权限生成加密的数据密钥，然后使用生成的密钥来加密代理内存。Amazon Bedrock 还需要权限，重新加密生成的具有不同加密上下文的数据密钥。当客户自主管理型密钥在另一个客户自主管理型密钥或服务拥有的密钥之间切换时，也会使用重新加密权限。有关更多信息，请参阅[分层密钥环](https://docs.aws.amazon.com//database-encryption-sdk/latest/devguide/use-hierarchical-keyring.html)。

使用相应的值替换 `$region`、`account-id` 和 `${caller-identity-role}`。

```
{
    "Version": "2012-10-17",		 	 	 
    {
        "Sid": "Allow access for bedrock to enable long term memory",
        "Effect": "Allow",
        "Principal": {
            "Service": [
                "bedrock.amazonaws.com",
            ],
        },
        "Action": [
            "kms:GenerateDataKeyWithoutPlainText",
            "kms:ReEncrypt*"
        ],
        "Condition": {
            "StringEquals": {
                "aws:SourceAccount": "$account-id"
            },
            "ArnLike": {
                "aws:SourceArn": "arn:aws:bedrock:$region:$account-id:agent-alias/*"
            }
        }
        "Resource": "*"
    },
    {
        "Sid": "Allow the caller identity control plane permissions for long term memory",
        "Effect": "Allow", 
        "Principal": {
            "AWS": "arn:aws:iam::${account-id}:role/${caller-identity-role}"
        },
        "Action": [
            "kms:GenerateDataKeyWithoutPlainText",
            "kms:ReEncrypt*"
        ],
        "Resource": "*",
        "Condition": {
            "StringLike": {
                "kms:EncryptionContext:aws-crypto-ec:aws:bedrock:arn": "arn:aws:bedrock:${region}:${account-id}:agent-alias/*"
            }
        }
    },
    {
        "Sid": "Allow the caller identity data plane permissions to decrypt long term memory",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::${account-id}:role/${caller-identity-role}"
        },
        "Action": [
            "kms:Decrypt"
        ],
        "Resource": "*",
        "Condition": {
            "StringLike": {
                "kms:EncryptionContext:aws-crypto-ec:aws:bedrock:arn": "arn:aws:bedrock:${region}:${account-id}:agent-alias/*",
                "kms:ViaService": "bedrock.$region.amazonaws.com" 
            }
        }
    }
}
```

**用于加密和解密代理内存的 IAM 权限**

以下是身份调用代理 API 为启用了内存的代理配置 KMS 密钥时所需的 IAM 权限。Amazon Bedrock 代理使用这些权限来确保来电者身份被授权拥有上述密钥策略中提及的 APIs 管理、训练和部署模型的权限。对于调用代理 APIs ，Amazon Bedrock 代理使用呼叫者身份的`kms:Decrypt`权限来解密内存。

使用相应的值替换 `$region`、`account-id` 和 `${key-id}`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AgentsControlPlaneLongTermMemory",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKeyWithoutPlaintext", 
                "kms:ReEncrypt*"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/KeyId",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws-crypto-ec:aws:bedrock:arn": "arn:aws:bedrock:us-east-1:123456789012:agent-alias/*"
                }
            }
        },
        {
            "Sid": "AgentsDataPlaneLongTermMemory",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/KeyId",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws-crypto-ec:aws:bedrock:arn": "arn:aws:bedrock:us-east-1:123456789012:agent-alias/*"
                }
            }
        }
    ]
}
```

------

# 面向代理的预防性安全最佳实践
<a name="security-best-practice-agents"></a>

以下针对 Amazon Bedrock 的最佳实践可以帮助预防安全事故：

**使用安全连接**

请务必使用加密连接，例如以 `https://` 开头的连接，以确保敏感信息在传输过程中的安全。

**对资源访问实施最低权限**

当您为 Amazon Bedrock 资源创建自定义策略时，只授予执行任务所需的权限。建议最开始只授予最低权限，然后根据需要授予其他权限，则样会更加安全。实施最低权限访问对于减小风险以及可能由错误或恶意攻击造成的影响至关重要。有关更多信息，请参阅 [适用于 Amazon Bedrock 的身份和访问管理](security-iam.md)。

**请勿在任何包含客户数据的代理资源中包含 PII**

创建、更新和删除代理资源时（例如，使用时 [CreateAgent](https://docs.aws.amazon.com//bedrock/latest/APIReference/API_agent_CreateAgent.html)），请勿在任何不支持使用客户管理密钥的字段中包含个人身份信息 (PII)，例如操作组名称和知识库名称。有关支持使用客户自主管理型密钥的字段列表，请参阅[使用客户自主管理型密钥（CMK）加密代理资源](cmk-agent-resources.md)

# 加密 2025 年 1 月 22 日之前创建的代理的代理资源
<a name="encryption-agents"></a>

**重要**  
如果您是在 2025 年 1 月 22 日*之后*创建的代理，请按照[代理资源的加密](encryption-agents-new.md)中的说明进行操作。

Amazon Bedrock 会加密代理的会话信息。默认情况下，Amazon Bedrock 使用AWS托管密钥对这些数据进行加密。或者，您可以使用客户托管式密钥来加密代理构件。

有关更多信息AWS KMS keys，请参阅《*AWS Key Management Service开发人员指南》*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

如果使用自定义 KMS 密钥加密与代理的会话，则必须设置以下基于身份的策略和基于资源的策略，以允许 Amazon Bedrock 代表您加密和解密代理资源。

1. 将以下基于身份的策略附加到具有 `InvokeAgent` 调用权限的 IAM 角色或用户。此策略会验证发出 `InvokeAgent` 调用的用户是否具有 KMS 权限。将 *\$1\$1region\$1*、*\$1\$1account-id\$1*、*\$1\$1agent-id\$1* 和 *\$1\$1key-id\$1* 替换为相应值。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "EncryptDecryptAgents",
               "Effect": "Allow",
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id",
               "Condition": {
                   "StringEquals": {
                       "kms:EncryptionContext:aws:bedrock:arn": "arn:aws:bedrock:us-east-1:123456789012:agent/agent-id"
                   }
               }
           }
       ]
   }
   ```

------

1. 将以下基于资源的策略附加到 KMS 密钥。根据需要更改权限的范围。将 *\$1\$1region\$1*、*\$1\$1account-id\$1*、*\$1\$1agent-id\$1* 和 *\$1\$1key-id\$1* 替换为相应值。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowRootModifyKMSKey",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::123456789012:root"
               },
               "Action": "kms:*",
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/KeyId"
           },
           {
               "Sid": "AllowBedrockEncryptAgent",
               "Effect": "Allow",
               "Principal": {
                   "Service": "bedrock.amazonaws.com"
               },
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/KeyId",
               "Condition": {
                   "StringEquals": {
                       "kms:EncryptionContext:aws:bedrock:arn": "arn:aws:bedrock:us-east-1:123456789012:agent/AgentId"
                   }
               }
           },
           {
               "Sid": "AllowRoleEncryptAgent",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::123456789012:role/Role"
               },
               "Action": [
                   "kms:GenerateDataKey*",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/KeyId"
           },
           {
               "Sid": "AllowAttachmentPersistentResources",
               "Effect": "Allow",
               "Principal": {
                   "Service": "bedrock.amazonaws.com"
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": "true"
                   }
               }
           }
       ]
   }
   ```

------

# Amazon Bedrock 流资源加密
<a name="encryption-flows"></a>

Amazon Bedrock 始终加密您的静态数据。默认情况下，Amazon Bedrock 使用 AWS 托管式密钥对这些数据进行加密。或者，您也可以使用客户自主管理型密钥对数据进行加密。

有关更多信息AWS KMS keys，请参阅《*AWS Key Management Service开发人员指南》*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

如果您使用自定义 KMS 密钥来加密数据，则必须设置以下基于身份的策略和基于资源的策略，以允许 Amazon Bedrock 代表您加密和解密数据。

1. 将以下基于身份的策略附加到具有 Amazon Bedrock 流 API 调用权限的 IAM 角色或用户。此策略会验证发出 Amazon Bedrock 流调用的用户是否具有 KMS 权限。将 *\$1\$1region\$1*、*\$1\$1account-id\$1*、*\$1\$1flow-id\$1* 和 *\$1\$1key-id\$1* 替换为相应值。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "EncryptFlow",
               "Effect": "Allow",
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/${key-id}",
               "Condition": {
                   "StringEquals": {
                       "kms:EncryptionContext:aws:bedrock-flows:arn": "arn:aws:bedrock:us-east-1:123456789012:flow/${flow-id}",
                       "kms:ViaService": "bedrock.us-east-1.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. 将以下基于资源的策略附加到 KMS 密钥。根据需要更改权限的范围。将*\$1IAM-USER/ROLE-ARN\$1*、、*\$1\$1region\$1**\$1\$1account-id\$1*、和*\$1\$1flow-id\$1*，*\$1\$1key-id\$1*替换为相应的值。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowRootModifyKMSId",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::123456789012:root"
               },
               "Action": "kms:*",
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/KeyId"
           },
           {
               "Sid": "AllowRoleUseKMSKey",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::123456789012:role/RoleName"
               },
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/${key-id}",
               "Condition": {
                   "StringEquals": {
                       "kms:EncryptionContext:aws:bedrock-flows:arn": "arn:aws:bedrock:us-east-1:123456789012:flow/FlowId",
                       "kms:ViaService": "bedrock.us-east-1.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. 对于[流执行](flows-create-async.md)，请将以下基于身份的策略附加到[具有创建和管理流权限的服务角色](flows-permissions.md)。此策略验证您的服务角色是否具有AWS KMS权限。将 *region*、*account-id*、*flow-id* 和 *key-id* 替换为相应值。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "EncryptionFlows",
               "Effect": "Allow",
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id",
               "Condition": {
                   "StringEquals": {
                       "kms:EncryptionContext:aws:bedrock-flows:arn": "arn:aws:bedrock:us-east-1:123456789012:flow/flow-id",
                       "kms:ViaService": "bedrock.us-east-1.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

# 知识库资源的加密
<a name="encryption-kb"></a>

Amazon Bedrock 会加密与知识库相关的资源。默认情况下，Amazon Bedrock 使用自有密钥对这些数据进行加 AWS密。或者，您可以使用客户托管式密钥对模型构件进行加密。

支持使用 KMS 密钥进行加密的过程如下：
+ 提取数据来源时的临时数据存储
+ 如果您让 Amazon Bedrock 设置矢量数据库，则会将信息传递给 OpenSearch 服务部门
+ 查询知识库

知识库使用的下列资源也可以使用 KMS 密钥进行加密。如果加密这些资源，则需要添加权限以解密 KMS 密钥。
+ 存储在 Amazon S3 存储桶中的数据来源
+ 第三方向量存储

有关更多信息 AWS KMS keys，请参阅《*AWS Key Management Service 开发人员指南》*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
Amazon Bedrock 知识库使用 TLS 加密与第三方数据来源连接器和向量存储（提供商允许并支持传输中的 TLS 加密）进行通信。

**Topics**
+ [加密数据提取期间的临时数据存储](#encryption-kb-ingestion)
+ [对传递给 Amazon OpenSearch 服务的信息进行加密](#encryption-kb-oss)
+ [传递到 Amazon S3 Vectors 的信息的加密](#encryption-kb-s3-vector)
+ [加密知识库检索](#encryption-kb-runtime)
+ [解密您在 Amazon S3 中的数据源的 AWS KMS 密钥的权限](#encryption-kb-ds)
+ [解密包含知识库的矢量存储的 AWS Secrets Manager 密钥的权限](#encryption-kb-3p)
+ [带加密功能的 Bedrock 数据自动化 (BDA) 权限 AWS KMS](#encryption-kb-bda)

## 加密数据提取期间的临时数据存储
<a name="encryption-kb-ingestion"></a>

在为知识库设置数据提取作业时，可以使用自定义 KMS 密钥加密作业。

要允许在摄取数据源的过程中为临时数据存储创建 AWS KMS 密钥，请将以下策略附加到您的 Amazon Bedrock 服务角色。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:123456789012:key/key-id"
            ]
        }
    ]
}
```

------

## 对传递给 Amazon OpenSearch 服务的信息进行加密
<a name="encryption-kb-oss"></a>

如果您选择让 Amazon Bedrock 在亚马逊 OpenSearch 服务中为您的知识库创建矢量存储，Amazon Bedrock 可以将您选择的 KMS 密钥传递给亚马逊 OpenSearch 服务进行加密。要了解有关亚马逊 OpenSearch 服务加密的更多信息，请参阅[亚马逊 OpenSearch 服务中的加密](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-encryption.html)。

## 传递到 Amazon S3 Vectors 的信息的加密
<a name="encryption-kb-s3-vector"></a>

如果您选择让 Amazon Bedrock 在 Amazon S3 Vectors 中为知识库创建 S3 向量存储桶和向量索引，Amazon Bedrock 可以将您选择的 KMS 密钥传递到 Amazon S3 Vectors 以进行加密。要了解有关 Amazon S3 Vectors 中的加密的更多信息，请参阅[使用 Amazon S3 Vectors 进行加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-bucket-encryption.html)。

## 加密知识库检索
<a name="encryption-kb-runtime"></a>

您可以使用 KMS 密钥加密在查询知识库时生成响应的会话。为此，请在发出请求时在`kmsKeyArn`字段中包含 KMS 密钥的 ARN。[RetrieveAndGenerate](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html)附上以下策略，将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID，以允许 Amazon Bedrock 加密会话上下文。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "bedrock.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id"
        }
    ]
}
```

------

## 解密您在 Amazon S3 中的数据源的 AWS KMS 密钥的权限
<a name="encryption-kb-ds"></a>

您将知识库的数据来源存储在 Amazon S3 存储桶中。要对这些静态文档进行加密，您可以使用 Amazon S3 SSE-S3 服务器端加密选项。通过此选项，将使用由 Amazon S3 服务管理的服务密钥为对象加密。

有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用采用 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

如果您使用自定义 AWS KMS 密钥加密了 Amazon S3 中的数据源，请将以下策略附加到您的 Amazon Bedrock 服务角色，以允许 Amazon Bedrock 解密您的密钥。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "KMS:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:123456789012:key/key-id"
            ],
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "s3.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

## 解密包含知识库的矢量存储的 AWS Secrets Manager 密钥的权限
<a name="encryption-kb-3p"></a>

如果包含知识库的矢量存储配置了 AWS Secrets Manager 密钥，则可以按照中的密钥加密[和解密中的步骤使用自定义密 AWS KMS 钥对密钥进行加密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html)。 AWS Secrets Manager

如果您这样做，请将以下策略附加到 Amazon Bedrock 服务角色，以允许它将密钥解密。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:123456789012:key/key-id"
            ]
        }
    ]
}
```

------

## 带加密功能的 Bedrock 数据自动化 (BDA) 权限 AWS KMS
<a name="encryption-kb-bda"></a>

使用 BDA 使用客户管理的 AWS KMS 密钥处理多模式内容时，除了标准权限之外，还需要其他权限。 AWS KMS 

将以下策略附加到您的 Amazon Bedrock 服务角色，以允许 BDA 处理加密的多媒体文件。将示例值替换为您自己的 AWS 区域、账户 ID 和 AWS KMS 密钥 ID。

```
{
    "Sid": "KmsPermissionStatementForBDA",
    "Effect": "Allow",
    "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:CreateGrant"
    ],
    "Resource": "arn:aws:kms:region:account-id:key/key-id",
    "Condition": {
        "StringEquals": {
            "aws:ResourceAccount": "account-id",
            "kms:ViaService": "bedrock.region.amazonaws.com"
        }
    }
}
```

BDA 特有的权限包括`kms:DescribeKey`和`kms:CreateGrant`操作，BDA 需要这些权限才能处理加密的音频、视频和图像文件。