リソースのタグ付けの SCP の例 - AWS Organizations

リソースのタグ付けの SCP の例

作成される特定のリソースにタグを要求する

次の SCP では、リクエストに指定されたタグが含まれていない場合、影響を受けるアカウントの IAM ユーザーとロールが特定のリソースタイプを作成できないようにします。

重要

お客様の環境で使用するサービスを使用して、拒否ベースのポリシーを必ずテストしてください。以下の例は、タグ付けされていないシークレットを作成したり、タグ付けされていない Amazon EC2 インスタンスを実行したりする単純なブロックであり、例外は含まれていません。

次のポリシーの例は、そのままでは AWS CloudFormation との互換性がありません。これは、そのサービスがシークレットを作成し、それを 2 つの個別のステップとしてタグ付けするためです。このポリシーの例では、AWS CloudFormation がスタックの一部としてシークレットを作成することを効果的にブロックします。それらのアクションは、短期間であっても要求されたとおりにタグ付けされていないシークレットとなるためです。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCreateSecretWithNoProjectTag", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/Project": "true" } } }, { "Sid": "DenyRunInstanceWithNoProjectTag", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Null": { "aws:RequestTag/Project": "true" } } }, { "Sid": "DenyCreateSecretWithNoCostCenterTag", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/CostCenter": "true" } } }, { "Sid": "DenyRunInstanceWithNoCostCenterTag", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Null": { "aws:RequestTag/CostCenter": "true" } } } ] }

AWS Organizations SCP および IAM アクセス許可ポリシーをサポートするすべてのサービスとアクションのリストについては、IAM ユーザーガイドの「AWS のサービスのアクション、リソース、および条件キー」を参照してください。

許可されたプリンシパル以外のタグが変更されないようにする

次の SCP では、ポリシーによって、許可されたプリンシパルのみがリソースにアタッチされたタグを変更できるようにする方法を示します。これは、属性ベースのアクセスコントロール (ABAC) を AWS クラウドセキュリティ戦略の一環として使用する際の重要なポイントです。このポリシーでは、発信者は、認可タグ (この例では access-project)がリクエストを行ったユーザーまたはロールに付けられた認可タグと完全に一致するリソースのみでタグを修正することができます。また、このポリシーでは、許可されたユーザーが、認可に使用されるタグのを変更することを防ぎます。呼び出し元のプリンシパルが変更を行うには、認可タグが必要になります。

このポリシーは、権限のないユーザーによるタグの変更のみをブロックします。このポリシーでブロックされずに認可されたユーザーには、関連する API のタグ付けの際に Allow アクセス許可を明示的に付与する別の IAM ポリシーが必要です。例えば、ユーザーが管理者ポリシーで Allow */* (すべてのサービスとすべてのオペレーションを許可) を設定している場合、この組み合わせによって、管理者ユーザーは、ユーザーのプリンシパルにアタッチされた認可タグと一致する認可タグの値を含むタグのみの変更が許可されることになります。これは、このポリシーの明示的な Deny が、管理者ポリシーの明示的な Allow よりも優先されるためです。

重要

これはポリシーによる完全な解決策ではないため、ここで説明したとおりに使用することはできません。この例は、ABAC 戦略の一部を説明することを目的としているため、本番環境向けにカスタマイズし、テストする必要があります。

その仕組みの詳細な分析を含む完全なポリシーについては、「AWS Organizations のサービスコントロールポリシーを使用して、認可に使用されるリソースのタグを保護する」を参照してください。

お客様の環境で使用するサービスを使用して、拒否ベースのポリシーを必ずテストしてください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyModifyTagsIfResAuthzTagAndPrinTagDontMatch", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "ec2:ResourceTag/access-project": "${aws:PrincipalTag/access-project}", "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "Null": { "ec2:ResourceTag/access-project": false } } }, { "Sid": "DenyModifyResAuthzTagIfPrinTagDontMatch", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "aws:RequestTag/access-project": "${aws:PrincipalTag/access-project}", "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "access-project" ] } } }, { "Sid": "DenyModifyTagsIfPrinTagNotExists", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "Null": { "aws:PrincipalTag/access-project": true } } } ] }