本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对集群和 EMR Notebooks 进行基于标签的访问的 IAM policy
您可以在基于身份的策略中使用条件,以便基于标签控制对集群和 EMR Notebooks 的访问。
有关向集群添加标签的更多信息,请参阅为 EMR 集群添加标签。
以下示例说明将条件运算符与 Amazon EMR 条件键结合使用的不同场景和方法。这些 IAM policy 声明仅用于演示目的,并且不应用于生产环境。可通过多种方式来组合策略声明,以根据要求授予和拒绝权限。有关规划和测试 IAM policy 的更多信息,请参阅 IAM 用户指南。
一个重要注意事项是,应该明确拒绝添加标签操作的权限。这可以防止用户标记资源,从而为其授予您不打算授予的权限。如果您未拒绝资源的标记操作,用户可以修改标签并规避基于标签的策略意图。
适用于集群的基于身份的策略语句示例
以下示例演示基于身份的权限策略,用于控制允许对 EMR 集群执行的操作。
仅允许带特定标签值的集群上的操作
以下示例演示了一个策略,该策略允许用户使用值 dev
根据集群标签 department
执行操作,并允许用户对集群添加相同的标签。最后一个策略示例演示如何拒绝向 EMR 集群添加除该相同标签之外的其它标签的权限。
在以下策略示例中,StringEquals
条件运算符尝试将 dev
与标签 department
的值匹配。如果标签 department
尚未添加到集群或不包含值 dev
,则策略不会应用,并且此策略将不允许这些操作。如果任何其它策略声明允许操作,则用户只能使用标签中包含此值的集群。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt12345678901234",
"Effect": "Allow",
"Action": [
"elasticmapreduce:DescribeCluster",
"elasticmapreduce:ListSteps",
"elasticmapreduce:TerminateJobFlows",
"elasticmapreduce:SetTerminationProtection",
"elasticmapreduce:ListInstances",
"elasticmapreduce:ListInstanceGroups",
"elasticmapreduce:ListBootstrapActions",
"elasticmapreduce:DescribeStep"
],
"Resource": [
"*"
],
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/department": "dev"
}
}
}
]
}
您也可以使用条件运算符指定多个标签值。例如,要运行其 department
标签包含值 dev
或 test
的集群上的所有操作,您可以将上一个示例中的条件块替换为以下内容。
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/department":["dev", "test"]
}
}
创建集群时需要集群标签
在前面的示例中,以下示例策略将查找相同的匹配标签:department
标签的值 dev
。但在此示例中,RequestTag
条件键指定策略在标签创建期间适用。因此,您必须使用与指定值匹配的标签创建集群。
要创建带有标签的集群,您还必须具有 elasticmapredue:AddTags
操作权限。对于此语句,elasticmapreduce:ResourceTag
条件键确保 IAM 仅授予对标签 department
上具有值 dev
的标签资源的访问权限。Resource
元素用于将此权限限制到集群资源。
对于PassRole
资源,您必须在语句中提供 AWS 账户 ID 或别名、服务角色名称以及PassRoleForEMR
语PassRoleForEC2
句中的实例配置文件名称。有关 IAM ARN 格式的更多信息,请参阅 IAM 用户指南 ARNs中的 IAM。
有关匹配的标签键值的更多信息,请参阅《IAM 用户指南》中的 aws:RequestTag/tag-key
。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RunJobFlowExplicitlyWithTag",
"Effect": "Allow",
"Action": [
"elasticmapreduce:RunJobFlow"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "dev"
}
}
},
{
"Sid": "AddTagsForDevClusters",
"Effect": "Allow",
"Action": "elasticmapreduce:AddTags",
"Resource": "arn:aws:elasticmapreduce:*:*:cluster/*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/department": "dev"
}
}
},
{
"Sid": "PassRoleForEMR",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::111122223333
:role/Role-Name-With-Path
",
"Condition": {
"StringLike": {
"iam:PassedToService": "elasticmapreduce.amazonaws.com*"
}
}
},
{
"Sid": "PassRoleForEC2",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::111122223333
:role/Role-Name-With-Path
",
"Condition": {
"StringLike": {
"iam:PassedToService": "ec2.amazonaws.com*"
}
}
}
]
}
允许带有特定标签的集群上的操作,而不管标签值如何
您也可以仅允许具有特定标签的集群上的操作,而不管标签值如何。为此,您可以使用 Null
运算符。有关更多信息,请参阅《IAM 用户指南》中的用于检查条件键是否存在的条件运算符。例如,要仅允许包含 department
标签的 EMR 集群上的操作 (而不管此标签包含的值如何)。您可以将上一示例中的条件块替换为以下内容。Null
运算符可检查 EMR 集群上是否存在标签 department
。如果此标签存在,则 Null
语句的计算结果为 false,这匹配此策略声明中指定的条件并允许相应的操作。
"Condition": {
"Null": {
"elasticmapreduce:ResourceTag/department":"false"
}
}
以下策略声明仅允许用户在集群具有 department
标签 (可包含任何值) 的情况下创建 EMR 集群。对于PassRole
资源,您需要提供 AWS 账户 ID 或别名以及服务角色名称。有关 IAM ARN 格式的更多信息,请参阅 IAM 用户指南 ARNs中的 IAM。
有关指定 null (false) 条件运营的更多信息,请参阅《IAM 用户指南》中的用于检查条件键是否存在的条件运算符。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CreateClusterTagNullCondition",
"Effect": "Allow",
"Action": [
"elasticmapreduce:RunJobFlow"
],
"Resource": [
"*"
],
"Condition": {
"Null": {
"aws:RequestTag/department": "false"
}
}
},
{
"Sid": "AddTagsNullCondition",
"Effect": "Allow",
"Action": "elasticmapreduce:AddTags",
"Resource": "arn:aws:elasticmapreduce:*:*:cluster/*",
"Condition": {
"Null": {
"elasticmapreduce:ResourceTag/department": "false"
}
}
},
{
"Sid": "PassRoleForElasticMapReduce",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::111122223333
:role/Role-Name-With-Path
",
"Condition": {
"StringLike": {
"iam:PassedToService": "elasticmapreduce.amazonaws.com*"
}
}
},
{
"Sid": "PassRoleForEC2",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::111122223333
:role/Role-Name-With-Path
",
"Condition": {
"StringLike": {
"iam:PassedToService": "ec2.amazonaws.com*"
}
}
}
]
}
本部分中的示例 IAM policy 语句展示了使用密钥来限制使用 EMR Notebooks 所允许的操作的常见情形。只要与委托人(用户)关联的其它策略都不允许执行这些操作,条件上下文键就会按指示限制允许的操作。
例
– 仅允许访问用户基于标记创建的 EMR Notebooks下面的示例策略语句附加到角色或用户后,会允许用户仅使用他们创建的 Notebook。此策略语句使用创建 Notebook 时应用的默认标签。
在示例中,StringEquals
条件运算符尝试将表示当前用户用户 ID ({aws:userId}
) 的变量与标签 creatorUserID
的值相匹配。如果标签 creatorUserID
尚未添加到 Notebook 或不包含当前用户 ID 的值,则策略不会应用,并且此策略将不允许这些操作。如果没有任何其它策略语句允许这些操作,则用户只能使用此标签中包含此值的 Notebook。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:DescribeEditor",
"elasticmapreduce:StartEditor",
"elasticmapreduce:StopEditor",
"elasticmapreduce:DeleteEditor",
"elasticmapreduce:OpenEditorInConsole"
],
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/creatorUserId": "${aws:userId}"
}
}
}
]
}
例 – 创建 Notebook 时需要 Notebook 标记
此示例使用 RequestTag
上下文键。仅当用户未更改或删除 creatorUserID
标签时,才允许执行 CreateEditor
操作,此标签是默认添加的。变量 ${aws:userId} 用于指定当前活动用户的用户 ID,此 ID 是标签的默认值。
该策略语句可有助于确保用户不会删除 createUserId
标签或更改其值。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:CreateEditor"
],
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}"
}
}
}
]
}
此示例要求用户使用键字符串为 dept
且值设置为以下之一的标签创建集群:datascience
、analytics
、operations
。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:CreateEditor"
],
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"elasticmapreduce:RequestTag/dept": [
"datascience",
"analytics",
"operations"
]
}
}
}
]
}
例 – 将 Notebook 创建限定到已标记的集群并需要 Notebook 标签
仅当使用键字符串 owner
设置为一个指定值的标签创建 Notebook 时,此示例才允许创建 Notebook。此外,仅当集群具有键字符串 department
设置为一个指定值的标签时,才能创建 Notebook。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:CreateEditor"
],
"Effect": "Allow",
"Resource": "*",
"Condition": {
"StringEquals": {
"elasticmapreduce:RequestTag/owner": [
"owner1",
"owner2",
"owner3"
],
"elasticmapreduce:ResourceTag/department": [
"dep1",
"dep3"
]
}
}
}
]
}
例 – 将能力限定为启动基于标签的 Notebook
此示例将启动 Notebook 的能力限定为那些具有键字符串 owner
设置为一个指定值的标签的 Notebook。因为 Resource
元素仅用于指定 editor
,所以此条件不适用于集群,并且它不需要标记。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:StartEditor"
],
"Effect": "Allow",
"Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/owner": [
"owner1",
"owner2"
]
}
}
}
]
}
此示例类似于上一示例。但是,限制仅适用于已标记的集群,不适用于 Notebook。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:StartEditor"
],
"Effect": "Allow",
"Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/department": [
"dep1",
"dep3"
]
}
}
}
]
}
此示例使用一组不同的 Notebook 和集群标签。仅当满足以下条件时,它才允许启动 Notebook:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:StartEditor"
],
"Effect": "Allow",
"Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/owner": [
"user1",
"user2"
]
}
}
},
{
"Action": [
"elasticmapreduce:StartEditor"
],
"Effect": "Allow",
"Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/department": [
"datascience",
"analytics"
]
}
}
}
]
}
例 – 将能力限定为打开基于标签的 Notebook 编辑器
仅当满足以下条件时,此示例才允许打开 Notebook 编辑器:
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"elasticmapreduce:OpenEditorInConsole"
],
"Effect": "Allow",
"Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/owner": [
"user1",
"user2"
]
}
}
},
{
"Action": [
"elasticmapreduce:OpenEditorInConsole"
],
"Effect": "Allow",
"Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*",
"Condition": {
"StringEquals": {
"elasticmapreduce:ResourceTag/department": [
"datascience",
"analytics"
]
}
}
}
]
}