AWS Key Management Service
開発者ガイド

他のアカウントのユーザーに CMK の使用を許可する

1 つの AWS アカウントの IAM ユーザーまたはロールが、別の AWS アカウントのカスタマーマスターキー (CMK) を使用することを許可できます。CMK を作成するとき、または既存の CMK のアクセス許可を変更するときに、これらのアクセス許可を追加できます。

別のアカウントのユーザーとロールに CMK を使用するアクセス許可を付与するには、2 つの異なるタイプのポリシーを使用する必要があります。

  • CMK のキーポリシーは 、CMK を使用するアクセス許可を外部アカウント(または外部アカウントのユーザーとロール)に付与する必要があります。キーポリシーは、CMK を所有するアカウントにあります。

  • 外部アカウントの IAM ユーザーとロールに IAM ポリシーをアタッチする必要があります 。IAM これらのポリシーは、キーポリシーで指定されたアクセス許可を委任します。

このシナリオでは、キーポリシーによって CMK にアクセスできるユーザーを決定します 。IAM ポリシーは、CMK にアクセスできるユーザーを決定します。キーポリシーも IAM ポリシーも単独でも十分ではありません。両方を変更する必要があります。

キーポリシーを編集するには、でポリシービューを使用するかCreateKey AWS マネジメントコンソール または PutKeyPolicy オペレーションを使用できます。CMK の作成時にキーポリシーを設定する方法については、「他のアカウントで使用できる CMK の作成」を参照してください 。

IAM ポリシーの編集については、「AWS KMS での IAM ポリシーの使用」を参照してください 。

別のアカウントで CMK IAM の使用を許可するためにキーポリシーとポリシーがどのように連携するかを示す例については、「例 2: ユーザーが別の AWS アカウントの CMK を使用するためのアクセス許可のあるロールを引き受ける」を参照してください 。

ステップ 1: ローカルアカウントにキーポリシーステートメントを追加する

CMK のキーポリシーは、CMK にアクセスできるユーザーと、実行できるオペレーションの主要な決定要因です。キーポリシーは、常に、CMK を所有する アカウントにあります。IAM ポリシーとは異なり、キーポリシーはリソースを指定しません。リソースは、キーポリシーに関連付けられている CMK です。

CMK を使用するアクセス権限を外部アカウントに付与するには、外部アカウントを指定するステートメントをキーポリシーに追加します。キーポリシーの Principal 要素に、外部アカウントの Amazon リソースネーム (ARN) を入力します。

キーポリシーで外部アカウントを指定すると、 IAM 外部アカウントの管理者は IAM ポリシーを使用して、それらのアクセス許可を外部アカウントのユーザーおよびロールに委任できます。また、ユーザーおよびロールが実行できるキーポリシーで指定されたアクションを決定することもできます。

たとえば、アカウント 444455556666 にアカウント 111122223333 の CMK の使用を許可するとします。これを行うには、次の例のようなポリシーステートメントを、アカウント 111122223333 の CMK のキーポリシーに追加します。このポリシーステートメントは、暗号化オペレーションで CMK を使用するアクセス許可を外部アカウント 444455556666 に付与します。

