Policies for tag-based access control - Amazon EMR

Policies for tag-based access control

You can use conditions in your identity-based policy to control access to applications and job runs based on tags.

The following examples demonstrate different scenarios and ways to use condition operators with EMR Serverless condition keys. These IAM policy statements are intended for demonstration purposes only and should not be used in production environments. There are multiple ways to combine policy statements to grant and deny permissions according to your requirements. For more information about planning and testing IAM policies, see the IAM user Guide.

Important

Explicitly denying permission for tagging actions is an important consideration. This prevents users from tagging a resource and thereby granting themselves permissions that you did not intend to grant. If tagging actions for a resource are not denied, a user can modify tags and circumvent the intention of the tag-based policies. For an example of a policy that denies tagging actions, see Deny access to add and remove tags.

The examples below demonstrate identity-based permissions policies that are used to control the actions that are allowed with EMR Serverless applications.

Allow actions only on resources with specific tag values

In the following policy example, the StringEquals condition operator tries to match dev with the value for the tag department. If the tag department hasn't been added to the application, or doesn't contain the value dev, the policy doesn't apply, and the actions aren't allowed by this policy. If no other policy statements allow the actions, the user can only work with applications that have this tag with this value.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:GetApplication" ], "Resource": "*", "Condition": { "StringEquals": { "emr-serverless:ResourceTag/department": "dev" } } } ] }

You can also specify multiple tag values using a condition operator. For example, to allow actions on applications where the department tag contains the value dev or test, you could replace the condition block in the earlier example with the following.

"Condition": { "StringEquals": { "emr-serverless:ResourceTag/department": ["dev", "test"] } }

Require tagging when a resource is created

In the example below, the tag needs to be applied when creating the application.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CreateApplication" ], "Resource": "*", "Condition": { "StringEquals": { "emr-serverless:RequestTag/department": "dev" } } } ] }

The following policy statement allows a user to create an application only if the application has a department tag, which can contain any value.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:CreateApplication" ], "Resource": "*", "Condition": { "Null": { "emr-serverless:RequestTag/department": "false" } } } ] }

Deny access to add and remove tags

This policy prevents a user from adding or removing tags on EMR Serverless applications with a department tag whose value is not dev.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "emr-serverless:TagResource", "emr-serverless:UntagResource" ], "Resource": "*", "Condition": { "StringNotEquals": { "emr-serverless:ResourceTag/department": "dev" } } } ] }