View a markdown version of this page

使用客户管理的 KMS 密钥加密您的 AgentCore 策略引擎 - 亚马逊基岩 AgentCore

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

使用客户管理的 KMS 密钥加密您的 AgentCore 策略引擎

中的策略默认 AgentCore 提供加密,以使用 AWS 自有加密密钥保护静态的敏感客户数据。作为额外的保护层,Policy in AgentCore 允许您使用 AWS 密钥管理服务 (AWS KMS) 客户管理密钥 (CMK) 对策略引擎进行加密。此功能通过静态加密确保保护敏感数据,这可以帮助您:

  • 减少服务端的运营负担,以保护敏感数据

  • 控制谁可以通过您自己的 AWS KMS 客户管理密钥查看您的授权策略的详细信息

  • 构建符合严格的加密合规性和法规要求的安全敏感型应用程序

以下各节说明如何为新策略引擎配置加密和管理加密密钥。

注意

静 AgentCore 态加密策略适用于所有提供策略 AgentCore 的 AWS 区域。

AWS 中策略的 KMS 密钥类型 AgentCore

中的策略与 AWS KMS AgentCore 集成,用于管理用于加密和解密客户数据的加密密钥。要了解有关密钥类型和状态的更多信息,请参阅 AWS KMS 开发人员指南中的密AWS 钥管理服务概念。创建新的策略引擎时,可以选择以下 AWS KMS 密钥类型来加密数据:

AWS 自有密钥

默认加密类型。中的策略 AgentCore 拥有该密钥,无需向您收取额外费用,并在创建时对静态资源数据进行加密。无需在代码或应用程序中进行额外配置,即可使用中 AgentCore策略拥有的密钥加密或解密数据。您无需查看、管理、使用或审核这些密钥。有关更多信息,请参阅 AWS KMS 开发人员指南中的AWS 自有密钥。

客户自主管理型密钥

您在 AWS 账户中创建、拥有和管理密钥。您可以完全控制 KMS 密钥。 AWS KMS 费用适用于客户管理的密钥。有关更多信息,请参阅 AWS KMS 定价页面。有关密钥类型的更多信息,请参阅 AWS KMS 开发人员指南中的客户管理密钥。

当您为策略引擎的加密指定客户管理的密钥时,中的策略会使用该密钥 AgentCore 加密策略引擎及其所有子资源(策略、策略生成)。要使用客户管理的密钥加密策略引擎,您需要在密钥策略 AgentCore 中授予对策略的访问权限。密钥策略是一种基于资源的策略,您可以将其附加到客户管理的密钥上,以控制对密钥的访问权限。有关更多详细信息,请参阅中的授权使用您的 AWS KMS 密钥 AgentCore进行策略。

此外,要使用客户管理的密钥创建加密策略引擎,或向由客户管理的密钥加密的策略引擎进行 API 调用,进行调用的 IAM 用户或角色也必须有权访问该密钥。如果中的策略无法访问密钥, AgentCore 则任何涉及由该密钥加密的资源的授权决策都将被拒绝。当您无权访问密钥时,您将无法读取、更新或删除由该密钥加密的资源,任何使用该密钥进行加密的创建调用都将失败。

重要

一旦使用客户管理的密钥对策略引擎进行加密,就无法更新资源以使用其他密钥进行加密,也无法从该策略引擎中删除该密钥。

使用 AWS 带有策略的 KMS 和数据密钥 AgentCore

静 AgentCore 态加密策略功能使用 KMS 密钥和数据密钥层次结构来保护您的资源数据。

注意

中的策略仅 AgentCore 支持对称的 AWS KMS 密钥。您不能使用非对称 KMS 密钥对 AgentCore 资源中的策略进行加密。

中的策略 AgentCore 使用基于授予的模型来访问您的客户管理密钥。当您使用客户管理的密钥创建策略引擎时,中的策略将 AgentCore 执行以下步骤:

  1. 中的策略 AgentCore 会验证密钥以确保它是使用密钥的对称加密ENCRYPT_DECRYPT密钥并且处于状态。Enabled

  2. 中的策略代表您 AgentCore 创建了两个 AWS KMS 授权。要创建这些授权,请通过前向访问会 AgentCore 话 (FAS) kms:CreateGrant 使用您的身份在通话中设置政策。由于CreateGrant调用是通过 FAS 使用您的凭证进行的,因此您的 AWS KMS 密钥策略必须向您的 AWS 账户主体(而不是服务委托人)授予kms:CreateGrant权限。然后,这些补助金本身允许Pol AgentCore icy代表您执行加密操作,而无需进一步的呼叫者参与。

  3. 所有策略数据(策略、策略生成和策略引擎下的相关资源)均使用您的客户管理密钥进行加密。

