Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon EMR 基于身份的策略示例

默认情况下,IAM 用户和角色没有创建或修改 Amazon EMR 资源的权限。它们还无法使用 AWS 管理控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,为用户和角色授予权限,以便对他们所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅 IAM 用户指南 中的 JSON 选项卡上的创建策略

集群的内联 IAM 策略和基于标签的 EMR 笔记本控制

您可以在基于身份的策略中使用条件,以便基于标签控制对集群和 EMR 笔记本的访问。

有关向集群添加标签的更多信息,请参阅为 EMR 集群添加标签。有关这些条件键的更多信息,请参阅条件键

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

适用于集群的基于身份的策略语句示例

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

仅允许带特定标签值的集群上的操作

以下示例演示了一个策略,该策略允许用户使用值 dev 根据集群标签 department 执行操作,并允许用户对集群添加相同的标签。最后一个策略示例演示如何拒绝向 EMR 集群添加除该相同标签之外的其他标签的权限。

重要

一个重要注意事项是,应该明确拒绝添加标签操作的权限。这将阻止用户通过您不打算授权的集群标签自行授予权限。如果最后一个示例中所示的操作未被拒绝,则用户可以在任何集群中添加和删除选定的标签并规避上述策略的意图。

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

{ "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 标签包含值 devtest 的集群上的所有操作,您可以将上一个示例中的条件块替换为以下内容。

"Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department":["dev", "test"] } }

在上一个示例中,以下示例策略将查找相同的匹配标签:dev 标签的值 department。但在本示例中,RequestTag 条件键指定在标签创建期间应用策略,因此用户必须创建匹配指定值的标签。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1479334524000", "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/department": "dev" } } } ] }

在以下示例中,允许添加和删除标签的 EMR 操作与指定前面实例中所示的 StringNotEquals 标签的 dev 运算符一起使用。此策略旨在拒绝用户在添加了 department 标签 (包含 dev 值) 的 EMR 集群中添加或删除任何标签的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "elasticmapreduce:AddTags", "elasticmapreduce:RemoveTags" ], "Condition": { "StringNotEquals": { "elasticmapreduce:ResourceTag/department": "dev" } }, "Resource": [ "*" ] } ] }

允许带有特定标签的集群上的操作,而不管标签值如何

您也可以仅允许具有特定标签的集群上的操作,而不管标签值如何。为此,您可以使用 Null 运算符。有关更多信息,请参阅 IAM 用户指南中的用于检查条件密钥是否存在的条件运算符。例如,要仅允许包含 department 标签的 EMR 集群上的操作 (而不管此标签包含的值如何)。您可以将上一示例中的条件块替换为以下内容。Null 运算符可检查 EMR 集群上是否存在标签 department。如果此标签存在,则 Null 语句的计算结果为 false,这匹配此策略声明中指定的条件并允许相应的操作。

"Condition": { "Null": { "elasticmapreduce:ResourceTag/department":"false" } }

以下策略声明仅允许用户在集群具有 department 标签 (可包含任何值) 的情况下创建 EMR 集群。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Condition": { "Null": { "elasticmapreduce:RequestTag/department": "false" } }, "Effect": "Allow", "Resource": [ "*" ] } ] }

要求用户在创建集群时添加标签

以下策略声明仅允许用户在集群将具有 department 标签 (创建时包含值 dev) 的情况下创建 EMR 集群。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/department": "dev" } }, "Effect": "Allow", "Resource": [ "*" ] } ] }

适用于笔记本的基于身份的策略语句示例

本部分中的示例 IAM 策略语句展示了使用键来限制使用 EMR 笔记本 所允许的操作的常见情形。只要与委托人(用户)关联的其他策略都不允许执行这些操作,条件上下文键就会按指示限制允许的操作。

– 仅允许访问用户基于标记创建的笔记本

下面的示例策略语句附加到角色或用户后,会允许 IAM 用户仅使用他们创建的笔记本。此策略语句使用创建笔记本时应用的默认标签。

在示例中,StringEquals 条件运算符尝试将表示当前用户 IAM 用户 ID ({aws:userId}) 的变量与标签 creatorUserID 的值相匹配。如果标签 creatorUserID 尚未添加到笔记本或不包含当前用户 ID 的值,则策略不会应用,并且此策略将不允许这些操作。如果没有任何其他策略语句允许这些操作,则用户只能使用此标签中包含此值的笔记本。

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

例 – 创建笔记本时需要笔记本标记

此示例使用 RequestTag 上下文键。仅当用户未更改或删除 creatorUserID 标签时,才允许执行 CreateEditor 操作,此标签是默认添加的。变量 ${aws:userId} 用于指定当前活动用户的用户 ID,此 ID 是标签的默认值。

该策略语句可有助于确保用户不会删除 createUserId 标签或更改其值。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}" } } } ] }

此示例要求用户使用键字符串为 dept 且值设置为以下之一的标签创建集群:datascienceanalyticsoperations

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/dept": [ "datascience", "analytics", "operations" ] } } } ] }

例 – 将笔记本创建限定到已标记的集群并需要笔记本标签

仅当使用键字符串 owner 设置为一个指定值的标签创建笔记本时,此示例才允许创建笔记本。此外,仅当集群具有键字符串 department 设置为一个指定值的标签时,才能创建笔记本。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/owner": [ "owner1", "owner2", "owner3" ], "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }

例 – 将能力限定为启动基于标签的笔记本

此示例将启动笔记本的能力限定为那些具有键字符串 owner 设置为一个指定值的标签的笔记本。因为 Resource 元素仅用于指定 editor,所以此条件不适用于集群,并且它不需要标记。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "owner1", "owner2" ] } } } ] }

此示例类似于上一示例。但是,限制仅适用于已标记的集群,不适用于笔记本。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }

此示例使用一组不同的笔记本和集群标签。仅当满足以下条件时,它才允许启动笔记本:

  • 笔记本具有键字符串 owner 设置为任意指定值的标签

    — 和 —

  • 集群具有键字符串 department 设置为任意指定值的标签

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

例 – 将能力限定为打开基于标签的笔记本编辑器

仅当满足以下条件时,此示例才允许打开笔记本编辑器:

  • 笔记本具有键字符串 owner 设置为任意指定值的标签。

    — 和 —

  • 集群具有键字符串 department 设置为任意指定值的标签。

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