タグへのアクセスを制御する - AWS Key Management Service

タグへのアクセスを制御する

タグを追加、表示、削除するには、AWS KMS コンソールまたは API を使用して、プリンシパルがアクセス許可にタグ付けする必要があります。これらのアクセス許可はキーポリシーで付与できます。または、IAM ポリシー (VPC エンドポイントポリシーを含む) で付与することもできますが、キーポリシーが許可する場合に限られますAWSKeyManagementServicePowerUser マネージドポリシーは、プリンシパルがアカウントからアクセスできるすべての KMS キーで、タグ付け、タグ解除、タグの一覧表示を行うことを許可します。

タグの AWS グローバル条件キーを使用して、これらのアクセス許可を制限することもできます。AWS KMS ではこれらの条件により、TagResource および UntagResource のようなタグ付けオペレーションへのアクセスを制御できます。

注記

タグとエイリアスを管理する許可をプリンシパルに付与する場合は注意が必要です。タグまたはエイリアスを変更すると、カスタマーマネージドキーに対するアクセス許可が許可または拒否される可能性があります。詳細については、「AWS KMS の ABAC」および「タグを使用してKMS キーへのアクセスを制御する」を参照してください。

サンプルポリシーおよび詳細については、IAM ユーザーガイドタグキーに基づいたアクセス制御を参照してください。

タグを作成および管理するためのアクセス許可は、次のように機能します。

kms:TagResource

プリンシパルにタグの追加または編集を許可します。KMS キーの作成中にタグを追加するには、プリンシパルが特定の KMS キーに制限されない IAM ポリシーでアクセス許可を持っている必要があります。

kms:ListResourceTags

プリンシパルが KMS キーのタグを表示できるようにします。

kms:UntagResource

プリンシパルが KMS キーからタグを削除できるようにします。

ポリシーのタグ付け許可

キーポリシーまたは IAM ポリシーでタグ付け許可を付与できます。例えば、次のキーポリシーの例では、選択したユーザーに KMS キーに対するタグ付け許可が付与されます。これにより、サンプルの管理者ロールまたはデベロッパーロールを引き受けることができるすべてのユーザーにタグを表示する許可が付与されます。

{ "Version": "2012-10-17", "Id": "example-key-policy", "Statement": [ { "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow all tagging permissions", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/LeadAdmin", "arn:aws:iam::111122223333:user/SupportLead" ]}, "Action": [ "kms:TagResource", "kms:ListResourceTags", "kms:UntagResource" ], "Resource": "*" }, { "Sid": "Allow roles to view tags", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:role/Administrator", "arn:aws:iam::111122223333:role/Developer" ]}, "Action": "kms:ListResourceTags", "Resource": "*" } ] }

プリンシパルに複数の KMS キーに対するタグ付け許可を付与するには、IAM ポリシーを使用します。このポリシーを有効にするには、各 KMS キーのキーポリシーで、アカウントが IAM ポリシーを使用して KMS キーへのアクセスを制御することを許可する必要があります。

例えば、次の IAM ポリシーではプリンシパルが KMS キーを作成することを許可します。指定したアカウントのすべての KMS キーでタグを作成および管理することもできます。この組み合わせにより、プリンシパルは CreateKey オペレーションのタグパラメータを使用して、KMS キー作成時に KMS キーにタグを追加できます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyCreateKeys", "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*" }, { "Sid": "IAMPolicyTags", "Effect": "Allow", "Action": [ "kms:TagResource", "kms:UntagResource", "kms:ListResourceTags" ], "Resource": "arn:aws:kms:*:111122223333:key/*" } ] }

タグ付け許可を制限する

ポリシー条件を使用して、タグ付け許可を制限できます。次のポリシー条件を kms:TagResource および kms:UntagResource 許可に適用できます。例えば、aws:RequestTag/tag-key 条件を使用して、プリンシパルが特定のタグのみを追加できるようにするか、プリンシパルが特定のタグキーを持つタグを追加しないように許可できます。または、kms:KeyOrigin 条件を使用して、プリンシパルがインポートされたキーマテリアルを持つ KMS キーにタグ付けまたはタグ解除を行わないようにすることができます。

ベストプラクティスとして、タグを使用して KMS キーへのアクセスを制御する場合は、aws:RequestTag/tag-key または aws:TagKeys 条件キーを使用して、許可するタグ (またはタグキー) を決定します。

例えば、次の IAM ポリシーは前述のものと似ています。ただしこのポリシーでは、プリンシパルはタグ (TagResource) の作成とタグ UntagResource の削除を、Project タグキーを持つタグに対してのみ実行できます。

TagResource および UntagResource リクエストは複数のタグを含む可能性があるため、ForAllValues または ForAnyValue 集合演算子をaws:TagKeys 条件で指定する必要があります。ForAnyValue 演算子では、リクエスト内のタグキー 1 つ以上が、ポリシーのタグキーの 1 つと一致する必要があります。ForAllValues 演算子では、リクエスト内のタグキーすべてが、ポリシーのタグキーの 1 つと一致する必要があります。ForAllValues 演算子はリクエストにタグがない場合も true を返しますが、TagResource と UntagResource は、タグが指定されていない場合、失敗します。集合演算子の詳細については、IAM ユーザーガイド複数のキーと値の使用を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyCreateKey", "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*" }, { "Sid": "IAMPolicyViewAllTags", "Effect": "Allow", "Action": "kms:ListResourceTags", "Resource": "arn:aws:kms:*:111122223333:key/*" }, { "Sid": "IAMPolicyManageTags", "Effect": "Allow", "Action": [ "kms:TagResource", "kms:UntagResource" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "ForAllValues:StringEquals": {"aws:TagKeys": "Project"} } } ] }