这两项补助金的用途不同:

政策管理补助金

用于管理策略数据。该授权允许加密、解密和生成数据密钥操作,以创建、读取、更新和删除策略及相关资源。

政策评估补助金

用于运行时策略评估。该授权允许解密和重新加密操作,以便策略引擎可以根据传入的授权请求评估 Cedar 策略。

这两种授权都受使用密钥的加密上下文的限制aws:bedrock-agentcore-policy:policy-engine-arn,密钥将授权绑定到特定的策略引擎资源。

当您删除带有客户管理密钥的策略引擎时,Policy in AgentCore 会自动停用这两项授权。

重要

如果您需要手动撤消授权,请务必同时撤销策略管理补助金和策略评估补助金。仅撤销一项授权并不能完全取消该服务对您的密钥的访问权限,并可能导致不一致的行为。您可以使用 AWS KMS 控制台或 list-grants AWS CLI 命令查看和管理密钥的授权。

授权使用您的 AWS 中策略的 KMS 密钥 AgentCore

要在策略中使用客户管理的密钥 AgentCore,您的 AWS KMS 密钥策略必须向您的 AWS 账户授予权限。创建策略引擎时,Policy 会通过前向访问会 AgentCore 话 (FAS) kms:CreateGrant 使用您的身份进行调用。因此,密钥政策必须向您的账户委托人(而不是服务委托人)授予kms:CreateGrant及其他必需的权限,并使用kms:ViaService条件来确保密钥仅通过中的政策使用 AgentCore。

中的策略至少 AgentCore 要求对客户管理的密钥具有以下权限:

  • kms:CreateGrant— 为加密、解密、生成数据密钥、重新加密和描述密钥操作创建授权

  • kms:Decrypt— 解密使用密钥加密的数据

  • kms:GenerateDataKey— 生成用于加密策略数据的数据密钥

  • kms:DescribeKey— 检索密钥元数据以验证密钥配置

了解源上下文

源上下文提供有关源调用者尝试对给定密钥执行 AWS KMS 操作的信息。通过将上下文绑定到数据源,这样可以防止混淆或滥用加密数据。

当中的策略代表您通过授权 AgentCore 执行 AWS KMS 操作时,源上下文会标识启动请求的 AgentCore 资源中的策略。您可以在密钥策略中使用源上下文作为基于授权的操作的附加条件,将密钥的使用限制为来自特定账户或资源的请求。

注意

源上下文条件(aws:SourceAccount和aws:SourceArn)适用于基于授予的 AWS KMS 操作,但在使用前向访问会kms:CreateGrant话的呼叫中不可用。

例如,您可以在密钥策略中的 KMS 操作和验证语句中添加aws:SourceAccount和aws:SourceArn条件,以确保只有当请求来自您的账户和策略引擎资源时,这些操作才能成功:

{ "Sid": "Allow Policy for KMS operations with source context", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "bedrock-agentcore.us-east-1.amazonaws.com", "aws:SourceAccount": "111122223333" }, "StringLike": { "aws:SourceArn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:policy-engine/*", "kms:EncryptionContext:aws:bedrock-agentcore-policy:policy-engine-arn": "arn:aws*:bedrock-agentcore:*:*:policy-engine/*" } } }

如果源账户与此 AWS KMS 密钥所在的账户相同,则此密钥策略允许中的策略通过授予代表您发出 KMS 调用。 AgentCore 在检查 KMS 密钥的 CloudTrail 审计日志时,这些值应该是可验证的。有关全局 AWS 条件密钥的更多信息,请参阅 AWS KMS 开发人员指南中的使用 aws: SourceArn 或 aws: SourceAccount 条件密钥。

了解 kms:ViaService

