

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

# 叢集和 EMR Notebooks 的標籤型存取的 IAM 政策
<a name="emr-fine-grained-cluster-access"></a>

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

如需將標籤新增至叢集的詳細資訊，請參閱[標記 EMR 叢集](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html)。

下列範例示範以 Amazon EMR 條件金鑰使用條件運算子的不同情況和方式。這些 IAM 政策陳述式僅作示範用途，不應用於生產環境。有多種方法可以結合政策陳述式，以根據您的需求授予和拒絕許可。如需有關規劃與測試 IAM 政策的詳細資訊，請參閱 [IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)。

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

## 叢集的身分型政策陳述式範例
<a name="emr-cluster-access-resourcetag"></a>

下列範例示範身分型許可政策，這些政策用於控制允許與 EMR 叢集搭配使用的動作。

**重要**  
Amazon EMR 中的 `ModifyInstanceGroup` 動作不需要您指定叢集 ID。因此，根據叢集標籤拒絕此動作需要額外考慮。如需詳細資訊，請參閱[在 Amazon EMR 中拒絕 ModifyInstanceGroup 動作](emr-cluster-deny-modifyinstancegroup.md)。

**Topics**
+ [僅允許對具有特定標籤值的叢集執行動作](#emr-cluster-access-example-tagvalue)
+ [建立叢集時需要標記叢集](#emr-cluster-access-example-require-tagging)
+ [不論標籤值為何，允許對具有特定標籤的叢集執行動作](#emr-cluster-access-example-tag)

### 僅允許對具有特定標籤值的叢集執行動作
<a name="emr-cluster-access-example-tagvalue"></a>

下列範例示範一個政策，可讓使用者根據具有 `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"]
              }
            }
```

### 建立叢集時需要標記叢集
<a name="emr-cluster-access-example-require-tagging"></a>

如同在前例中，下列政策範例也尋找同樣相符的標籤：`department` 標籤的 `dev` 值。但在此範例中，`RequestTag` 條件金鑰會指定此政策在標籤建立期間套用。因此，您必須建立具有與指定值相符的標籤的叢集。

若要建立具有標籤的叢集，您還必須具有 `elasticmapredue:AddTags` 動作的許可。對於此陳述式，`elasticmapreduce:ResourceTag` 條件金鑰可確保 IAM 僅授予對 `department` 標籤上值為 `dev` 的標籤資源的存取權。`Resource` 元素用於將此許可限制為叢集資源。

對於 `PassRole` 資源，您必須提供 AWS 帳戶 ID 或別名、`PassRoleForEMR`陳述式中的服務角色名稱，以及`PassRoleForEC2`陳述式中的執行個體描述檔名稱。如需有關 IAM ARN 格式的詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

如需有關相符標籤金鑰值的詳細資訊，請參閱《IAM 使用者指南》**中的 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)。

------
#### [ 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::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "elasticmapreduce.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    }
  ]
}
```

------

### 不論標籤值為何，允許對具有特定標籤的叢集執行動作
<a name="emr-cluster-access-example-tag"></a>

您也可以只在具有特定標籤的叢集上允許動作，無論標籤的值為何。若要執行此操作，您可以使用 `Null` 運算子。如需詳細資訊，請參閱《IAM 使用者指南》**中的[用於檢查條件金鑰是否存在的條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_Null)。例如，若只在具有 `department` 標籤的 EMR 叢集上允許動作，無論其包含的值為何，您可以用以下內容取代先前範例中的條件區塊。`Null` 運算子會在 EMR 叢集上尋找 `department` 標籤的存在。如果標籤存在，`Null` 陳述式會判斷為 false，符合此政策陳述式中指定的條件，並允許適當的動作。

```
1. "Condition": {
2.   "Null": {
3.     "elasticmapreduce:ResourceTag/department":"false"
4.   }
5. }
```

以下政策陳述式可讓使用者只在叢集具有可以包含任何值的 `department` 標籤時，才能建立 EMR 叢集。針對 `PassRole` 資源，您需要提供 AWS 帳戶 ID 或別名，以及服務角色名稱。如需有關 IAM ARN 格式的詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

如需有關指定 null ("false") 條件運算子的詳細資訊，請參閱《IAM 使用者指南》**中的[用於檢查條件金鑰是否存在的條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)。

------
#### [ 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::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "elasticmapreduce.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    }
  ]
}
```

------

## EMR Notebooks 的身分型政策陳述式範例
<a name="emr-managed-notebooks-tags-examples"></a>

本章節中的 IAM 政策陳述式範例示範了常見的案例，利用金鑰來限制使用 EMR Notebooks 時的允許動作。只要沒有其他的政策和允許動作的委託人 (使用者) 具有關聯，條件上下文索引鍵就會如範例所示，限制允許的動作。

**Example – 僅允許存取使用者根據標記建立的 EMR Notebooks**  
下列政策陳述式範例在附接至角色或使用者時，會允許使用者只使用自己已經建立的筆記本。此政策陳述式會使用在筆記本建立時套用的預設標籤。  
在此範例中，`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}"
        }
      },
      "Sid": "AllowELASTICMAPREDUCEDescribeeditor"
    }
  ]
}
```

**Example – 在筆記本建立時需要標記筆記本**  
在此範例中使用了 `RequestTag` 上下文索引鍵。只有在使用者未變更或刪除預設新增的 `creatorUserID` 標籤時，才會允許 `CreateEditor` 動作。變數 \$1\$1aws:userId\$1 會指定目前有效使用者的使用者 ID，這是標籤的預設值。  
此政策陳述式可用來協助確保使用者不會移除 `createUserId` 標籤或變更其值。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:CreateEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}"
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```
此範例要求使用者建立叢集，此叢集的標籤包含索引鍵字串 `dept`，而且其值設定為下列其中一項：`datascience`、`analytics`、`operations`。    
****  

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

**Example – 限制只有加上標籤的叢集才能建立筆記本，而且需要筆記本標籤**  
只有當筆記本在建立時使用標籤，而此標籤包含索引鍵字串 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```

**Example – 根據標籤來限制啟動筆記本的能力**  
此範例會設下限制，只有當筆記本的標籤包含索引鍵字串 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditor"
    }
  ]
}
```
此範例與上述的範例類似。不過，限制僅適用於加上標籤的叢集，而不適用於筆記本。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "dep1",
            "dep3"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditor"
    }
  ]
}
```
此範例使用不同的一組筆記本和叢集標籤。只有在下列的情況中，此範例才會允許筆記本啟動：  
+ 筆記本的標籤包含索引鍵字串 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditorByOwner"
    },
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "datascience",
            "analytics"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditorByDepartment"
    }
  ]
}
```

**Example – 根據標籤來限制開啟筆記本編輯器的能力**  
只有在下列的情況中，此範例才會允許開啟筆記本編輯器：  
+ 筆記本的標籤包含索引鍵字串 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEOpeneditorconsoleByOwner"
    },
    {
      "Action": [
        "elasticmapreduce:OpenEditorInConsole"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "datascience",
            "analytics"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEOpeneditorconsoleByDepartment"
    }
  ]
}
```