翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
他のアカウントのユーザーに KMS キーの使用を許可する
異なる AWS アカウント で、ユーザーまたはロールに、アカウントの 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 のポリシービュー、CreateKey、PutKeyPolicy オペレーションを使用できます。
IAM ポリシーの編集については、「での IAM ポリシーの使用 AWS KMS」を参照してください。
キーポリシーと IAM ポリシーが連携して、別のアカウントで KMS キーの使用を許可する方法を示す例については、例 2: ユーザーが別の AWS アカウント の KMS キーを使用するためのアクセス許可を持つロールを引き受ける を参照してください。
KMS キーのクロスアカウント AWS KMS オペレーションの結果は、AWS CloudTrail ログに表示されます。他のアカウントで KMS キーを使用するオペレーションは、発信者のアカウントと KMS キー所有者のアカウントの両方に記録されます。
トピック
注記
このトピックの例は、キーポリシーと IAM ポリシーを併用して、KMS キーへのアクセス権を付与し、それらを制限する方法を示しています。これらの一般的な例は、特定の AWS のサービスが必要とする KMS キーの許可を表すものではありません。AWS のサービスが必要とする許可の詳細については、サービスドキュメントの暗号化トピックを参照してください。
ステップ 1: ローカルアカウントにキーポリシーステートメントを追加する
KMS キーのキーポリシーは、KMS キーにアクセスできるユーザーと、実行できるオペレーションの主要な決定要因です。キーポリシーは常に、KMS キーを所有するアカウントにあります。IAM ポリシーとは異なり、キーポリシーはリソースを指定しません。リソースは、キーポリシーに関連付けられている KMS キーです。クロスアカウント許可を付与する場合、KMS キーのキーポリシーでは、KMS キーを使用するアクセス許可を、外部アカウント (または外部アカウントのユーザーとロール) に付与する必要があります。
KMS キーを使用する許可を外部アカウントに付与するには、外部アカウントを指定するステートメントをキーポリシーに追加します。キーポリシーの Principal
要素に、外部アカウントの Amazon リソースネーム (ARN) を入力します。
キーポリシーで外部アカウントを指定すると、外部アカウントの IAM 管理者は IAM ポリシーを使用して、外部アカウントのすべてのユーザーおよびロールにこれらのアクセス権限を委任できます。また、ユーザーおよびロールが実行できるキーポリシーで指定されたアクションを決定することもできます。
外部アカウントとそのプリンシパルに付与されたアクセス許可は、KMS キーとそのキーポリシーをホストするリージョンで外部アカウントが有効になっている場合にのみ有効です。デフォルトで有効になっていないリージョン (「オプトインリージョン」) については、「AWS 全般のリファレンス」の「AWS リージョン の管理」を参照してください。
例えば、アカウント 444455556666
にアカウント 111122223333
の対称暗号化 KMS キーの使用を許可するとします。これを行うには、次の例のようなポリシーステートメントを、アカウント 111122223333
の KMS キーのキーポリシーに追加します。このポリシーステートメントは、対称暗号化 KMS キーの暗号化オペレーションで KMS キーを使用する許可を外部アカウントである 444455556666
に付与します。
注記
次の例は、KMS キーを別のアカウントと共有するためのサンプルキーポリシーを示しています。例の Sid
、Principal
、Action
の値を、KMS キーの使用目的に合った有効な値に置き換えます。
{ "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) を入力します。
例えば、次のキーポリシーステートメントの例では、アカウント 444455556666
の ExampleRole
に、アカウント 111122223333
の KMS キーの使用を許可します。このキーポリシーステートメントは、対称暗号化 KMS キーの暗号化オペレーションで KMS キーを使用する許可を外部アカウントである 444455556666
に付与します。
注記
次の例は、KMS キーを別のアカウントと共有するためのサンプルキーポリシーを示しています。例の Sid
、Principal
、Action
の値を、KMS キーの使用目的に合った有効な値に置き換えます。
{ "Sid": "
Allow an external account to use this KMS key
", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::444455556666:role/ExampleRole"
}, "Action": ["kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey"
], "Resource": "*" }
注記
条件を使用してキーポリシーを制限しない限り、アクセス許可を付与するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクは、別のポリシーステートメントが明示的に拒否しない限り、すべての AWS アカウント のすべてのアイデンティティに、KMS キーを使用するアクセス許可を付与します。他の AWS アカウント のユーザーは、各自のアカウントに対応するアクセス権限があるときにはいつでも KMS キーを使用できます。
また、外部アカウントに付与するアクセス許可を決定する必要があります。例えば、復号するが暗号化しないアクセス許可をユーザーに付与したり、KMS キーが表示されても使用できないアクセス許可を付与したりできます。KMS キーに対するアクセス許可のリストについては、AWS KMS アクセス許可 を参照してください 。
- KMS キーを作成する際のキーポリシーの設定
-
CreateKey オペレーションを使用して KMS キーを作成する場合、その
Policy
パラメータを使用して、KMS キー使用許可を外部アカウント、または外部ユーザーとロールに付与するキーポリシーを指定できます。AWS Management Console で KMS キーを作成するときは、そのキーポリシーも作成します。キー管理者セクションとキーユーザーセクションでアイデンティティを選択すると、AWS KMS はこれらのアイデンティティのポリシーステートメントを KMS キーのキーポリシーに追加します。Key Users セクションでは、外部アカウントをキーユーザーとして追加することもできます。
外部アカウントのアカウント ID を入力すると、 AWS KMS はキーポリシーに 2 つのステートメントを追加します。このアクションは、キーポリシーにのみ影響します。外部アカウントのユーザーとロールは、IAM ポリシーをアタッチしてこれらのアクセス許可の一部またはすべてを付与するまで、KMS キーを使用できません。
最初のポリシーステートメントでは、暗号化オペレーションで KMS キーを使用するアクセス許可を外部アカウントに付与します。2 番目のポリシーステートメントでは、外部アカウントが KMS キーで権限を作成、表示、取り消すことを許可します。ただし、リクエストが AWS KMS と統合された AWS サービスからのものである場合に限ります
。これらのアクセス許可は、KMS キーを使用するためにユーザーデータを暗号化するなどの、他の AWS のサービスを許可します。これらのアクセス許可は、AWS サービス内でユーザーデータを暗号化する KMS キー向けに設計されています。
ステップ 2: 外部アカウントに IAM ポリシーを追加する
KMS キーを所有するアカウントのキーポリシーは、アクセス許可の有効範囲を設定します。ただし、外部アカウントのユーザーとロールは、それらのアクセス許可を委任する IAM ポリシーをアタッチするか、権限を使用して KMS キーへのアクセスを管理するまで、KMS キーを使用できません。IAM ポリシーは外部アカウントで設定されます。
キーポリシーが外部アカウントにアクセス許可を与える場合は、アカウント内の任意のユーザーまたはロールに IAM ポリシーをアタッチできます。ただし、キーポリシーが指定したユーザーまたはロールにアクセス許可を付与する場合、IAM ポリシーでは、指定したユーザーとロールのすべてまたはサブセットにのみそれらのアクセス許可を付与できます。IAM ポリシーが他の外部ユーザーまたはロールにKMS キーへのアクセスを許可しても、影響はありません。
キーポリシーは、IAM ポリシー内のアクションも制限します。IAM ポリシーは、キーポリシーで指定されたアクションのすべてまたはサブセットを委任できます。IAM ポリシーに、キーポリシーで指定されていないアクションがリストされている場合、それらのアクセス権限は有効ではありません。
以下の IAM ポリシー例では、プリンシパルがアカウント 111122223333
の KMS キーを暗号化オペレーションに使用することを許可します。アカウント内のユーザーとロールにこの権限を付与するには 444455556666
, 、アカウント内のユーザーまたはロールにポリシーをアタッチ 444455556666
します。
注記
次の例は、KMS キーを別のアカウントと共有するための IAM ポリシーのサンプルを示しています。例の Sid
、Resource
、Action
の値を、KMS キーの使用目的に合った有効な値に置き換えます。
{ "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 キーを指定するには、そのキー ARN をResource
要素に追加します。 -
Resource
要素には複数の KMS キーを指定できます。ただし、Resource
要素で特定の KMS キーを指定しないと、意図したよりも多くの KMS キーへのアクセス許可を、誤って付与する可能性があります。 -
外部ユーザーが AWS KMS と統合された AWS サービス
で KMS キーを使用できるようにするには、キーポリシーまたは IAM ポリシーにアクセス許可を追加する必要があります。詳細については、「外部 KMS キーの使用を許可する AWS のサービス」を参照してください。
IAM ポリシーのオペレーションの詳細については、「IAM ポリシー」を参照してください。
外部 KMS キーの使用を許可する AWS のサービス
別のアカウントのユーザーに、AWS KMS と統合されたサービスで KMS キーを使用するアクセス許可を付与できます。例えば、外部アカウントのユーザーが KMS キーを使用して Amazon S3 バケット内のオブジェクトを暗号化したり、AWS Secrets Manager に保存されたシークレットを暗号化することができます。
キーポリシーでは、KMS キーを使用するための許可を外部ユーザーまたは外部ユーザーのアカウントに付与する必要があります。さらに、AWS のサービス を使用する許可をユーザーに付与するアイデンティティに、IAM ポリシーをアタッチする必要があります。また、このサービスでは、ユーザーがキーポリシーまたは IAM ポリシーで、追加のアクセス許可を持っている必要があります。カスタマーマネージドキーに対して AWS のサービス で必要になる許可のリストについては、サービスのユーザーガイドまたはデベロッパーガイドの「セキュリティ」トピックにある「Data Protection topic」(データ保護トピック) を参照してください。
他のアカウントで KMS キーを使用する
KMS キーを使用するアクセス許可を別の AWS アカウント で持っている場合、AWS Management Console、AWS SDK、AWS CLI、AWS Tools for PowerShell で KMS キーを使用できます。
シェルコマンドまたは API リクエストで別のアカウントの KMS キーを識別するには、次のキー識別子を使用します。
-
暗号化オペレーション、DescribeKey、GetPublicKey の場合は、KMS キーのキー ARN またはエイリアス ARN を使用します。
-
CreateGrant、GetKeyRotationStatus、ListGrants、RevokeGrant の場合、KMS キーのキー ARN を使用します。
キー ID またはエイリアス名のみを入力する場合、AWS では、KMS キーがアカウントにあることを前提とします。
AWS KMS コンソールでは、他のアカウントの KMS キーを使用するためのアクセス許可がある場合でも、KMS キーは表示されません。他の AWS サービスのコンソールに表示される KMS キーのリストには、他のアカウントの KMS キーは含まれません。
AWS サービスのコンソールで異なるアカウントの KMS キーを指定するには、KMS キーのキー ARN またはエイリアス ARN を入力する必要があります。必要なキー識別子はサービスによって異なり、サービスコンソールとその API オペレーションとの間でも異なる場合があります。詳細については、サービスのドキュメントを参照してください。