kms:ViaService条件密钥将 KMS 密钥的使用限制为来自指定 AWS 服务的请求。此条件密钥适用于前向访问会话 (FAS) 。有关更多信息kms:ViaService,请参阅 KM AWS S 开发人员指南ViaService中的 kms:。

在密钥策略中,kms:ViaService值遵循格式bedrock-agentcore.REGION.amazonaws.com,其中REGION是创建策略引擎的 AWS 区域(例如,bedrock-agentcore.us-east-1.amazonaws.com)。

了解加密上下文

加密上下文是一组键值对,其中包含用于加密完整性检查的其他经过身份验证的数据。当您在加密数据的请求中包含加密上下文时, AWS KMS 会以加密方式将加密上下文绑定到加密的数据。要解密数据,必须传递相同的加密上下文。有关更多信息,请参阅 AWS KMS 开发人员指南中的加密上下文。

中的策略在所有 AWS KMS 加密操作中 AgentCore 使用以下加密上下文,当策略中的 AgentCore 策略代表您调用 AWS KMS 进行加密和解密过程时,可以在 CloudTrail 日志中进行验证:

{ "aws:bedrock-agentcore-policy:policy-engine-arn": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:policy-engine/POLICY_ENGINE_ID" }

您可以在密钥策略条件中使用此加密上下文来限制哪些策略引擎可以使用密钥。例如,下一节中的密钥策略使用kms:EncryptionContext条件来允许密钥仅用于策略引擎资源。

完成 AWS KMS 密钥策略

根据前面部分中的概念,以下示例密钥策略提供了加密策略引擎和使用加密策略引擎所需的权限。该策略包含符合安全最佳实践的条件密钥。

重要

在密钥政策中替换以下值:* 111122223333 — 替换为您的 AWS 账户 ID * us-east-1 — 替换为您的 AWS 地区

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Policy to create grants", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "bedrock-agentcore.us-east-1.amazonaws.com", "kms:GrantConstraintType": "EncryptionContextSubset" }, "StringLike": { "kms:EncryptionContext:aws:bedrock-agentcore-policy:policy-engine-arn": "arn:aws*:bedrock-agentcore:*:*:policy-engine/*" }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Encrypt", "Decrypt", "GenerateDataKey", "GenerateDataKeyWithoutPlaintext", "ReEncryptFrom", "ReEncryptTo" ] } } }, { "Sid": "Allow Policy for KMS operations", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "bedrock-agentcore.us-east-1.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:bedrock-agentcore-policy:policy-engine-arn": "arn:aws*:bedrock-agentcore:*:*:policy-engine/*" } } }, { "Sid": "Allow Policy for KMS validation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "bedrock-agentcore.us-east-1.amazonaws.com" } } } ] }

该政策包含以下声明:

允许策略创建补助金

允许调用者在创建策略引擎时创建 AWS KMS 授权。该kms:GrantConstraintType条件可确保授予受加密上下文的限制。启用ForAllValues:StringEquals条件将授权仅kms:GrantOperations限于政策中 AgentCore 要求的加密操作。

允许 KMS 操作的策略

允许调用者通过中的 AgentCore策略执行解密和生成数据密钥操作。加密上下文条件确保这些操作仅限于策略引擎资源。

允许使用 KMS 验证策略

允许调用者通过中的策略描述密钥 AgentCore。在策略引擎创建期间使用此权限来验证密钥是否符合要求(对称、已启用、正确使用密钥)。

重要

修改中策略已在使用的密 AWS 钥的 KMS 密钥策略时要谨慎行事 AgentCore。如果您无意中从密钥策略中删除了必要的权限,则中的策略 AgentCore 将无法解密策略数据,并且所有授权决策都将被拒绝。任何需要访问加密数据的操作(例如创建、读取、更新或删除策略)也将失败。

加密策略引擎的先决条件

在加密策略引擎之前,请确保您已满足以下先决条件:

  • 您可以访问 KMS 密钥。有关创建 KMS 密钥的信息,请参阅 KMS 开发人员指南中的创建 AWS KMS 密钥。

  • KMS 密钥必须是使用密钥的对称加密ENCRYPT_DECRYPT密钥。

  • KMS 密钥必须处于启用状态。

  • KMS 密钥附加了授予所需权限的密钥策略。有关所需的密 AWS 钥策略,请参阅完整的 KMS 密钥策略。

有关控制 KMS 密钥的 IAM 权限的更多信息,请参阅 KMS 开发人员指南中的 AWS KMS 密钥访问和权限。

创建加密策略引擎

在创建加密策略引擎之前,请确保您使用的客户管理密钥为中的策略设置了正确的密钥策略声明, AgentCore 以使用该密钥进行加密和解密。有关所需权限,请参阅策略中的 AgentCore授权使用您的 AWS KMS 密钥。

要使用 AWS CLI 加密您的策略引擎,请在发送create-policy-engine请求时添加--encryption-key-arn参数:

aws bedrock-agentcore-control create-policy-engine \ --name "MyPolicyEngine" \ --description "Policy engine with customer-managed encryption" \ --encryption-key-arn "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"

响应包括策略引擎 ARN 和状态:

{ "policyEngineId": "MyPolicyEngine-abc123", "name": "MyPolicyEngine", "description": "Policy engine with customer-managed encryption", "policyEngineArn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:policy-engine/MyPolicyEngine-abc123", "status": "CREATING", "statusReasons": [], "encryptionKeyArn": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab", "createdAt": "2026-02-24T12:00:00Z", "updatedAt": "2026-02-24T12:00:00Z" }
注意

如果您的策略引擎使用的 KMS 密钥因错误的 KMS 密 AWS 钥策略而被删除、禁用或无法访问,则资源解密将失败。这可能导致授权决定被拒绝。访问丢失可能是暂时的(可以更正密钥策略)或永久的(已删除的密钥无法恢复),具体取决于情况。我们建议您限制对关键操作的访问权限,例如删除或禁用 KMS 密钥。此外,我们建议您的组织设置 AWS break-glass 访问程序,以确保您的特权用户 AWS 在极少数情况下无法访问中的 AgentCore 政策。

限制

以下限制适用于策略引擎的客户管理密钥加密:

  • 策略引擎一旦启用,就无法禁用加密。

  • 创建未加密的策略引擎后,无法将策略引擎更新为由客户管理的密钥加密。

  • 使用客户管理的密钥创建策略引擎后,您无法更改密钥或将其从该策略引擎中删除。必须创建新的策略引擎才能使用不同的密钥。

  • 客户管理的密钥加密是在策略引擎级别配置的。策略引擎下的所有资源,包括策略和策略生成,均使用与策略引擎相同的客户管理密钥进行加密。您不能为策略引擎中的单个资源指定不同的密钥。

  • 撤销 Policy in 对现有加密策略引擎 AgentCore的客户管理密钥的访问权限后,所有授权决策都将被拒绝,因为该策略引擎无法再解密策略数据。

问题排查

本节介绍您在中使用策略时可能遇到的常见客户管理密钥相关错误, AgentCore 并提供解决这些错误的故障排除步骤。

访问被拒绝: AWS KMS 权限问题

错误:“指定 KMS 密钥的访问被拒绝。验证密钥策略是否授予了所需的权限。”

这可能意味着调用者在其 IAM 策略或 KMS 密 AWS 钥策略中缺少所需的 kms: * 操作权限,或者所引用的密钥不存在或不再存在。

要解决此问题,请执行以下操作:

  1. 验证 KMS 密钥 ARN 正确且密钥存在于指定区域。

  2. 验证 AWS KMS 密钥策略是否包含所需的语句。请参阅完整的 AWS KMS 密钥政策。

  3. 验证调用者的 IAM 策略是否包含所需的 AWS KMS 权限(kms:CreateGrantkms:Decrypt、kms:GenerateDataKey、、kms:DescribeKey)。

  4. 检查kms.amazonaws.com事件 CloudTrail 以确定哪个操作被拒绝以及哪个委托人尝试了该操作。

验证异常: AWS KMS 密钥配置

错误:“指定的 KMS 密钥未处于可用状态。确认密钥已启用且未待删除。”

这意味着,由于当前的配置,所引用的密钥不能用于客户管理的密钥加密。可能的原因包括:

  • 密钥已禁用或待删除。

  • 该密钥不是对称加密密钥。

  • 该密钥没有ENCRYPT_DECRYPT密钥用法。

要解决此问题:验证密钥是否满足加密策略引擎的先决条件中描述的先决条件。