View a markdown version of this page

使用客戶管理的 KMS 金鑰加密 AgentCore 閘道 - Amazon Bedrock AgentCore

使用客戶管理的 KMS 金鑰加密 AgentCore 閘道

根據預設,Gateway 會使用服務管理的 AWS Key Management Service 金鑰來加密靜態資料。不過,您可以選擇性地提供自己的客戶受管 KMS 金鑰,以便在下列情況下加密靜態資料:

  • 建立閘道。

  • 更新閘道的組態。

使用客戶受管金鑰可讓您更好地控制加密程序,包括能夠:

  • 依照您自己的排程輪換金鑰

  • 透過 IAM 政策控制對金鑰的存取

  • 在不再需要金鑰時停用或刪除金鑰

  • 透過 CloudWatch 日誌和 AWS CloudTrail 稽核金鑰用量

如需詳細資訊,請參閱 AWS Key Management Service 開發人員指南

注意

如果您選擇使用客戶受管金鑰,您必須負責管理金鑰及其許可。如果停用或刪除金鑰,或者如果 Gateway 失去使用該金鑰的許可,您將失去對加密資料的存取權。

加密 AgentCore 閘道的先決條件

在加密閘道之前,請確定您已滿足下列先決條件:

  • 您可以存取 KMS 金鑰。如需建立 KMS 金鑰的資訊,請參閱建立 KMS 金鑰

  • KMS 金鑰已連接金鑰政策,允許下列許可:

    • 允許閘道服務角色執行下列動作的許可:

      • kms:創建權限

      • kms:描述金鑰

      • kms:解密

      • kms:產生資料金鑰

    • (如果您為閘道啟用 CloudWatch Logs) 允許 CloudWatch Logs 服務解密金鑰的許可。

      如需控制 KMS 金鑰的 IAM 許可的詳細資訊,請參閱 Key Management Service 開發人員指南中的 KMS 金鑰存取和許可。 AWS

範例金鑰政策

下列範例政策提供加密閘道和使用加密閘道的必要許可。第四個陳述式也允許 CloudWatch Logs 記錄加密閘道的金鑰用量。政策包含符合安全最佳實務的條件金鑰。

{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowServiceRoleDescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "bedrock-agentcore.us-east-1.amazonaws.com" ] } } }, { "Sid": "AllowServiceRoleDecryptKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "bedrock-agentcore.us-east-1.amazonaws.com" ] }, "StringLike": { "kms:EncryptionContext:aws:bedrock-agentcore-gateway:arn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/GatewayId" } } }, { "Sid": "AllowServiceRoleCreateGrant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "bedrock-agentcore.us-east-1.amazonaws.com" ], "kms:GrantConstraintType": "EncryptionContextSubset" }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Decrypt", "GenerateDataKey" ] }, "StringLike": { "kms:EncryptionContext:aws:bedrock-agentcore-gateway:arn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/GatewayId" } } }, { "Sid": "AllowKMSDecryptionLogging", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:SourceArn": "arn:aws:logs:us-east-1:123456789012:*" } } } ] }

此政策包含下列陳述式:

  • AllowServiceRoleDescribeKKey – 如果透過 AgentCore 服務提出請求,則允許指定的委託人描述金鑰。取代下列欄位中的值:

    • Principal – 將AWS值取代為閘道服務角色的實際 ARN。

    • Condition – 在kms:ViaService陣列中,將 us-east-1 取代為您想要允許描述金鑰的實際 AWS 區域。

  • AllowServiceRoleDecryptKey – 如果透過 AgentCore 服務提出請求,且提出請求的閘道 ARN 符合 kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn 欄位中的閘道,則允許指定的委託人解密金鑰。取代以下的值:

    • Principal – 將AWS值取代為閘道服務角色的實際 ARN。

    • Condition – 執行下列動作:

      • kms:ViaService陣列中,將 us-east-1 取代為您要允許解密金鑰的實際 AWS 區域。

      • kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn值取代為閘道的實際 ARN。

  • AllowServiceRoleCreateGrant – 如果透過 AgentCore 服務提出請求,且提出請求的閘道 ARN 符合 kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn 欄位中的閘道,則允許指定的委託人為金鑰建立授予。取代以下的值:

    • Principal – 將AWS值取代為閘道服務角色的實際 ARN。

    • Condition – 執行下列動作:

      • kms:ViaService陣列中,將 us-east-1 取代為您要允許解密金鑰的實際 AWS 區域。

      • kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn值取代為閘道的實際 ARN (如果您想要允許)。

  • AllowKMSDecryptionLogging – 允許指定的委託人解密客戶管理的 KMS 金鑰,以透過 CloudWatch Logs 稽核金鑰用量。在 kms:EncryptionContext:SourceArn值中,將 us-east-1123456789012 值取代為您的實際 AWS 區域和帳戶 ID。

範例
Console
  1. ====== 使用客戶受管 KMS 金鑰加密閘道

  2. 遵循建立 Amazon Bedrock AgentCore 閘道中的主控台步驟,並展開 KMS 金鑰 - 選用區段。

  3. 選擇自訂加密設定 (進階)

  4. 選取 KMS 金鑰並確認其詳細資訊。

    注意

    如果您沒有看到 KMS 金鑰,請檢閱加密 AgentCore 閘道的先決條件,並檢查許可是否已正確設定。

  5. 繼續完成剩餘的主控台步驟。

CLI
  1. 若要使用 AWS CLI 加密閘道,請在透過 AgentCore 控制平面用戶端傳送下列任一請求kms-key-arn時包含 :

    • create-gateway

    • update-gateway

      下列範例顯示使用 kms-key-arn引數指定 AWS KMS 金鑰建立閘道的 CLI 請求範例:

      aws bedrock-agentcore-control create-gateway \ --name "MyGateway" \ --role-arn "arn:aws:iam::123456789012:role/GatewayRole" \ --protocol-type "MCP" \ --kms-key-arn "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" \ --authorizer-type "CUSTOM_JWT" \ --authorizer-configuration '{ "customJWTAuthorizer": { "allowedAudience": ["myAudience"], "discoveryUrl": "https://example.com/.well-known/openid-configuration" } }'
Python (Boto3)
  1. 若要使用 AWS Python SDK (Boto3) 加密閘道,請在透過 AgentCore 控制平面用戶端傳送下列任一請求kms-key-arn時包含 :

    • create_gateway

    • update_gateway

      下列範例顯示使用 kmsKeyArn引數指定 AWS KMS 金鑰建立閘道的範例 Boto3 請求:

      import boto3 # Create client agentcore_client = boto3.client('bedrock-agentcore-control') # Create gateway and specify gateway = agentcore_client.create_gateway( name="MyGateway", roleArn="arn:aws:iam::123456789012:role/GatewayRole", protocolType="MCP", kmsKeyArn="arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" authorizerType="CUSTOM_JWT", authorizerConfiguration= { "customJWTAuthorizer": { "allowedAudience": ["myAudience"], "discoveryUrl": "https://example.com/.well-known/openid-configuration" } } )