キーポリシーを確認する
キーポリシーは、KMS キーへのアクセスを制御するための主要な方法です。すべての KMS キーには、厳密に 1 つのキーポリシーが必要です。
キーポリシーがデフォルトのキーポリシーで設定されるか、含まれている場合、キーポリシーによって、アカウントの IAM 管理者が IAM ポリシーを使用し、KMS キーへのアクセスを制御できるようになります。また、キーポリシーによって KMS キーを使用するアクセス許可が別の AWS アカウント に付与されている場合、外部アカウントの IAM 管理者は、IAM ポリシーを使用してこれらのアクセス許可を委任できます。KMS キーにアクセスできるプリンシパルの完全なリストを確認するには、IAM ポリシーを調べます。
AWS KMS カスタマーマネージドキーまたはアカウントの AWS マネージドキー のキーポリシーを表示するには、AWS KMS API で AWS マネジメントコンソール または GetKeyPolicy オペレーションを使用します。キーポリシーを表示するには、KMS キーの kms:GetKeyPolicy アクセス許可が必要です。KMS キーのキーポリシーを表示する手順については、キーポリシーを表示する を参照してください。
キーポリシードキュメントを確認し、各ポリシーステートメントの Principal 要素で指定されているすべてのプリンシパルを書き留めます。Allow 効果を持つポリシーステートメントでは、Principal 要素内の IAM ユーザー、IAM ロール、AWS アカウント は、この KMS キーにアクセスできます。
注記
条件を使用してキーポリシーを制限しない限り、アクセス許可を付与するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクは、別のポリシーステートメントが明示的に拒否しない限り、すべての AWS アカウント のすべてのアイデンティティに、KMS キーを使用するアクセス許可を付与します。他の AWS アカウント のユーザーは、各自のアカウントに対応するアクセス権限があるときにはいつでも KMS キーを使用できます。
次の例では、デフォルトのキーポリシーで見つかったポリシーステートメントを使用してこれを行う方法を示します。
例 ポリシーステートメント 1
{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }
ポリシーステートメント 1 では、arn:aws:iam::111122223333:root は、AWS アカウント 111122223333 を参照する AWS プリンシパルアカウントです (アカウントのルートユーザーではありません)。デフォルトでは、このようなポリシーステートメントは、AWS マネジメントコンソール で新しい KMS キーを作成するときや、新しい KMS キーをプログラムで作成してもキーポリシーを提供しないときに、キーポリシードキュメントに含まれます。
AWS アカウント へのアクセスを許可するステートメントを持つキーポリシードキュメントでは、アカウントの IAM ポリシーで KMS キーへのアクセスが有効化されます。つまり、アカウントのユーザーとロールは、キーポリシードキュメントにプリンシパルとして明示的にリストされていない場合でも、KMS キーにアクセスできる可能性があります。プリンシパルとしてリストされているすべての AWS アカウント のすべての IAM ポリシーを調べて、この KMS キーへのアクセスを許可しているかどうかを判断します。
例 ポリシーステートメント 2
{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/KMSKeyAdmins"}, "Action": [ "kms:Describe*", "kms:Put*", "kms:Create*", "kms:Update*", "kms:Enable*", "kms:Revoke*", "kms:List*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }
ポリシーステートメント 2 で、arn:aws:iam::111122223333:role/KMSKeyAdmins は AWS アカウント の 111122223333 の KMSKeyAdmins という名前の IAM ロールを参照します。このロールを引き受ける権限を持つユーザーは、KMS キーを管理するための管理アクションである、ポリシーステートメントにリストされたアクションを実行できます。
例 ポリシーステートメント 3
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"}, "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": "*" }
ポリシーステートメント 3 で、arn:aws:iam::111122223333:role/EncryptionApp は AWS アカウント の111122223333 の EncryptionApp という名前の IAM ロールを参照します。このロールを引き受ける権限を持つプリンシパルは、対称暗号化 KMS キーの暗号化オペレーションを含む、ポリシーステートメントにリストされたアクションを実行できます。
例 ポリシーステートメント 4
{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"}, "Action": [ "kms:ListGrants", "kms:CreateGrant", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }
ポリシーステートメント 4 で、arn:aws:iam::111122223333:role/EncryptionApp は AWS アカウント の111122223333 の EncryptionApp という名前の IAM ロールを参照します。このロールを引き受ける権限を持つプリンシパルは、ポリシーステートメントにリストされたアクションを実行できます。これらのアクションは、ポリシーステートメント 3 の例で許可されたアクションと連動する際に、KMS キーの使用を、AWS KMS と統合されたほとんどの AWS のサービス (特に、権限を使用するサービス) に委任するために必要なアクションになります。Condition 要素内の kms:GrantIsForAWSResource の値により、AWS KMS と統合され、認可にグラントを使用する AWS サービスが委任対象である場合にのみ、そのような委任を許可します。
キーポリシードキュメントでプリンシパルを指定する各種方法をすべて確認するには、IAM ユーザーガイドのプリンシパルの指定を参照してください。
AWS KMS キーポリシーの詳細については、「AWS KMS のキーポリシー」を参照してください。