他のアカウントのユーザーに KMS キーの使用を許可する - AWS Key Management Service

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

異なる AWS アカウント で、IAM ユーザーまたはロールに、アカウントの AWS KMS key (KMS キー) の使用を許可できます。クロスアカウントアクセスには、KMS キーのキーポリシーと、外部ユーザーアカウントの IAM ポリシーのアクセス許可が必要です。

クロスアカウント許可は、以下のオペレーションに対してのみ有効です。

別のアカウントのユーザーに他のオペレーションのアクセス許可を付与しても、それらのアクセス許可には効果がありません。例えば、別のアカウントのプリンシパルに、IAM ポリシーの kms:ListKeys アクセス許可を付与した場合、またはキーポリシーの KMS キーで kms:ScheduleKeyDeletion を付与した場合、リソースでこれらのオペレーションを呼び出そうとするユーザーの試行は失敗します。

別のアカウントの AWS KMS オペレーションで KMS キーを使用する方法の詳細については、AWS KMS アクセス権限 および 他のアカウントで KMS キーを使用するクロスアカウント使用の記事を参照してください。また、AWS Key Management Service API リファレンスの各 API の説明に、クロスアカウント使用のセクションがあります。

警告

KMS キー使用のアクセス許可をプリンシパルに付与する際は注意してください。可能な限り、 最小権限 の原則に従ってください。オペレーションで必要な KMS キーのみに、アクセスを許可します。

また、使い慣れていない KMS キー、特に別のアカウントの KMS キーを使用する際にも注意してください。悪意のあるユーザーは、ユーザーまたはユーザーのアカウントに関する情報を取得するために、KMS キーの使用許可を付与する可能性があります。

ポリシーを使用してアカウント内のリソースを保護する方法については、「IAM ポリシーのベストプラクティス」を参照してください。

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

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

  • 外部アカウントの IAM ポリシーは 、キーポリシーのアクセス権限をそのユーザーとロールに委任する必要があります。これらのポリシーは外部アカウントで設定され、そのアカウントのユーザーとロールにアクセス許可を与えます。

キーポリシーによって、KMS キーにアクセスできるユーザーが決定されます。IAM ポリシーによって、KMS キーにアクセスするユーザーが決定されます。キーポリシーも IAM ポリシーも十分ではありません。両方を変更する必要があります。

キーポリシーを編集するために、AWS Management Console のポリシービューCreateKeyPutKeyPolicy オペレーションを使用できます。KMS キーの作成時にキーポリシーを設定する方法については、他のアカウントで使用できる KMS キーを作成する を参照してください。

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

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

KMS キーのクロスアカウント AWS KMS オペレーションの結果は、AWS CloudTrail ログに表示されます。他のアカウントで KMS キーを使用するオペレーションは、発信者のアカウントと KMS キー所有者のアカウントの両方に記録されます。

注記

このトピックの例は、キーポリシーと IAM ポリシーを併用して、KMS キーへのアクセス権を付与し、それらを制限する方法を示しています。これらの一般的な例は、特定の AWS のサービスが必要とする KMS キーの許可を表すものではありません。AWS のサービスが必要とする許可の詳細については、サービスドキュメントの暗号化トピックを参照してください。

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

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

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

注記

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

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

外部アカウントとそのプリンシパルに付与されたアクセス許可は、KMS キーとそのキーポリシーをホストするリージョンで外部アカウントが有効になっている場合にのみ有効です。デフォルトで有効になっていないリージョン (「オプトインリージョン」) については、AWS 全般のリファレンスAWS リージョン の管理を参照してください。

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

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

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

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

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

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

{ "Sid": "Allow an external account to use this KMS key", "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 アカウント のすべてのアイデンティティに、KMS キーを使用するアクセス許可を付与します。他の AWS アカウント のユーザーは、KMS キーを使用するために、各自のアカウントで対応する IAM アクセス許可が必要です。

また、外部アカウントに付与するアクセス許可を決定する必要があります。KMS キーに対するアクセス許可のリストについては、AWS KMS アクセス権限 を参照してください 。

暗号化オペレーションで KMS キーを使用したり、AWS KMS と統合された AWS のサービスで KMS キーを使用したりするためのアクセス許可を外部アカウントに付与できます。これを行うには、AWS Management Console の Key Users セクションを使用します。詳細については、「他のアカウントで使用できる KMS キーを作成する」を参照してください。

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

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

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

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

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

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

{ "Sid": "AllowUseOfKeyInAccount111122223333", "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 エレメントは、プリンシパルが使用できる KMS キーを識別します。KMS キーを指定するには、そのキー ARNResource 要素に追加します。

  • Resource 要素には複数の KMS キーを指定できます。ただし、Resource 要素で特定の KMS キーを指定しないと、意図したよりも多くの KMS キーへのアクセス許可を、誤って付与する可能性があります。

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

IAM ポリシーのオペレーションの詳細については、「IAM ポリシー」を参照してください。

他のアカウントで使用できる KMS キーを作成する

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

AWS Management Console で KMS キーを作成するときは、そのキーポリシーも作成します。キー管理者セクションとキーユーザーセクションでアイデンティティを選択すると、AWS KMS はこれらのアイデンティティのポリシーステートメントを KMS キーのキーポリシーに追加します。

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


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

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

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

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

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

{ "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 ポリシー条件を使用して、アクセス許可を絞り込むことができます。

外部 KMS キーの使用を許可する AWS のサービス

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

キーポリシーでは、KMS キーを使用するための許可を外部ユーザーまたは外部ユーザーのアカウントに付与する必要があります。さらに、AWS サービスを使用するアクセス許可をユーザーに付与する IAM ポリシーを、アイデンティティにアタッチする必要があります。また、このサービスでは、ユーザーがキーポリシーまたは IAM ポリシーで、追加のアクセス許可を持っている必要があります。詳細については、サービスのドキュメントを参照してください。

他のアカウントで KMS キーを使用する

KMS キーを使用するアクセス許可を別の AWS アカウント で持っている場合、AWS Management Console、AWS SDK、AWS CLI、AWS Tools for PowerShell で KMS キーを使用できます。

シェルコマンドまたは API リクエストで別のアカウントの KMS キーを識別するには、次のキー識別子を使用します。

キー ID またはエイリアス名のみを入力する場合、AWS では、KMS キーがアカウントにあることを前提とします。

AWS KMS コンソールでは、他のアカウントの KMS キーを使用するためのアクセス許可がある場合でも、KMS キーは表示されません。他の AWS サービスのコンソールに表示される KMS キーのリストには、他のアカウントの KMS キーは含まれません。

AWS サービスのコンソールで異なるアカウントの KMS キーを指定するには、KMS キーのキー ARN またはエイリアス ARN を入力する必要があります。必要なキー識別子はサービスによって異なり、サービスコンソールとその API オペレーションとの間でも異なる場合があります。詳細については、サービスのドキュメントを参照してください。