IAM 以標籤為基礎存取叢集和EMR筆記本的政策 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

IAM 以標籤為基礎存取叢集和EMR筆記本的政策

您可以使用身分型政策中的條件,根據標籤控制對叢集和EMR筆記本的存取。

如需將標籤新增至叢集的詳細資訊,請參閱標記EMR叢集

下列範例示範使用 Amazon 條件索引鍵EMR的條件運算子的不同案例和方法。這些IAM政策陳述式僅供示範使用,不應用於生產環境。有多種方法可以結合政策陳述式,以根據您的需求授予和拒絕許可。如需規劃和測試IAM政策的詳細資訊,請參閱 IAM 使用者指南

重要

標記動作的明確拒絕許可是項重要的考量條件。這可防止使用者標記資源並將您無意授予的許可授予給他們。如果未拒絕資源的標記動作,使用者可以修改標籤並規避標籤型政策的意圖。

叢集的身分型政策陳述式範例

下列範例示範以身分為基礎的許可政策,用於控制EMR叢集允許的 動作。

重要

Amazon 中的ModifyInstanceGroup動作EMR不需要您指定叢集 ID。因此,根據叢集標籤拒絕此動作需要額外考慮。如需詳細資訊,請參閱在 Amazon 中拒絕 ModifyInstanceGroup 動作 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"] } }

建立叢集時需要標記叢集

如同在前例中,下列政策範例也尋找同樣相符的標籤: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 使用者指南 中的條件運算子以檢查條件索引鍵是否存在。例如,若要僅允許具有department標籤的EMR叢集執行動作,無論其包含的值為何,您可以將先前範例中的條件區塊取代為下列區塊。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,而且其值設定為下列其中一項: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" ] } } } ] }