

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

# 代理资源的加密
<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"
                   }
               }
           }
       ]
   }
   ```

------