基于标签的访问控制策略 - Amazon EMR

基于标签的访问控制策略

您可以在基于身份的策略中使用条件,以便根据标签控制对虚拟集群和任务运行的访问。有关标记的更多信息,请参阅为您的 Amazon EMR on EKS 资源添加标签

以下示例说明将条件运算符与 Amazon EMR on EKS 条件键结合使用的不同场景和方法。这些 IAM policy 声明仅用于演示目的,并且不应用于生产环境。可通过多种方式来组合策略声明,以根据要求授予和拒绝权限。有关规划和测试 IAM policy 的更多信息,请参阅 IAM 用户指南

重要

一个重要注意事项是,应该明确拒绝添加标签操作的权限。这可以防止用户标记资源,从而为其授予您不打算授予的权限。如果资源的标记操作未被拒绝,用户可以修改标记并规避基于标签的策略意图。有关拒绝添加标签操作的策略示例,请参阅拒绝添加和删除标签的访问权限

以下示例演示基于身份的权限策略,用于控制允许对 Amazon EMR on EKS 虚拟集群执行的操作。

仅允许带特定标签值资源上的操作

在以下策略示例中,StringEquals 条件运算符尝试将 dev 与标签部门的值匹配。如果标签部分尚未添加到虚拟集群或不包含值 dev,则策略不会应用,并且此策略将不允许这些操作。如果任何其它策略声明允许操作,则用户只能使用标签中包含此值的虚拟集群。

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

您也可以使用条件运算符指定多个标签值。例如,要运行其 department 标签包含值 devtest 的虚拟集群上的操作,您可以将上一个示例中的条件数据块替换为以下内容。

"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" } } } ] }