View a markdown version of this page

カスタマーマネージドキーポリシーを設定する - Amazon Bedrock AgentCore

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタマーマネージドキーポリシーを設定する

AWS エージェントレジストリでカスタマーマネージドキーを使用するには、呼び出し元のプリンシパルの IAM ポリシーと、サービスが暗号化および復号オペレーションを実行できるようにする KMS キーポリシーの両方を設定する必要があります。

前提条件

カスタマーマネージドキーを使用してレジストリを作成する前に、以下を確認してください。

必要な IAM 許可

暗号化されたレジストリを操作するには、KMS キーに対する次のアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRegistryCMKAccess", "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:CreateGrant", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKey", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "kms:ViaService": "agent-registry.us-east-1.amazonaws.com" } } } ] }

以下の値を置き換えます:

  • Resource — KMS キーの ARN。

  • kms:ViaService — us-east-1 をレジストリの AWS リージョンに置き換えます。

このkms:ViaService条件は、 AWS エージェントレジストリサービスを介して行われたリクエストへのアクセス許可を制限し、これらのアクセス許可が AWS エージェントレジストリの外部で使用されないようにします。

注記

IAM ポリシーまたはキーポリシー (「」を参照) を使用して、これらの KMS アクションを実行する権限が必要ですカスタマーマネージドキーのキーポリシー。キーポリシーに IAM ポリシーを有効にするデフォルトのキーポリシーステートメントが含まれている場合は、IAM ポリシーで十分です。

カスタマーマネージドキーのキーポリシー

以下のセクションでは、 AWS エージェントレジストリに必要な KMS キーポリシーステートメントを一覧表示します。これらのステートメントを KMS キーポリシーに追加して、サービスと呼び出し元のプリンシパルがキーを使用できるようにします。ステートメントの追加は、キーポリシーに IAM ポリシーを有効にするデフォルトのキーポリシーステートメントが含まれていない場合、またはキーが別のアカウントにある場合に必要です。

重要

以下のセクションの JSON ブロックは、完全なキーポリシーではなく、個々のポリシーステートメントの例です。既存の KMS キーポリシーを置き換えるために使用しないでください。代わりに、組織内のペルソナとサービスにリンクされたロールに基づいて、必要なステートメントをコピーし、既存のキーポリシーのStatement配列に追加します。ポリシーを保存する前に、各ステートメントの値 (アカウント ID、リージョン、ロール ARN、レジストリ ARN) を環境に合わせて更新します。

キーポリシーは、組織内のレジストリペルソナに基づいてアクセス許可を付与する必要があります。

  • 管理者 — レジストリを作成し、暗号化設定を管理します。kms:DescribeKey、kms:CreateGrant、および暗号化/復号のアクセス許可が必要です。

  • パブリッシャーまたは承認者 — レジストリレコードを作成および更新します (レコード記述子の書き込みと読み取り)。暗号化および復号のアクセス許可が必要です。

  • コンシューマー — レジストリレコードと検索結果を読み取ります (レコード記述子を読み取ります)。復号アクセス許可が必要です。

ペルソナステートメントに加えて、 を追加して、 AWS エージェントレジストリサービスにリンクされたロールのポリシーステートメントが実行時にユーザーに代わって キーを使用できるようにします。Resource AWS Access Manager (AWS RAM) を使用して AWS 組織内の他のアカウントとレジストリを共有する場合は、 も追加しますRAM AWS を介した組織アクセスのポリシーステートメント。

注記

ロールがレコード記述子 (レコードも取得するパブリッシャーなど) の書き込みと読み取りの両方を行う場合は、「」に示すように、暗号化と復号の両方のアクセス許可を付与しますパブリッシャーのポリシーステートメント。

管理者のポリシーステートメント

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRegistryAdminKeyValidation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RegistryAdminRole" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "agent-registry.us-east-1.amazonaws.com" } } }, { "Sid": "AllowRegistryAdminGrantCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RegistryAdminRole" }, "Action": [ "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "agent-registry.us-east-1.amazonaws.com" }, "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Sid": "AllowRegistryAdminCryptoOps", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RegistryAdminRole" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKey", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "agent-registry.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:agent-registry:registry-arn": "arn:aws:agent-registry:us-east-1:111122223333:registry/my-registry-id" } } } ] }
  • AllowRegistryAdminKeyValidation — 管理者がレジストリで使用する前にキーを検証できるようにします。

  • AllowRegistryAdminGrantCreation — 管理者がレジストリを作成するときに許可を作成できるようにします。このkms:GrantIsForAWSResource条件によりkms:CreateGrant、 は、 AWS サービスが発信者に代わって許可の作成を開始した場合にのみ使用できます。

  • AllowRegistryAdminCryptoOps — 管理者が暗号化コンテキストを介して特定のレジストリにスコープされたレコード記述子を暗号化および復号化できるようにします。

