タグを使用してKMS キーへのアクセスを制御する - AWS Key Management Service

タグを使用してKMS キーへのアクセスを制御する

KMS キーのタグに基づいて、AWS KMS keys へのアクセスを制御できます。例えば、プリンシパルが特定のタグを持つ KMS キーのみを有効または無効にすることを許可する IAM ポリシーを書き込むことができます。または、IAM ポリシーを使用して、KMS キーに特定のタグがない限り、プリンシパルが暗号化オペレーションで KMS キーを使用しないようにすることもできます。

この機能は、属性ベースのアクセスコントロール (ABAC) の AWS KMS サポートの一部です。AWS リソースへのアクセスを制御するタグの使用に関する情報は、IAM ユーザーガイドWhat is ABAC for AWS? および Controlling Access to AWS Resources Using Resource Tags を参照してください。ABAC に関連するアクセス問題の解決方法については、AWS KMS の ABAC トラブルシューティング を参照してください。

注記

タグとエイリアスの変更が KMS キーの認可に影響を及ぼすまでに最長 5 分かかることがあります。最近の変更は、認可に影響を与える前に API オペレーションで表示される場合があります。

AWS KMS は aws:ResourceTag/tag-key グローバル条件コンテキストキーをサポートします。これは、KMS キーのタグに基づいて KMS キーへのアクセスを制御できるようにします。複数の KMS キーに同じタグを付けることができるため、この機能を使用すると、KMS キーの選択したセットにアクセス許可を適用できます。それらのタグを変更することで、セット内の KMS キーを簡単に変更することもできます。

AWS KMS では、aws:ResourceTag/tag-key 条件キーは IAM ポリシーでのみサポートされます。これは、1 つの KMS キーだけに適用されるキーポリシー、または特定の KMS キーを使用しないオペレーション (ListKeys または ListAliases オペレーションなど) ではサポートされません。

タグを使用してアクセスを制御すると、シンプルでスケーラブルかつ柔軟な方法でアクセス許可を管理できます。ただし、適切に設計および管理されていない場合、KMS キーへのアクセスを誤って許可または拒否する可能性があります。タグを使用してアクセスを制御する場合は、次の方法を検討します。

  • タグを使用して、最小特権アクセスのベストプラクティスを強化します。IAM プリンシパルで、使用または管理する必要がある KMS キーのみに対して、必要なアクセス許可のみを付与します。例えば、タグを使用して、プロジェクトに使用する KMS キーにラベルを付けます。次に、プロジェクトタグで KMS キーのみを使用する許可をプロジェクトチームに付与します。

  • プリンシパルにタグを追加、編集、削除できる kms:TagResource および kms:UntagResource 許可を付与する際は注意してください。タグを使用して KMS キーへのアクセスを制御する場合、タグを変更すると、使用許可のない KMS キーに対する使用許可をプリンシパルに付与してしまう可能性があります。他のプリンシパルがジョブを実行するために必要な KMS キーへのアクセスを拒否することもできます。キーポリシーを変更したり、権限を作成したりする許可を持たないキー管理者も、タグを管理する許可があれば、KMS キーへのアクセスを制御できます。

    可能な限り、ポリシー条件 (aws:RequestTag/tag-key または aws:TagKeysプリンシパルのタグ付け許可の制限など) を、特定の KMS キーの特定のタグまたはタグパターンに適用します。

  • 現在、タグ付けおよびタグ解除の許可を持つプリンシパルを AWS アカウント で確認し、必要に応じて調整します。例えば、コンソールのキー管理者のデフォルトキーポリシーは、KMS キーの kms:TagResource および kms:UntagResource アクセス許可を含んでいます。IAM ポリシーでは、すべての KMS キーに対してタグ付けおよびタグ解除を許可する場合があります。例えば、AWSKeyManagementServicePowerUser マネージドポリシーは、プリンシパルがすべての KMS キーで、タグ付け、タグ解除、タグの一覧表示を行うことを許可します。

  • タグに依存するポリシーを設定する前に、AWS アカウント で KMS キーのタグを確認します。含めるタグにのみポリシーが適用されることを確認します。CloudTrail ログおよび CloudWatch アラームを使用して、KMS キーへのアクセスに影響する可能性のある変更をタグ付けするようにアラートします。

  • タグベースのポリシー条件では、パターンマッチングを使用します。タグの特定のインスタンスには関連付けられません。タグベースの条件キーを使用するポリシーは、パターンに一致するすべての新規および既存のタグに影響します。ポリシー条件に一致するタグを削除して再作成すると、古いタグの場合と同様に、新しいタグに条件が適用されます。

例えば、次の IAM ポリシーの例を考えてみます。アカウントがアジアパシフィック (シンガポール) リージョンで "Project"="Alpha" タグを持つ KMS キーのみで、GenerateDataKeyWithoutPlaintext および Decrypt オペレーションを呼び出すことを、プリンシパルに許可します。このポリシーは、サンプルの Alpha プロジェクトでロールにアタッチできます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyWithResourceTag", "Effect": "Allow", "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt" ], "Resource": "arn:aws:kms:ap-southeast-1:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": "Alpha" } } } ] }

次の IAM ポリシーの例では、プリンシパルが、特定の暗号化オペレーションのために、アカウントで任意の KMS キーを使用することを許可します。ただし、プリンシパルが "Type"="Reserved" タグのある、または "Type" タグのない KMS キーにこれらの暗号化オペレーションを使用することを禁止します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMAllowCryptographicOperations", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*" }, { "Sid": "IAMDenyOnTag", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Type": "Reserved" } } }, { "Sid": "IAMDenyNoTag", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "Null": { "aws:ResourceTag/Type": "true" } } } ] }