IAM ポリシーステートメントで KMS キーを指定する - AWS Key Management Service

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」を参照してください。

    CreateAliasUpdateAliasDeleteAlias などのエイリアスオペレーションへのアクセスを制御する、ポリシーステートメント内のみのリソースとしてエイリアス ARN を使用します。  詳細については、「エイリアスへのアクセスの制御」を参照してください。

  • アカウントとリージョンで複数のKMS キーを指定するには、キー ARN のリージョンまたはリソース ID の位置にワイルドカード文字 (*) を使用します。

    例えば、アカウントの米国西部 (オレゴン) リージョンのすべての KMS キーを指定するには、「Resource": "arn:aws:kms:us-west-2:111122223333:key/*」を使用します。アカウントのすべてのリージョンですべての KMS キーを指定するには、「Resource": "arn:aws:kms:*:111122223333:key/*」を使用します。

  • すべての KMS キーを表すには、ワイルドカード文字のみ ("*") を使用します。この形式は、特定のKMS キーを使用しないオペレーション、つまり CreateKeyGenerateRandomListAliasesListKeys などに使用します。

ポリシーステートメントを書き込むときは、すべての KMS キーへのアクセス許可を付与するのではなく、プリンシパルが使用する必要がある KMS キーだけを指定するのがベストプラクティスです。

例えば、次の IAM ポリシーステートメントで、プリンシパルは、ポリシーステートメントの Resource 要素に記載されている KMS キーに対してのみ、DescribeKeyGenerateDataKeyDecrypt オペレーションを呼び出すことができます。キー 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": "*" } }