{ "Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

外部アカウントにアクセス許可を付与する代わりに、キーポリシーで特定の外部ユーザーとロールを指定できます。ただし、IAM 外部アカウントの管理者が ID IAM に適切なポリシーをアタッチするまで、これらのユーザーとロールは CMK を使用できません。ポリシーは、IAM キーポリシーで指定されている外部ユーザーおよびロールのすべてまたはサブセットにアクセス許可を付与できます。また、キーポリシーで指定されたアクションのすべてまたはサブセットを許可できます。

キーポリシーで ID を指定すると、IAM 外部アカウントの管理者が提供できるアクセス許可が制限されます。ただし、2 つのアカウントを使用したポリシー管理はより複雑になります。たとえば、ユーザーまたはロールを追加する必要があるとします。CMK を所有するアカウントのキーポリシーにそのアイデンティティを追加し、IAM アイデンティティのアカウントでポリシーを作成する必要があります。

キーポリシーで特定の外部ユーザーまたはロールを指定するには、Principal 要素に、外部アカウントのユーザーまたはロールの Amazon リソースネーム (ARN) を入力します。

たとえば、次のキーポリシーステートメントの例では、アカウント 444455556666 の ExampleRole および ExampleUser にアカウント 111122223333 の CMK の使用を許可します。このキーポリシーステートメントは、暗号化オペレーションで CMK を使用するアクセス許可を外部アカウント 444455556666 に付与します。

{ "Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/ExampleRole" "arn:aws:iam::444455556666:user/ExampleUser" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

注記

アクセス権限を許可するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクに設定すると、別のポリシーステートメントで明示的に拒否しない限り、すべての AWS アカウントの各 ID に、CMK を使用するアクセス権限が付与されます。他の AWS アカウントのユーザーは、各自のアカウントで CMK を使用する、該当の IAM アクセス権限を必要としているのみです。

また、外部アカウントに付与するアクセス許可を決定する必要があります。CMK に対するアクセス権限のリストについては、「AWS KMS API のアクセス権限: アクションとリソースのリファレンス」を参照してください 。

暗号化オペレーションで CMK を使用するアクセス権限を外部アカウントに付与し、AWS KMS と統合された AWS サービスで CMK を使用できます 。これを行うには、の Key Users セクションを使用します AWS マネジメントコンソール。詳細については、「他のアカウントで使用できる CMK の作成」を参照してください。

キーポリシーで他のアクセス許可を指定するには、キーポリシードキュメントを編集します。たとえば、復号するが暗号化しないアクセス許可をユーザーに付与したり、CMK を表示しても使用しないアクセス許可を付与したりできます。キーポリシードキュメントを編集するには、 でポリシービューを使用するかCreateKey AWS マネジメントコンソール または PutKeyPolicy オペレーションを使用できます。

ステップ 2: IAM 外部アカウントにポリシーを追加する

CMK を所有するアカウントのキーポリシーは、アクセス許可の有効範囲を設定します。ただし、外部アカウントのユーザーとロールは、 IAM これらのアクセス権限を委任するポリシーをアタッチするか、許可を使用して CMK へのアクセスを管理するまで、CMK を使用することはできません。IAM ポリシーは外部アカウントで設定されます。

キーポリシーが外部アカウントにアクセス許可を付与する場合、IAM アカウントの任意のユーザーまたはロールにポリシーをアタッチできます。ただし、キーポリシーが指定されたユーザーまたはロールにアクセス許可を付与する場合、 IAM ポリシーは、指定されたユーザーおよびロールのすべてまたはサブセットにのみそれらのアクセス許可を付与できます。IAM ポリシーが CMK アクセスを他の外部ユーザーまたはロールに付与する場合、効果はありません。

キーポリシーは、IAM ポリシー内のアクションも制限します。 ポリシーは、 IAM キーポリシーで指定されたアクションのすべてまたはサブセットを委任できます。IAM キーポリシーで指定されていないアクションがポリシーにリストされている場合、それらのアクセス許可は無効です。

IAM 次のポリシー例では、プリンシパルが、111122223333 暗号化オペレーションのためにアカウントで CMK を使用することを許可します。アカウント 444455556666 のユーザーとロールにこのアクセス権限を付与するには、アカウント 444455556666 のユーザーまたはロールにポリシーをアタッチします

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Use Of CMK In Account 111122223333", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

このポリシーに関する以下の詳細情報に注意してください。

  • キーポリシーとは異なり、 IAM ポリシーステートメントには Principal 要素は含まれません。IAM ポリシーでは、プリンシパルは、ポリシーがアタッチされた ID です。

  • IAM ポリシーの Resource 要素は、プリンシパルが使用できる CMK を識別します。CMK を指定するには、Amazon リソースネーム (ARN)Resource 要素に追加します。ポリシーステートメントで複数の CMK を指定できます。ただし、Resource 要素で特定の CMK を指定しないと、意図したよりも多くの CMK へのアクセス権限をに付与する可能性があります。

  • 外部ユーザーがAWS KMSと統合される AWS のサービスで CMK を使用できるようにするには、 キーポリシーまたは IAM ポリシーにアクセス許可を追加する必要がある場合があります。詳細については、「AWS サービスでの外部 CMK の使用」を参照してください。

IAM ポリシーの使用の詳細については、「IAM ポリシーの使用」を参照してください。

他のアカウントで使用できる CMK の作成

CreateKey オペレーションを使用して CMK を作成する場合、その Policy パラメーターを使用して、外部アカウント、または外部ユーザーおよびロールに CMK を使用するアクセス許可を付与するキーポリシーを指定できます 。また、ユーザーとロールがキーポリシーで指定されている場合でも 、これらのアクセス許可をアカウントのユーザーとロールに委任する IAM ポリシーを外部アカウントに追加する必要があります。PutKeyPolicy オペレーションを使用して、いつでもキーポリシーを変更できます。

AWS マネジメントコンソール で CMK を作成するときは、そのキーポリシーも作成します。Key Administrators セクションと Key Users セクションでアイデンティティを選択すると、AWS KMS はこれらの ID のポリシーステートメントを CMK のキーポリシーに追加します。

Key Users セクションでは、外部アカウントをキーユーザーとして追加することもできます。


                CMK のキーポリシーに外部アカウントを追加するコンソール要素。

外部アカウントのアカウント ID を入力すると、 AWS KMS はキーポリシーに 2 つのステートメントを追加します。このアクションは、キーポリシーにのみ影響します。外部アカウントのユーザーとロールは、IAM ポリシーをアタッチしてこれらのアクセス許可の一部またはすべてを付与するまで、CMK を使用できません。

最初のポリシーステートメントは、暗号化オペレーションで CMK を使用するアクセス許可を外部アカウントに付与します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

2 番目のポリシーステートメントでは、外部アカウントが CMK で許可を作成、表示、 取り消すことを許可します。ただし、リクエストが AWS KMS と統合されている AWS サービスからのものである場合に限ります。これらのアクセス権限は、CMK を使用するためにユーザーデータを暗号化するなどの他の AWS サービスを許可します。

これらのアクセス許可は、Amazon WorkMailなどの AWS サービスでユーザーデータを暗号化する CMK 用に設計されています。これらのサービスは、通常、ユーザーに代わって CMK を使用するために必要なアクセス許可を取得するために許可を使用します。詳細については、「AWS サービスでの外部 CMK の使用」を参照してください。

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }

これらのアクセス許可がニーズを満たさない場合は、コンソールのポリシービューで 、または PutKeyPolicy オペレーションを使用して編集できます。外部アカウントにアクセス許可を付与する代わりに、特定の外部ユーザーとロールを指定できます。ポリシーで指定するアクションを変更できます。また、グローバル条件と AWS KMS ポリシー条件を使用して、アクセス許可を絞り込むことができます。

AWS サービスでの外部 CMK の使用

別のアカウントのユーザーに、AWS KMSと統合されたサービスで CMK を使用するアクセス許可を付与できます。たとえば、外部アカウントのユーザーは、CMK を使用して Amazon S3 バケット内のオブジェクトを暗号化したりAWS Secrets Manager に保存するシークレットを暗号化したりできます。

キーポリシーは、CMK を使用するためのアクセス許可を外部ユーザーまたは外部ユーザーのアカウントに付与する必要があります。さらに、AWS サービスを使用するアクセス許可をユーザーに付与する IAM ポリシーを ID にアタッチする必要があります。

また、このサービスでは、ユーザーがキーポリシーで追加のアクセス許可を持っている必要がある場合があります。たとえば、CMK で許可を作成、一覧表示、および取り消すアクセス許可が必要になる場合があります。または、IAM 特定のポリシーが必要な場合があります。詳細については、サービスのドキュメントを参照してください。

最後に、統合サービスの AWS マネジメントコンソール に表示される CMK のリストには、外部アカウントの CMK は含まれません。これは、ユーザーまたはロールにそれらを使用するアクセス許可がある場合にも当てはまります。外部アカウントの CMK を使用するには、ユーザーは CMK の ID または ARN を入力する必要があります。詳細については、サービスのコンソールドキュメントを参照してください。