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