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

エイリアスを使用して KMS キーへのアクセスを制御する

KMS キーに関連付けられたエイリアスに基づいて、KMS キーへのアクセスを制御できます。これを行うには、kms:RequestAlias および kms:ResourceAliases 条件キーを使用します。この機能は、属性ベースのアクセスコントロール (ABAC) の AWS KMS サポートの一部です。

kms:RequestAlias 条件キーは、リクエスト内のエイリアスに基づいて、KMS キーへのアクセスを許可または拒否します。kms:ResourceAliases 条件キーは、KMS キーに関連付けられたエイリアスに基づいて、KMS キーへのアクセスを許可または拒否します。

これらの機能では、ポリシーステートメントの resource 要素のエイリアスを使用して KMS キーを識別することはできません。エイリアスが resource 要素の値の場合、ポリシーは関連付けられている KMS キーではなく、エイリアスリソースに適用されます。

注記

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

エイリアスを使用して KMS キーへのアクセスを制御する際は、次の点を考慮してください。

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

  • プリンシパルにエイリアスを追加、編集、削除できる kms:CreateAliaskms:UpdateAliaskms:DeleteAlias 許可を付与する際は注意してください。エイリアスを使用して KMS キーへのアクセスを制御する際、タグを変更することで、使用許可のない KMS キーに対する使用許可をプリンシパルに付与してしまう可能性があります。他のプリンシパルがジョブを実行するために必要な KMS キーへのアクセスを拒否することもできます。

  • 現在、エイリアスを管理する許可を持つ AWS アカウント でプリンシパルを確認し、必要に応じて許可を調整します。キーポリシーを変更したり、権限を作成したりする許可のないキー管理者も、エイリアスを管理する許可があれば、KMS キーへのアクセスを制御できます。

    例えば、コンソールのキー管理者のデフォルトキーポリシーには、kms:CreateAliaskms:DeleteAliaskms:UpdateAlias アクセス許可があります。IAM ポリシーでは、AWS アカウント のすべての KMS キーに対するエイリアスのアクセス許可を付与する可能性があります。例えば、AWSKeyManagementServicePowerUser マネージドポリシーでは、プリンシパルはすべての KMS キーのエイリアスを作成、削除、一覧表示できますが、更新はできません。

  • エイリアスに依存するポリシーを設定する前に、AWS アカウント で KMS キーのエイリアスを確認します。含めるエイリアスにのみポリシーが適用されることを確認します。CloudTrail ログおよび CloudWatch アラームを使用して、KMS キーへのアクセスに影響する可能性のあるエイリアス変更をアラートさせます。ListAliases レスポンスには、各エイリアスの作成日と最終更新日が含まれます。

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

kms:RequestAlias 条件キーは、オペレーションリクエストで明示的に指定されたエイリアスに依存します。kms:ResourceAliases 条件キーは、リクエストに表示されない場合でも、KMS キーに関連付けられているエイリアスに依存します。

kms:RequestAlias

リクエスト内の KMS キーを識別するエイリアスに基づいて、KMS キーへのアクセスを許可または拒否します。キーポリシーまたは IAM ポリシーで、kms:RequestAlias 条件キーを使用できます。これは、エイリアスを使用してリクエスト内の KMS キーを識別するオペレーション、つまり 暗号化オペレーションDescribeKeyGetPublicKey に適用されます。CreateAlias または DeleteAlias のようなエイリアスオペレーションには無効です。

条件キーで、エイリアス名またはエイリアス名パターンを指定します。エイリアス ARN を指定することはできません。

例えば、次のポリシーステートメントでは、プリンシパルが KMS キーに対して、指定されたオペレーションを使用できるようにします。アクセス許可は、KMS キーを識別する alpha を含むエイリアスをリクエストが使用する場合にのみ有効です。

{ "Sid": "Key policy using a request alias condition", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/alpha-developer" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringLike": { "kms:RequestAlias": "alias/*alpha*" } } }

次の認可済みプリンシパルからのサンプルリクエストは条件を満たします。ただし、これらの値が同じ KMS キーを識別したとしても、キー IDキー ARN、別のエイリアスが条件を満たさない可能性があります。

$ aws kms describe-key --key-id "arn:aws:kms:us-west-2:111122223333:alias/project-alpha"

kms:ResourceAliases

KMS キーに関連付けられたエイリアスに基づいて、エイリアスがリクエストで使用されていない場合でも、KMS キーへのアクセスを許可または拒否します。kms:ResourceAliases 条件キーを使用すると、alias/test* のようなエイリアスまたはエイリアスパターンを指定できるため、この条件キーを IAM ポリシーで使用して、同じリージョン内の複数の KMS キーへのアクセスを制御できます。これは、KMS キーを使用する AWS KMS オペレーションに有効です。

例えば、次の IAM ポリシーでは、プリンシパルが 2 つの AWS アカウント で KMS キーの自動キーローテーションを管理できるようにします。ただし、アクセス許可は restricted で始まるエイリアスに関連付けられた KMS キーにのみ適用されます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:EnableKeyRotation", "kms:DisableKeyRotation", "kms:GetKeyRotationStatus" ], "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*" ], "Condition": { "ForAnyValue:StringLike": { "kms:ResourceAliases": "alias/restricted*" } } } ] }

kms:ResourceAliases 条件はリクエストではなく、リソースの条件です。したがって、エイリアスを指定しないリクエストは、引き続き条件を満たすことができます。

次のリクエスト例は一致するエイリアスを指定し、条件を満たしています。

$ aws kms enable-key-rotation --key-id "alias/restricted-project"

ただし、次のリクエスト例では、指定された KMS キーに restricted で始まるエイリアスがあれば、そのエイリアスがリクエストで使用されなくても、条件を満たします。

$ aws kms enable-key-rotation --key-id "1234abcd-12ab-34cd-56ef-1234567890ab"