タグベースのアクセスコントロールのポリシー
アイデンティティベースのポリシーで条件を使用し、タグに基づいて仮想クラスターおよびジョブ実行へのアクセスを制御できます。タグ付けの詳細については、「Amazon EMR on EKS リソースのタグ付け」を参照してください。
次の例では、Amazon EMR on EKS 条件キーで条件演算子を使用するさまざまなシナリオと方法について説明しています。これらの IAM ポリシーステートメントは、デモンストレーションのみを目的としており、本稼働環境で使用しないでください。要件に応じて、アクセス権限を付与または拒否するようにポリシーステートメントを組み合わせる複数の方法があります。IAM ポリシーの計画およびテストの詳細については、「IAM ユーザーガイド」を参照してください。
重要
アクションをタグ付けするための権限を明示的に拒否することは重要な考慮事項です。これにより、ユーザーがリソースをタグ付けして意図せずにアクセス許可を付与することを防ぎます。リソースのタグ付けアクションが拒否されない場合、ユーザーはタグを変更して、タグベースのポリシーの意図を回避できます。タグ付けアクションを拒否するポリシーの例については、「タグを追加および削除するためのアクセス権限を拒否する」を参照してください。
以下の例では、Amazon EMR on EKS 仮想クラスターで許可されるアクションを制御するために使用するアイデンティティベースの許可ポリシーを説明しています。
特定のタグの値があるリソースでのみアクションを許可する
次のポリシーの例では、StringEquals 条件演算子は、dev をタグ department の値 と一致させるように試みます。タグ department が仮想クラスターに追加されていない、またはタグ department に値 dev が含まれていない場合は、ポリシーは適用されず、このアクションはポリシーによって許可されません。アクションを許可するポリシーステートメントが他にない場合は、ユーザーはこの値が含まれたこのタグのある仮想クラスターでのみ作業できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-containers:DescribeVirtualCluster" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "dev" } } } ] }
条件付き演算子を使用して複数のタグ値を指定できます。例えば、department
タグに値 dev
または test
が含まれた仮想クラスターでアクションを許可するには、以下のように、前術の例の条件ブロックを置き換えることができます。
"Condition": { "StringEquals": { "aws:ResourceTag/department": ["dev", "test"] } }
リソースの作成時にタグ付けを要求する
次の例では、仮想クラスターの作成時にタグを適用する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-containers:CreateVirtualCluster" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "dev" } } } ] }
次のポリシーステートメントは、任意の値を含めることができる department
タグがクラスターにある場合にのみ、ユーザーに仮想クラスターの作成を許可します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-containers:CreateVirtualCluster" ], "Resource": "*", "Condition": { "Null": { "aws:RequestTag/department": "false" } } } ] }
タグを追加および削除するためのアクセス権限を拒否する
このポリシーの効果は、department
値が含まれる dev
タグでタグ付けされる仮想クラスターに任意のタグを追加または削除するアクセス許可を、ユーザーに対して拒否することにあります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "emr-containers:TagResource", "emr-containers:UntagResource" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceTag/department": "dev" } } } ] }