パブリッシャーのポリシーステートメント

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRegistryPublisherCryptoOps", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RegistryPublisherRole" }, "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKey", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "agent-registry.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:agent-registry:registry-arn": "arn:aws:agent-registry:us-east-1:111122223333:registry/my-registry-id" } } } ] }
  • AllowRegistryPublisherCryptoOps — パブリッシャーと承認者がレコード記述子を暗号化および復号できるようにします。CreateRegistryRecord および に必要ですUpdateRegistryRecord。

コンシューマーのポリシーステートメント

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRegistryConsumerDecrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RegistryConsumerRole" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "agent-registry.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:agent-registry:registry-arn": "arn:aws:agent-registry:us-east-1:111122223333:registry/my-registry-id" } } } ] }
  • AllowRegistryConsumerDecrypt — コンシューマーがレコード記述子を復号できるようにします。GetRegistryRecord および に必要ですSearchDiscoverableRegistryRecords。

サービスにリンクされたロールのポリシーステートメント

AWS エージェントレジストリのサービスにリンクされたロールに、実行時に キーを使用するアクセス許可を付与します。このサービスは、このロールを使用して、ユーザーに代わってレコード記述子を暗号化および復号します。

このステートメントを追加するには、次の 2 つの順序付けられたステップが必要です。

  1. まず、 アカウントにサービスにリンクされたロールを作成します。 AWS エージェントレジストリはロールを作成しません。KMS キーポリシーステートメントを追加する前に、自分でロールを作成する必要があります。CLI AWS を使用します。

    aws iam create-service-linked-role --aws-service-name agent-registry.amazonaws.com

    これにより、 にAWSServiceRoleForAgentRegistryロールが作成されますarn:aws:iam::<account-id>:role/aws-service-role/agent-registry.amazonaws.com/AWSServiceRoleForAgentRegistry。この操作はアカウントごとに 1 回のみ必要です。

  2. 次に、KMS キーポリシーに次のステートメントを追加します。IAM は、まだ存在しないプリンシパルを参照するキーポリシーを拒否するため、ロールに名前を付けるステートメントを貼り付ける前にロールが存在する必要があります。

暗号化コンテキストワイルドカードを使用して、ステートメントをアカウントのレジストリにスコープします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRegistrySlrCryptoOps", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/aws-service-role/agent-registry.amazonaws.com/AWSServiceRoleForAgentRegistry" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:Encrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:agent-registry:registry-arn": "arn:aws:agent-registry:us-east-1:111122223333:registry/*" } } } ] }
  • AllowRegistrySlrCryptoOps — AWS エージェントレジストリのサービスにリンクされたロール (AWSServiceRoleForAgentRegistry) がユーザーに代わってレコード記述子を暗号化および復号できるようにします。これは、 kms:EncryptionContext:aws:agent-registry:registry-arn条件を介してアカウントのレジストリを対象としています。

RAM AWS を介した組織アクセスのポリシーステートメント

Resource AWS Access Manager (AWS RAM) を使用して、customer-managed-key-encryptedレジストリを AWS 組織内の他のアカウントと共有する場合は、このステートメントを追加します。これにより、組織内のすべてのプリンシパルが、共有されているレジストリからレコード記述子を復号化できるようになります。 AWS RAM 経由でレジストリを共有しない場合、このステートメントは必要ありません。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOrganizationDecrypt", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-EXAMPLE1234" } } } ] }
  • AllowOrganizationDecrypt — AWS Organization のすべてのプリンシパルが、RAM を介して共有するレジストリからレコード記述子 AWS を復号できるようにします。aws:PrincipalOrgID 条件は、このアクセス許可を名前付き組織のメンバーアカウントに厳密にスコープします。一致する組織 ID がないと、 は何も"Principal": "*"付与しません。発信者には、共有レジストリ自体に対する対応するサービスレベルの IAM アクセス許可が必要です。

キーポリシーステートメントの値を置き換える

各キーポリシーステートメントで次の値を置き換えます。

  • Principal — 各ペルソナの IAM ユーザーまたはロールの ARN。111122223333 をアカウント ID に置き換え、ロール名を実際の IAM ロールに置き換えます。サービスにリンクされたロールステートメントの場合、111122223333 をアカウント ID に置き換えます。ロールのパスと名前 (aws-service-role/agent-registry.amazonaws.com/AWSServiceRoleForAgentRegistry) は、次のように維持します。これは固定されたサービスマネージド値です。

  • kms:ViaService — us-east-1 をレジストリの AWS リージョンに置き換えます。

  • kms:EncryptionContext:aws:agent-registry:registry-arn — をレジストリの ARN に置き換えます。アカウント内のすべてのレジストリへのアクセスを許可するには、ワイルドカード StringLike で を使用しますarn:aws:agent-registry:us-east-1:111122223333:registry/*。

  • aws:PrincipalOrgID — RAM 共有ステートメントで、 AWS を AWS Organization ID o-EXAMPLE1234 に置き換えます。 AWS Organizations コンソールで検索するか、 を実行しますaws organizations describe-organization --query 'Organization.Id' --output text。