本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
IAM 以標籤為基礎存取叢集和EMR筆記本的政策
您可以使用身分型政策中的條件,根據標籤控制對叢集和EMR筆記本的存取。
如需將標籤新增至叢集的詳細資訊,請參閱標記EMR叢集 。
下列範例示範使用 Amazon 條件索引鍵EMR的條件運算子的不同案例和方法。這些IAM政策陳述式僅供示範使用,不應用於生產環境。有多種方法可以結合政策陳述式,以根據您的需求授予和拒絕許可。如需規劃和測試IAM政策的詳細資訊,請參閱 IAM 使用者指南 。
重要
標記動作的明確拒絕許可是項重要的考量條件。這可防止使用者標記資源並將您無意授予的許可授予給他們。如果未拒絕資源的標記動作,使用者可以修改標籤並規避標籤型政策的意圖。
叢集的身分型政策陳述式範例
下列範例示範以身分為基礎的許可政策,用於控制EMR叢集允許的 動作。
重要
Amazon 中的ModifyInstanceGroup
動作EMR不需要您指定叢集 ID。因此,根據叢集標籤拒絕此動作需要額外考慮。如需詳細資訊,請參閱在 Amazon 中拒絕 ModifyInstanceGroup 動作 EMR。
僅允許對具有特定標籤值的叢集執行動作
下列範例示範一個政策,可讓使用者根據具有
值的叢集標籤 dev
執行動作,也可讓使用者使用相同標籤標記叢集。最終政策範例示範如何拒絕權限,以使用相同標籤以外的任何項目標記EMR叢集。department
在以下政策範例中,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
或 dev
值的叢集上允許所有動作,您可以用下列內容取代先前範例中的條件區塊。test
"Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department":["dev", "test"] } }
建立叢集時需要標記叢集
如同在前例中,下列政策範例也尋找同樣相符的標籤:
標籤的 department
值。但在此範例中,dev
RequestTag
條件金鑰會指定此政策在標籤建立期間套用。因此,您必須建立具有與指定值相符的標籤的叢集。
若要建立具有標籤的叢集,您還必須具有 elasticmapredue:AddTags
動作的許可。對於此陳述式,elasticmapreduce:ResourceTag
條件索引鍵可確保 IAM僅授予具有標籤
上值的dev
標籤資源存取權。department
Resource
元素用於將此許可限制為叢集資源。
對於 PassRole
資源,您必須提供 AWS 帳戶 ID 或別名、PassRoleForEMR
陳述式中的服務角色名稱,以及PassRoleForEC2
陳述式中的執行個體設定檔名稱。如需有關 IAM ARN 格式的詳細資訊,請參閱 使用者指南 IAM ARNs 中的 。 IAM
如需比對標籤鍵值的詳細資訊,請參閱 使用者指南aws:RequestTag/tag-key
中的 。 IAM
{ "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::
AccountId
:role/Role-Name-With-Path
", "Condition": { "StringLike": { "iam:PassedToService": "elasticmapreduce.amazonaws.com*" } } }, { "Sid": "PassRoleForEC2", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId
:role/Role-Name-With-Path
", "Condition": { "StringLike": { "iam:PassedToService": "ec2.amazonaws.com*" } } } ] }
不論標籤值為何,允許對具有特定標籤的叢集執行動作
您也可以只在具有特定標籤的叢集上允許動作,無論標籤的值為何。若要執行此操作,您可以使用 Null
運算子。如需詳細資訊,請參閱 IAM 使用者指南 中的條件運算子以檢查條件索引鍵是否存在。例如,若要僅允許具有
標籤的EMR叢集執行動作,無論其包含的值為何,您可以將先前範例中的條件區塊取代為下列區塊。department
Null
運算子會尋找EMR叢集
上是否存在標籤。如果標籤存在,department
Null
陳述式會判斷為 false,符合此政策陳述式中指定的條件,並允許適當的動作。
"Condition": { "Null": { "elasticmapreduce:ResourceTag/department":"false" } }
下列政策陳述式僅允許EMR叢集具有標籤時,才允許使用者建立叢集,該
標籤可包含任何值。針對 department
PassRole
資源,您需要提供 AWS 帳戶 ID 或別名,以及服務角色名稱。如需有關 IAM ARN 格式的詳細資訊,請參閱 使用者指南 IAM ARNs 中的 。 IAM
如需指定 null ("false") 條件運算子的詳細資訊,請參閱 IAM 使用者指南 中的條件運算子以檢查條件索引鍵是否存在。
{ "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::
AccountId
:role/Role-Name-With-Path
", "Condition": { "StringLike": { "iam:PassedToService": "elasticmapreduce.amazonaws.com*" } } }, { "Sid": "PassRoleForEC2", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId
:role/Role-Name-With-Path
", "Condition": { "StringLike": { "iam:PassedToService": "ec2.amazonaws.com*" } } } ] }
EMR 筆記本的身分型政策陳述式範例
本節中的IAM政策陳述式範例示範了使用 金鑰限制使用EMR筆記本所允許動作的常見案例。只要沒有其他的政策和允許動作的委託人 (使用者) 具有關聯,條件上下文索引鍵就會如範例所示,限制允許的動作。
範例 – 僅允許存取使用者根據標記建立的EMR筆記本
下列政策陳述式範例在附接至角色或使用者時,會允許使用者只使用自己已經建立的筆記本。此政策陳述式會使用在筆記本建立時套用的預設標籤。
在此範例中,StringEquals
條件運算子嘗試將表示目前使用者的使用者 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,這是標籤的預設值。
此政策陳述式可用來協助確保使用者不會移除 createUserId
標籤或變更其值。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}" } } } ] }
此範例要求使用者建立叢集,此叢集的標籤包含索引鍵字串 dept
,而且其值設定為下列其中一項:datascience
、analytics
、operations
。
{ "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" ] } } } ] }