IAM ポリシーステートメントで KMS キーを指定する
IAM ポリシーを使用して、プリンシパルに KMS キーの使用または管理を許可できます。KMS キーは、ポリシーステートメントの Resource
要素で指定されます。
-
IAM ポリシーステートメントで KMS キーを指定するには、キー ARN を使用する必要があります。キー ID、エイリアス名、エイリアス ARN を使用して IAM ポリシーステートメントの KMS キーを識別することはできません。
例:「
Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
」エイリアスに基づいて KMS キーへのアクセスを制御するには、kms:RequestAlias または kms:ResourceAliases 条件キーを使用します。詳細については、「AWS KMS の ABAC」を参照してください。
CreateAlias、UpdateAlias、DeleteAlias などのエイリアスオペレーションへのアクセスを制御する、ポリシーステートメント内のみのリソースとしてエイリアス ARN を使用します。 詳細については、「エイリアスへのアクセスの制御」を参照してください。
-
アカウントとリージョンで複数のKMS キーを指定するには、キー ARN のリージョンまたはリソース ID の位置にワイルドカード文字 (*) を使用します。
例えば、アカウントの米国西部 (オレゴン) リージョンのすべての KMS キーを指定するには、「
Resource": "arn:aws:kms:us-west-2:111122223333:key/*
」を使用します。アカウントのすべてのリージョンですべての KMS キーを指定するには、「Resource": "arn:aws:kms:*:111122223333:key/*
」を使用します。 -
すべての KMS キーを表すには、ワイルドカード文字のみ (
"*"
) を使用します。この形式は、特定のKMS キーを使用しないオペレーション、つまり CreateKey、GenerateRandom、ListAliases、ListKeys などに使用します。
ポリシーステートメントを書き込むときは、すべての KMS キーへのアクセス許可を付与するのではなく、プリンシパルが使用する必要がある KMS キーだけを指定するのがベストプラクティスです。
例えば、次の IAM ポリシーステートメントで、プリンシパルは、ポリシーステートメントの Resource
要素に記載されている KMS キーに対してのみ、DescribeKey、GenerateDataKey、Decrypt オペレーションを呼び出すことができます。キー ARN による KMS キーの指定は、アクセス許可を指定した KMS キーのみに制限するベストプラクティスです。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" ] } }
特定の信頼できる AWS アカウント のすべての KMS キーにアクセス許可を適用するには、リージョンとキー ID の位置にワイルドカード文字 (*) を使用します。例えば、次のポリシーステートメントでは、プリンシパルが 2 つの信頼できるサンプルアカウントのすべての KMS キーで、指定されたオペレーションを呼び出すことができます。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:GenerateDataKeyPair" ], "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*" ] } }
Resource
要素内でワイルドカード文字 ("*"
) を単独で使用することもできます。アカウントが使用を許可されているすべての KMS キーへのアクセスを許可するため、主に、特定の KMS キーおよび Deny
ステートメントを含まないオペレーションに推奨されます。また、機密性の低い読み取り専用オペレーションのみを許可するポリシーステートメントで使用することもできます。AWS KMS オペレーションが特定の KMS キーを含むかどうかを判断するには、AWS KMS アクセス権限 のテーブルの[Resources] (リソース) 列の [KMS key] (KMS キー) の値を探します。
例えば、次のポリシーステートメントでは、Deny
エフェクトを使用して、プリンシパルが任意の KMS キーに対して指定されたオペレーションを使用できないようにします。Resource
要素でワイルドカード文字を使用して、すべての KMS キーを表します。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "kms:CreateKey", "kms:PutKeyPolicy", "kms:CreateGrant", "kms:ScheduleKeyDeletion" ], "Resource": "*" } }
次のポリシーステートメントでは、ワイルドカード文字だけを使用してすべての KMS キーを表します。ただし、機密性の低い読み取り専用オペレーションと、特定の KMS キーに適用されないオペレーションのみを許可します。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:ListKeys", "kms:ListAliases", "kms:ListResourceTags" ], "Resource": "*" } }