

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

# 管理員指南
<a name="studio-emr-admin-guide"></a>

本節提供允許 Studio 或 Studio Classic 與 Amazon EMR 叢集之間通訊的先決條件和聯網指示。它涵蓋不同的部署案例 - 當 Studio 和 Amazon EMR 在私有 Amazon VPC 內佈建而沒有公有網際網路存取時，以及它們需要透過網際網路通訊時。

它會逐步解說管理員如何使用 AWS Service Catalog 為 Studio 提供 CloudFormation 範本，讓資料科學家直接從 Studio 中探索和自行佈建 Amazon EMR 叢集。這涉及建立 Service Catalog 產品組合、授予必要許可、參考 Amazon EMR 範本，以及將這些範本參數化，以在叢集建立期間啟用自訂。

最後，它提供從 Studio 和 Studio Classic 設定現有執行中 Amazon EMR 叢集可探索性的指引，涵蓋單一帳戶和跨帳戶存取案例，以及必要的 IAM 許可。

**Topics**
+ [在 Service Catalog 中設定 Amazon EMR CloudFormation 範本](studio-notebooks-set-up-emr-templates.md)
+ [設定列出 Amazon EMR 叢集](studio-notebooks-configure-discoverability-emr-cluster.md)
+ [在 Studio 中設定用於 Amazon EMR 叢集存取的 IAM 執行時期角色](studio-notebooks-emr-cluster-rbac.md)
+ [參考政策](studio-set-up-emr-permissions-reference.md)

# 在 Service Catalog 中設定 Amazon EMR CloudFormation 範本
<a name="studio-notebooks-set-up-emr-templates"></a>

本主題假設管理員熟悉 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)、[產品組合和產品 AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)，以及 [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)。

為了簡化從 Studio 建立 Amazon EMR 叢集的操作，管理員可以將 [Amazon EMR CloudFormation 範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)註冊為 [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) 產品組合中的產品。為了讓資料科學家可以使用範本，他們必須將產品組合與 Studio 或 Studio Classic 中使用的 SageMaker AI 執行角色建立關聯。最後，若要允許使用者探索範本、佈建叢集，以及從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集，管理員需要設定適當的存取許可。

Amazon EMR CloudFormation 範本可讓最終使用者自訂各種叢集層面。例如，管理員可以定義核准的執行個體類型清單，使用者可以在建立叢集時從中選擇執行個體類型。

下列指示會使用端對端 [CloudFormation 堆疊](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started)來設定 Studio 或 Studio Classic 網域、使用者設定檔、Service Catalog 產品組合，並填入 Amazon EMR 啟動範本。下列步驟強調了管理員必須在其端對端堆疊中套用的特定設定，這些設定可讓 Studio 或 Studio Classic 存取 Service Catalog 產品和佈建 Amazon EMR 叢集。

**注意**  
GitHub 儲存庫 [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) 包含端對端 CloudFormation 堆疊，其中部署必要的 IAM 角色、聯網、SageMaker 網域、使用者設定檔、Service Catalog 產品組合，以及新增 Amazon EMR 啟動 CloudFormation 範本。這些範本會在 Studio 或 Studio Classic 與 Amazon EMR 叢集之間提供不同的驗證選項。在這些範例中，父系 CloudFormation 堆疊會將 SageMaker AI VPC、安全群組及子網路參數傳遞至 Amazon EMR 叢集範本。  
[sagemaker-studio-emr/cloudformation/emr\$1servicecatalog\$1templates](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/emr_servicecatalog_templates) 儲存庫包含各種範例 Amazon EMR CloudFormation 啟動範本，包括單一帳戶和跨帳戶部署的選項。  
如需您可以用來連線至 Amazon EMR 叢集之驗證方法的詳細資訊，請參閱[從 SageMaker Studio 或 Studio Classic 連線至 Amazon EMR 叢集](connect-emr-clusters.md)。

若要讓資料科學家探索 Amazon EMR CloudFormation 範本，並從 Studio 或 Studio Classic 佈建叢集，請遵循下列步驟。

## 步驟 0：檢查您的聯網並準備您的 CloudFormation 堆疊
<a name="studio-set-up-emr-prereq"></a>

開始之前：
+ 確定您已檢閱[設定 Amazon EMR 叢集的網路存取](studio-notebooks-emr-networking.md)中的聯網和安全要求。
+ 您必須具有一個現有的端對端 CloudFormation 堆疊，支援您選擇的驗證方法。您可以在 [aws-samples/sagemaker-studio-emr](https://github.com/aws-samples/sagemaker-studio-emr/tree/main/cloudformation/getting_started) 中找到這類 CloudFormation 範本的範例。下列步驟會醒目提示端對端堆疊中的特定組態，讓您可在 Studio 或 Studio Classic 內使用 Amazon EMR 範本。

## 步驟 1：將您的 Service Catalog 產品組合與 SageMaker AI 建立關聯
<a name="studio-set-up-emr-service-catalog-portfolio"></a>

**在您的 Service Catalog 產品組合中**，將您的產品組合 ID 與存取您叢集的 SageMaker AI 執行角色建立關聯。

若要這麼做，請將以下區段 (此處為 YAML 格式) 新增至您的堆疊。這會授予 SageMaker AI 執行角色存取指定 Service Catalog 產品組合的權限，其中包含 Amazon EMR 範本等產品。它允許 SageMaker AI 擔任的角色啟動這些產品。

 將 *SageMakerExecutionRole.Arn* 和 *SageMakerStudioEMRProductPortfolio.ID* 取代為其實際值。

```
SageMakerStudioEMRProductPortfolioPrincipalAssociation:
    Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation
    Properties:
      PrincipalARN: SageMakerExecutionRole.Arn
      PortfolioId: SageMakerStudioEMRProductPortfolio.ID
      PrincipalType: IAM
```

如需必要 IAM 許可集的詳細資訊，請參閱[許可](#studio-emr-permissions)一節。

## 步驟 2：參考 Service Catalog 產品中的 Amazon EMR 範本
<a name="studio-set-up-emr-service-catalog-product"></a>

**在產品組合的 Service Catalog 產品**中，參考 Amazon EMR 範本資源，並確保其在 Studio 或 Studio Classic 中的可見性。

若要這樣做，請參考 Service Catalog 產品定義中的 Amazon EMR 範本資源，然後新增下列設定為值 `"true"` 的標籤金鑰 `"sagemaker:studio-visibility:emr"` (請參閱 YAML 格式的範例)。

在 Service Catalog 產品定義中，透過 URL 參考叢集的 CloudFormation 範本。設定為 true 的其他標籤可確保 Studio 或 Studio Classic 中 Amazon EMR 範本的可見性。

**注意**  
範例中所提供 URL 參考的 Amazon EMR 範本在啟動時不會強制執行任何驗證要求。此選項用於示範和學習目的。因此不建議用於實際執行環境中。

```
SMStudioEMRNoAuthProduct:
    Type: AWS::ServiceCatalog::CloudFormationProduct
    Properties:
      Owner: AWS
      Name: SageMaker Studio Domain No Auth EMR
      ProvisioningArtifactParameters:
        - Name: SageMaker Studio Domain No Auth EMR
          Description: Provisions a SageMaker domain and No Auth EMR Cluster
          Info:
            LoadTemplateFromURL: Link to your CloudFormation template. For example, https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/astra-m4-sagemaker/end-to-end/CFN-EMR-NoStudioNoAuthTemplate-v3.yaml
      Tags:
        - Key: "sagemaker:studio-visibility:emr"
          Value: "true"
```

## 步驟 3：參數化 Amazon EMR CloudFormation 範本
<a name="studio-set-up-emr-cfn-template"></a>

**用來在 Service Catalog 產品內定義 Amazon EMR 叢集的 CloudFormation 範本**可讓管理員指定可設定的參數。管理員可以在範本的 `Parameters` 區段中定義這些參數的 `Default` 值和 `AllowedValues` 範圍。在叢集啟動過程中，資料科學家可以提供自訂輸入，或從這些預先定義的選項中進行選擇，以自訂其 Amazon EMR 叢集的某些層面。

下列範例說明管理員在建立 Amazon EMR 範本時可設定的其他輸入參數。

```
"Parameters": {
    "EmrClusterName": {
      "Type": "String",
      "Description": "EMR cluster Name."
    },
    "MasterInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR master node.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge"
      ]
    },
    "CoreInstanceType": {
      "Type": "String",
      "Description": "Instance type of the EMR core nodes.",
      "Default": "m5.xlarge",
      "AllowedValues": [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m3.medium",
        "m3.large",
        "m3.xlarge",
        "m3.2xlarge"
      ]
    },
    "CoreInstanceCount": {
      "Type": "String",
      "Description": "Number of core instances in the EMR cluster.",
      "Default": "2",
      "AllowedValues": [
        "2",
        "5",
        "10"
      ]
    },
    "EmrReleaseVersion": {
      "Type": "String",
      "Description": "The release version of EMR to launch.",
      "Default": "emr-5.33.1",
      "AllowedValues": [
        "emr-5.33.1",
        "emr-6.4.0"
      ]
    }
  }
```

在管理員使 Amazon EMR CloudFormation 範本可在 Studio 內使用之後，資料科學家可以使用它們自行佈建 Amazon EMR 叢集。範本中定義的 `Parameters` 區段會轉換為 Studio 或 Studio Classic 內叢集建立表單上的輸入欄位。對於每個參數，資料科學家可以將自訂值輸入至輸入方塊，或從下拉式功能表中列出的預先定義選項中選取，該值對應至範本中指定的 `AllowedValues`。

下圖顯示了從 CloudFormation Amazon EMR 範本組合的動態表單，以在 Studio 或 Studio Classic 中建立 Amazon EMR 叢集。

![\[從 CloudFormation Amazon EMR 範本組合的動態表單圖，該表單可從 Studio 或 Studio Classic 中建立 Amazon EMR 叢集。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-cluster-creation.png)


造訪 [從 Studio 或 Studio Classic 啟動 Amazon EMR 叢集](studio-notebooks-launch-emr-cluster-from-template.md) 以了解如何使用這些 Amazon EMR 範本從 Studio 或 Studio Classic 啟動叢集。

## 步驟 4：設定許可，以啟用從 Studio 列出和啟動 Amazon EMR 叢集
<a name="studio-emr-permissions"></a>

最後，連接必要的 IAM 許可，以啟用從 Studio 或 Studio Classic 列出現有的執行中 Amazon EMR 叢集，以及自行佈建新叢集。

您必須將這些政策新增至其中的角色取決於 Studio 及 Amazon EMR 是部署在同一帳戶 (選擇*單一帳戶*) 還是不同帳戶 (選擇*跨帳戶*)。

**重要**  
您只能探索並連線至從私有空間啟動的 JupyterLab 和 Studio Classic 應用程式的 Amazon EMR 叢集。確保 Amazon EMR 叢集與您的 Studio 環境位於相同的 AWS 區域。

### 單一帳戶
<a name="studio-set-up-emr-permissions-singleaccount"></a>

如果您的 Amazon EMR 叢集和 Studio 或 Studio Classic 部署在同一個 AWS 帳戶中，請將下列許可連接到存取叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色使用 CloudFormation 範本佈建新 Amazon EMR 叢集的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*建立 Amazon EMRclusters 政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當您的 Amazon EMR 叢集和 Studio 位於相同帳戶時，設定執行期的角色身分驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

### 跨帳戶
<a name="studio-set-up-emr-permissions-crossaccount"></a>

開始使用之前，請先擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

如果您的 Amazon EMR 叢集和 Studio 或 Studio Classic 部署在不同的 AWS 帳戶中，您可以在兩個帳戶上設定許可。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當叢集和 Studio 位於不同帳戶時，設定執行期角色驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

#### 在 Amazon EMR 叢集帳戶上
<a name="studio-set-up-emr-permissions-crossaccount-emraccount"></a>

請遵循下列步驟，在部署 Amazon EMR 的帳戶 (也稱為*信任帳戶*) 上建立必要的角色和政策：

1. **步驟 1**：擷取 [Amazon EMR 叢集服務角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)的 ARN。

   若要了解如何尋找叢集服務角色的 ARN，請參閱[設定 IAM 服務角色以取得 Amazon EMR 對 AWS 服務和資源的許可](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步驟 2**：使用下列組態建立名為 `AssumableRole` 的自訂 IAM 角色：
   + 許可：將必要的許可授與 `AssumableRole`，以允許存取 Amazon EMR 資源。在涉及跨帳戶存取的案例中，此角色也稱為*存取角色*。
   + 信任關係：設定 `AssumableRole` 的信任政策，以允許從需要存取的 Studio 帳戶中擔任執行角色 (跨帳戶圖表中的 `SageMakerExecutionRole`)。

   透過擔任該角色，Studio 或 Studio Classic 可以暫時存取其在 Amazon EMR 中所需的許可。

   如需如何在 `AssumableRole` Amazon EMR AWS 帳戶中建立新 的詳細說明，請遵循下列步驟：

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 在左側導覽窗格中，選擇**政策**，然後選擇**建立政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 在左側導覽窗格中，選擇**角色**，然後選擇**建立角色**。

   1. 在**建立角色**頁面上，選擇**自訂信任政策**作為信任的實體。

   1. 在**自訂信任政策**區段中貼入下列 JSON 文件，然後選擇**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      將 `studio-account` 取代為 Studio 帳戶 ID，並將 `AmazonSageMaker-ExecutionRole` 取代為 JupyterLab 空間使用的執行角色。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      將 `studio-account` 取代為 Studio Classic 帳戶 ID。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**新增許可**頁面中，新增您剛建立的許可，然後選擇**下一步**。

   1. 在**檢閱**頁面上，輸入角色名稱 (例如 `AssumableRole`) 和選用描述。

   1. 檢閱角色詳細資訊，並選擇 **Create role (建立角色)**。

   如需在 AWS 帳戶建立角色的詳細資訊，請參閱[建立 IAM 角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

#### 在 Studio 帳戶上
<a name="studio-set-up-emr-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的帳戶 (也稱為*信任帳戶*) 上，請使用存取信任帳戶中資源所需的許可，更新存取您叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增內嵌政策，授與角色更新網域、使用者設定檔和空間的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*網域、使用者設定檔和空間更新動作政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色擔任 `AssumableRole` 的許可，然後執行角色存取政策所允許的動作。將 `emr-account` 取代為 Amazon EMR 帳戶 ID，並將 `AssumableRole` 取代為 Amazon EMR 帳戶中建立的可擔任角色名稱。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色使用 CloudFormation 範本佈建新 Amazon EMR 叢集的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*建立 Amazon EMRclusters 政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. (選用) 若要允許列出在與 Studio 相同的帳戶中部署的 Amazon EMR 叢集，請將額外的內嵌政策新增至 Studio 執行角色，如 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*所定義。

1. **步驟 3**：將您的可擔任角色 (存取角色) 與您的網域或使用者設定檔建立關聯。Studio 中的 JupyterLab 使用者可以使用 SageMaker AI 主控台或提供的指令碼。

    選擇對應至使用案例的索引標籤。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   若要使用 SageMaker AI 主控台，將您的可擔任角色與使用者設定檔或網域建立關聯：

   1. 導覽至 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

   1. 在左側導覽窗格中，選擇**網域**，然後使用您更新其許可的 SageMaker AI 執行角色選取網域。

   1. 
      + 若要在**網域詳細資訊**頁面的**應用程式組態**索引標籤中，將您的可擔任角色 (存取角色) 新增至您的網域，請導覽至 **JupyterLab** 區段。
      + 若要將您的可擔任角色 (存取角色) 新增至您的使用者設定檔：在**網域詳細資訊**頁面上，選擇**使用者設定檔**索引標籤，然後使用您已更新其許可的 SageMaker AI 執行角色選取使用者設定檔。在**應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。

   1. 選擇**編輯**並新增您的可擔任角色 (存取角色) ARN。

   1. 選擇**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用您已更新其許可的 SageMaker AI 執行角色，從空間啟動的 JupyterLab 應用程式中，請在終端機中執行下列命令。將 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole` (`EMRServiceRole` 表示 [RBAC 執行時期角色]()) 取代為其適當的值。此程式碼片段會更新 SageMaker AI 網域內特定使用者設定檔 (使用 `client.update_userprofile`) 或網域設定 (使用 `client.update_domain`) 的使用者設定檔設定。具體而言，它允許 JupyterLab 應用程式擔任 Amazon EMR 帳戶內執行 Amazon EMR 叢集的特定 IAM 角色 (`AssumableRole`)。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   將 `AssumableRole` 的 ARN 提供給 Studio Classic 執行角色。ARN 會在啟動時由 Jupyter 伺服器載入。Studio 使用的執行角色擔任該跨帳戶角色，以探索並連線至*信任帳戶*中的 Amazon EMR 叢集。

   您可以使用生命週期組態 (LCC) 指令碼來指定此資訊。您可以將 LCC 附加至您的網域或特定使用者設定檔。您使用的 LCC 指令碼必須是 JupyterServer 組態。如需如何建立 LCC 指令碼的詳細資訊，請參閱[搭配 Studio Classic 使用生命週期組態](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   下列為範例 LCC 指令碼。若要修改指令碼，請將 `AssumableRole` 和 `emr-account` 取代為其各自的值。跨帳戶的數量限制為五個。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    執行 LCC 並寫入檔案之後，伺服器會讀取檔案 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 並儲存跨帳戶 ARN。

------

# 設定列出 Amazon EMR 叢集
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

管理員可以設定 SageMaker Studio 執行角色的許可，以授予使用者檢視其可存取之 Amazon EMR 叢集清單的能力，讓他們能夠連線到這些叢集。您想要存取的叢集可以部署在與 Studio 相同的 AWS 帳戶 （選擇*單一帳戶*) 或個別帳戶 （選擇*跨帳戶*)。下頁描述如何授予從 Studio 或 Studio Classic 檢視 Amazon EMR 叢集的許可。

**重要**  
您只能探索並連線至從私有空間啟動的 JupyterLab 和 Studio Classic 應用程式的 Amazon EMR 叢集。確保 Amazon EMR 叢集與您的 Studio 環境位於相同的 AWS 區域。

若要讓資料科學家從 Studio 或 Studio Classic 探索 Amazon EMR 叢集，然後連線至其中，請遵循下列步驟。

## 單一帳戶
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

如果您的 Amazon EMR 叢集和 Studio 或 Studio Classic 部署在同一個 AWS 帳戶中，請將下列許可附加至存取您叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當您的 Amazon EMR 叢集和 Studio 位於相同帳戶時，設定執行期的角色身分驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

## 跨帳戶
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

開始使用之前，請先擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

如果您的 Amazon EMR 叢集和 Studio 部署在不同的 AWS 帳戶中，您可以在這兩個帳戶上設定許可。

**注意**  
連線至 Amazon EMR 叢集的角色型存取控制 (RBAC) 使用者也應該參閱 [當叢集和 Studio 位於不同帳戶時，設定執行期角色驗證](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

**在 Amazon EMR 叢集帳戶上**

請遵循下列步驟，在部署 Amazon EMR 的帳戶 (也稱為*信任帳戶*) 上建立必要的角色和政策：

1. **步驟 1**：擷取 [Amazon EMR 叢集服務角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)的 ARN。

   若要了解如何尋找叢集服務角色的 ARN，請參閱[設定 IAM 服務角色以取得 Amazon EMR 對 AWS 服務和資源的許可](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步驟 2**：使用下列組態建立名為 `AssumableRole` 的自訂 IAM 角色：
   + 許可：將必要的許可授與 `AssumableRole`，以允許存取 Amazon EMR 資源。在涉及跨帳戶存取的案例中，此角色也稱為*存取角色*。
   + 信任關係：設定 `AssumableRole` 的信任政策，以允許從需要存取的 Studio 帳戶中擔任執行角色 (跨帳戶圖表中的 `SageMakerExecutionRole`)。

   透過擔任該角色，Studio 或 Studio Classic 可以暫時存取其在 Amazon EMR 中所需的許可。

   如需如何在 `AssumableRole` Amazon EMR AWS 帳戶中建立新 的詳細說明，請遵循下列步驟：

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 在左側導覽窗格中，選擇**政策**，然後選擇**建立政策**。

   1. 在 **JSON** 索引標籤中，新增允許 Amazon EMR 存取和操作的 Amazon EMR 許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*。將陳述式清單複製到角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 在左側導覽窗格中，選擇**角色**，然後選擇**建立角色**。

   1. 在**建立角色**頁面上，選擇**自訂信任政策**作為信任的實體。

   1. 在**自訂信任政策**區段中貼入下列 JSON 文件，然後選擇**下一步**。

------
#### [ For users of Studio and JupyterLab ]

      將 `studio-account` 取代為 Studio 帳戶 ID，並將 `AmazonSageMaker-ExecutionRole` 取代為 JupyterLab 空間使用的執行角色。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------
#### [ For users of Studio Classic ]

      將 `studio-account` 取代為 Studio Classic 帳戶 ID。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**新增許可**頁面中，新增您剛建立的許可，然後選擇**下一步**。

   1. 在**檢閱**頁面上，輸入角色名稱 (例如 `AssumableRole`) 和選用描述。

   1. 檢閱角色詳細資訊，並選擇 **Create role (建立角色)**。

   如需在 AWS 帳戶上建立角色的詳細資訊，請參閱[建立 IAM 角色 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

**在 Studio 帳戶上**

在部署 Studio 的帳戶 (也稱為*信任帳戶*) 上，請使用存取信任帳戶中資源所需的許可，更新存取您叢集的 SageMaker AI 執行角色。

1. **步驟 1**：擷取私有空間所使用的 SageMaker AI 執行角色 ARN。

   如需 SageMaker AI 中空間和執行角色的相關資訊，請參閱 [了解網域空間許可和執行角色](execution-roles-and-spaces.md)。

   如需如何擷取 SageMaker AI 執行角色 ARN 的詳細資訊，請參閱 [取得您的執行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。

1. **步驟 2**：將下列許可附加至存取 Amazon EMR 叢集的 SageMaker AI 執行角色。

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**，然後在**搜尋**欄位中依名稱搜尋您的執行角色。角色名稱是 ARN 的最後一部分，在最後一個正斜線 (/) 之後。

   1. 遵循角色的連結。

   1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

   1. 在 **JSON** 索引標籤中，新增內嵌政策，授與角色更新網域、使用者設定檔和空間的許可。如需政策文件的詳細資訊，請參閱 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*網域、使用者設定檔和空間更新動作政策*。將陳述式清單複製到您角色的內嵌政策之前，請將 `region` 和 `accountID` 取代為其實際值。

   1. 選擇**下一步**，然後提供**政策名稱**。

   1. 選擇**建立政策**。

   1. 重複**建立內嵌政策**步驟，以新增另一個政策，授與執行角色擔任 `AssumableRole` 的許可，然後執行角色存取政策所允許的動作。將 `emr-account` 取代為 Amazon EMR 帳戶 ID，並將 `AssumableRole` 取代為 Amazon EMR 帳戶中建立的可擔任角色名稱。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowRoleAssumptionForCrossAccountDiscovery",
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": [
                      "arn:aws:iam::111122223333:role/AssumableRole"
                  ]
              }
          ]
      }
      ```

------

   1. (選用) 若要允許列出在與 Studio 相同的帳戶中部署的 Amazon EMR 叢集，請將額外的內嵌政策新增至 Studio 執行角色，如 [參考政策](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 政策*所定義。

1. **步驟 3**：將您的可擔任角色 (存取角色) 與您的網域或使用者設定檔建立關聯。Studio 中的 JupyterLab 使用者可以使用 SageMaker AI 主控台或提供的指令碼。

    選擇對應至使用案例的索引標籤。

------
#### [ Associate your assumable roles in JupyterLab using the SageMaker AI console ]

   若要使用 SageMaker AI 主控台，將您的可擔任角色與使用者設定檔或網域建立關聯：

   1. 導覽至 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

   1. 在左側導覽窗格中，選擇**網域**，然後使用您更新其許可的 SageMaker AI 執行角色選取網域。

   1. 
      + 若要在**網域詳細資訊**頁面的**應用程式組態**索引標籤中，將您的可擔任角色 (存取角色) 新增至您的網域，請導覽至 **JupyterLab** 區段。
      + 若要將您的可擔任角色 (存取角色) 新增至您的使用者設定檔：在**網域詳細資訊**頁面上，選擇**使用者設定檔**索引標籤，然後使用您已更新其許可的 SageMaker AI 執行角色選取使用者設定檔。在**應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。

   1. 選擇**編輯**並新增您的可擔任角色 (存取角色) ARN。

   1. 選擇**提交**。

------
#### [ Associate your assumable roles in JupyterLab using a Python script ]

    在使用您已更新其許可的 SageMaker AI 執行角色，從空間啟動的 JupyterLab 應用程式中，請在終端機中執行下列命令。將 `domainID`、`user-profile-name`、`emr-accountID` 和 `AssumableRole` (`EMRServiceRole` 表示 [RBAC 執行時期角色]()) 取代為其適當的值。此程式碼片段會更新 SageMaker AI 網域內特定使用者設定檔 (使用 `client.update_userprofile`) 或網域設定 (使用 `client.update_domain`) 的使用者設定檔設定。具體而言，它允許 JupyterLab 應用程式擔任 Amazon EMR 帳戶內執行 Amazon EMR 叢集的特定 IAM 角色 (`AssumableRole`)。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_userprofile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                                "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
           }
           
       }
   })
   resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------
#### [ For users of Studio Classic ]

   將 `AssumableRole` 的 ARN 提供給 Studio Classic 執行角色。ARN 會在啟動時由 Jupyter 伺服器載入。Studio 使用的執行角色擔任該跨帳戶角色，以探索並連線至*信任帳戶*中的 Amazon EMR 叢集。

   您可以使用生命週期組態 (LCC) 指令碼來指定此資訊。您可以將 LCC 附加至您的網域或特定使用者設定檔。您使用的 LCC 指令碼必須是 JupyterServer 組態。如需如何建立 LCC 指令碼的詳細資訊，請參閱[搭配 Studio Classic 使用生命週期組態](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   下列為範例 LCC 指令碼。若要修改指令碼，請將 `AssumableRole` 和 `emr-account` 取代為其各自的值。跨帳戶的數量限制為五個。

   ```
   # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account.
   
   #!/bin/bash
   
   set -eux
   
   FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
   FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
   FILE="$FILE_DIRECTORY/$FILE_NAME"
   
   mkdir -p $FILE_DIRECTORY
   
   cat > "$FILE" <<- "EOF"
   {
     emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole",
     emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole"
   }
   EOF
   ```

    執行 LCC 並寫入檔案之後，伺服器會讀取檔案 `/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json` 並儲存跨帳戶 ARN。

------

請參閱[從 Studio 或 Studio Classic 列出 Amazon EMR 叢集](discover-emr-clusters.md)，以了解如何從 Studio 或 Studio Classic 筆記本探索並連線至 Amazon EMR 叢集。

# 在 Studio 中設定用於 Amazon EMR 叢集存取的 IAM 執行時期角色
<a name="studio-notebooks-emr-cluster-rbac"></a>

當您從 Studio 或 Studio Classic 筆記本連線到 Amazon EMR 叢集時，可以視覺化方式瀏覽 IAM 角色清單 (稱為執行時期角色)，然後即時選取一個角色。接著，從您的筆記本建立的所有 Apache Spark、Apache Hive 或 Presto 任務，只會存取連接至執行時期角色的政策所允許的資料及資源。此外，從使用 管理的資料湖存取資料時 AWS Lake Formation，您可以使用連接到執行期角色的政策來強制執行資料表層級和資料欄層級的存取。

透過這項功能，您和團隊成員可以連線到同一個叢集，每個叢集都使用執行期角色，其許可範圍將與您個別的資料存取層級相符。您的工作階段也會在共用叢集上彼此隔離。

若要使用 Studio Classic 試用此功能，請參閱[使用 AWS Lake Formation 和 Amazon SageMaker Studio Classic 的 Amazon EMR 套用精細資料存取控制](https://aws.amazon.com/blogs/machine-learning/apply-fine-grained-data-access-controls-with-aws-lake-formation-and-amazon-emr-from-amazon-sagemaker-studio/)。這篇部落格文章可協助您設定示範環境，方便您嘗試使用預先設定的執行期角色連線至 Amazon EMR 叢集。

## 先決條件
<a name="studio-notebooks-emr-cluster-rbac-prereq"></a>

開始之前，請確定您符合以下先決條件：
+ 使用 Amazon EMR 版本 6.9 或以上。
+ **若為 Studio Classic 使用者**：在 Studio Classic Jupyter 伺服器應用程式組態中使用 JupyterLab 第 3 版。此版本支援 Studio Classic 使用執行時期角色連線至 Amazon EMR 叢集。

  **若為 Studio 使用者**：使用 [SageMaker Distribution 映像](sagemaker-distribution.md)版本 `1.10` 或更新版本。
+ 允許在您叢集的安全組態中使用執行時期角色。如需詳細資訊，請參閱 [Amazon EMR 步驟的執行期角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-steps-runtime-roles.html)。
+ 使用 [支援的映像和核心，可從 Studio 或 Studio Classic 連線至 Amazon EMR 叢集](studio-emr-user-guide.md#studio-notebooks-emr-cluster-connect-kernels) 中列出的任何核心建立筆記本。
+ 確定您檢閱[設定 Studio 以使用執行期 IAM 角色](#studio-notebooks-emr-cluster-iam)中的指示，以設定您的執行時期角色。

## 跨帳戶連線案例
<a name="studio-notebooks-emr-cluster-rbac-scen"></a>

當您的資料位於 Studio 帳戶之外時，執行期角色驗證可支援各種跨帳戶連線案例。下列影像顯示您可以在 Studio 和資料帳戶之間指派 Amazon EMR 叢集、資料，甚至 Amazon EMR 執行時期執行角色的三種不同方式：

![\[執行期 IAM 角色驗證支援的跨帳戶案例。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio-emr-rbac-scenarios.png)


在選項 1 中，您的 Amazon EMR 叢集和 Amazon EMR 執行時期執行角色位於與 Studio 帳戶不同的資料帳戶中。您可以定義個別的 Amazon EMR 存取角色 (也稱為 `Assumable role`) 許可政策，該政策會授予 Studio 或 Studio Classic 執行角色擔任 Amazon EMR 存取角色的許可。接著，Amazon EMR 存取角色會代表您的 Studio 或 Studio Classic 執行角色呼叫 Amazon EMR API `GetClusterSessionCredentials`，讓您可以存取叢集。

在選項 2 中，您的 Amazon EMR 叢集和 Amazon EMR 執行時期執行角色位於您的 Studio 帳戶中。您的 Studio 執行角色具有使用 Amazon EMR API `GetClusterSessionCredentials` 存取叢集的許可。若要存取 Amazon S3 儲存貯體，請提供 Amazon EMR 執行時期執行角色跨帳戶 Amazon S3 儲存貯體存取許可 — 您可以在 Amazon S3 儲存貯體政策中授予這些許可。

在選項 3 中，您的 Amazon EMR 叢集位於您的 Studio 帳戶中，而 Amazon EMR 執行時期執行角色位於資料帳戶中。您的 Studio 或 Studio Classic 執行角色具有使用 Amazon EMR API `GetClusterSessionCredentials` 存取叢集的許可。將 Amazon EMR 執行時期執行角色新增到執行角色組態 JSON。接著即可在選擇叢集時在使用者介面中選取角色。如需如何設定執行角色設定 JSON 檔案的詳細資訊，請參閱[將您的執行角色預先載入至 Studio 或 Studio Classic](#studio-notebooks-emr-cluster-iam-preload)。

## 設定 Studio 以使用執行期 IAM 角色
<a name="studio-notebooks-emr-cluster-iam"></a>

若要為 Amazon EMR 叢集建立執行期角色身分驗證，請設定必要的 IAM 政策、網路和可用性增強功能。您的設定取決於您是否會處理任何跨帳戶作業，以及您的 Amazon EMR 叢集、Amazon EMR 執行時期執行角色或兩者是否都位於 Studio 帳戶之外。下節將引導您完成要安裝的政策，並說明如何設定網路以允許跨帳戶之間的流量，以及設定用於自動化 Amazon EMR 連線的本機組態檔案。

### 當您的 Amazon EMR 叢集和 Studio 位於相同帳戶時，設定執行期的角色身分驗證
<a name="studio-notebooks-emr-cluster-iam-same"></a>

如果您的 Amazon EMR 叢集位於您的 Studio 帳戶中，請完成下列步驟，將必要的許可新增至您的 Studio 執行政策：

1. 新增必要的 IAM 政策，以連線到 Amazon EMR 叢集。如需詳細資訊，請參閱[設定列出 Amazon EMR 叢集](studio-notebooks-configure-discoverability-emr-cluster.md)。

1. 當您傳遞政策中指定的一或多個允許的 Amazon EMR 執行時期執行角色時，授予呼叫 Amazon EMR API `GetClusterSessionCredentials` 的許可。

1. (選用) 授與許可，以傳遞遵循任何使用者定義命名慣例的 IAM 角色。

1. (選用) 授與許可，以存取使用特定使用者定義字串標記的 Amazon EMR 叢集。

1. 預先載入您的 IAM 角色，讓您可以選取要在連線至 Amazon EMR 叢集時使用的角色。如需有關預先載入 IAM 角色的詳細資訊，請參閱[將您的執行角色預先載入至 Studio 或 Studio Classic](#studio-notebooks-emr-cluster-iam-preload)。

下列範例政策允許屬於建模和訓練群組的 Amazon EMR 執行時期執行角色呼叫 `GetClusterSessionCredentials`。此外，政策擁有者可存取標記為字串 `modeling` 或 `training` 的 Amazon EMR 叢集。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elasticmapreduce:GetClusterSessionCredentials",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "elasticmapreduce:ExecutionRoleArn": [
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-modeling*",
                        "arn:aws:iam::111122223333:role/emr-execution-role-ml-training*"
			]},
		"StringLike":{
                    "elasticmapreduce:ResourceTag/group": [
                        "*modeling*",
                        "*training*"
                    ]
                }
            }
        }
    ]
}
```

------

### 當叢集和 Studio 位於不同帳戶時，設定執行期角色驗證
<a name="studio-notebooks-emr-cluster-iam-diff"></a>

如果您的 Amazon EMR 叢集不在您的 Studio 帳戶中，請允許您的 SageMaker AI 執行角色扮演跨帳戶 Amazon EMR 存取角色，以便您可以連線到叢集。若要設定跨帳戶組態，請完成以下步驟：

1. 建立您的 SageMaker AI 執行角色許可政策，以便執行角色可以擔任 Amazon EMR 存取角色。以下為政策的範例：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowAssumeCrossAccountEMRAccessRole",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::111122223333:role/emr-access-role-name"
           }
       ]
   }
   ```

------

1. 建立信任政策以指定哪些 Studio 帳戶 ID 受信任，以擔任 Amazon EMR 存取角色。以下為政策的範例：

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
           "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole",
           "Effect": "Allow",
           "Principal": {
             "AWS": "arn:aws:iam::111122223333:role/studio_execution_role"
           },
           "Action": "sts:AssumeRole"
         }
       ]
   }
   ```

------

1. 建立 Amazon EMR 存取角色許可政策，該政策授予 Amazon EMR 執行時期執行角色在叢集上執行預定任務所需的許可。設定 Amazon EMR 存取角色，以使用存取角色許可政策中指定的 Amazon EMR 執行時期執行角色呼叫 API `GetClusterSessionCredentials`。以下為政策的範例：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI",
               "Effect": "Allow",
               "Action": "elasticmapreduce:GetClusterSessionCredentials",
               "Resource": "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/cluster-id",
               "Condition": {
                   "StringLike": {
                       "elasticmapreduce:ExecutionRoleArn": [
                           "arn:aws:iam::111122223333:role/emr-execution-role-name"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 設定跨帳戶網路，讓流量可以在您的帳戶之間來回移動。如需指引式指示，請參閱*[設定 Amazon EMR 叢集的網路存取](studio-notebooks-emr-networking.md)設定*。本節中的步驟可協助您完成下列任務：

   1. VPC 會對等您的 Studio 帳戶和您的 Amazon EMR 帳戶以建立連線。

   1. 手動將路由新增至兩個帳戶中的私人子網路路由表。這樣一來，將可從 Studio 帳戶建立和連線至 Amazon EMR 叢集到遠端帳戶的私有子網路。

   1. 設定連接到 Studio 網域的安全群組，以允許傳出流量和 Amazon EMR 主要節點的安全群組允許來自 Studio 執行個體安全群組的傳入 TCP 流量。

1. 預先載入您的 IAM 執行時期角色，讓您可以選取要在連線至 Amazon EMR 叢集時使用的角色。如需有關預先載入 IAM 角色的詳細資訊，請參閱[將您的執行角色預先載入至 Studio 或 Studio Classic](#studio-notebooks-emr-cluster-iam-preload)。

### 設定 Lake Formation 存取權
<a name="studio-notebooks-emr-cluster-iam-lf"></a>

當您從 管理的資料湖存取資料時 AWS Lake Formation，您可以使用連接到執行期角色的政策來強制執行資料表層級和資料欄層級的存取。若要設定 Lake Formation 存取權限，請參閱[將 Amazon EMR 與 AWS Lake Formation整合](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lake-formation.html)。

### 將您的執行角色預先載入至 Studio 或 Studio Classic
<a name="studio-notebooks-emr-cluster-iam-preload"></a>

您可以預先載入 IAM 執行時期角色，讓您可以選取要在連線至 Amazon EMR 叢集時使用的角色。Studio 中 JupyterLab 的使用者可以使用 SageMaker AI 主控台或提供的指令碼。

------
#### [ Preload runtime roles in JupyterLab using the SageMaker AI console ]

若要使用 SageMaker AI 主控台，將您的執行時期角色與使用者設定檔或網域建立關聯：

1. 導覽至 SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在左側導覽窗格中，選擇**網域**，然後使用您更新其許可的 SageMaker AI 執行角色選取網域。

1. 
   + 若要將您的執行時期 (和跨帳戶使用案例的存取角色) 新增至您的網域：在**網域詳細資訊**頁面**的應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。
   + 若要將您的執行時期 (和跨帳戶使用案例的存取角色) 新增至您的使用者設定檔：在**網域詳細資訊**頁面上，選擇**使用者設定檔**索引標籤，然後使用您已更新其許可的 SageMaker AI 執行角色選取使用者設定檔。在**應用程式組態**索引標籤中，導覽至 **JupyterLab** 區段。

1. 選擇**編輯**並新增您的存取角色 (可擔任角色) 和 EMR Serverless 執行時期執行角色的 ARN。

1. 選擇**提交**。

當您下次連線至 Amazon EMR 伺服器時，執行時期角色應該會出現在下拉式功能表中以供選取。

------
#### [ Preload runtime roles in JupyterLab using a Python script ]

在使用您已更新其許可的 SageMaker AI 執行角色，從空間啟動的 JupyterLab 應用程式中，請在終端機中執行下列命令。將 `domainID`、`user-profile-name`、`emr-accountID` 和 `EMRServiceRole` 取代為其適當的值。此程式碼片段會在跨帳戶使用案例中更新 SageMaker AI 網域內的使用者設定檔設定 (`client.update_user_profile`)。具體而言，它會設定 Amazon EMR 的服務角色。它還允許 JupyterLab 應用程式擔任特定 IAM 角色 (`AssumableRole` 或 `AccessRole`)，以在 Amazon EMR 帳戶內執行 Amazon EMR。

或者，如果您的空間使用網域層級設定的執行角色，請使用 `client.update_domain` 更新網域設定。

```
import botocore.session
import json
sess = botocore.session.get_session()
client = sess.create_client('sagemaker')

client.update_user_profile(
DomainId="domainID", 
UserProfileName="user-profile-name",
UserSettings={
    'JupyterLabAppSettings': {
        'EmrSettings': {
            'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
            'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", 
                             "arn:aws:iam::emr-accountID:role/AnotherServiceRole"]
        }
        
    }
})
resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name")

resp['CreationTime'] = str(resp['CreationTime'])
resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
print(json.dumps(resp, indent=2))
```

------
#### [ Preload runtime roles in Studio Classic ]

將 `AccessRole` (`AssumableRole`) 的 ARN 提供給您的 SageMaker AI 執行角色。ARN 會在啟動時由 Jupyter 伺服器載入。Studio 使用的執行角色擔任該跨帳戶角色，以探索並連線至*信任帳戶*中的 Amazon EMR 叢集。

您可以使用生命週期組態 (LCC) 指令碼來指定此資訊。您可以將 LCC 附加至您的網域或特定使用者設定檔。您使用的 LCC 指令碼必須是 JupyterServer 組態。如需如何建立 LCC 指令碼的詳細資訊，請參閱[搭配 Studio Classic 使用生命週期組態](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

下列為範例 LCC 指令碼。若要修改指令碼，請將 `AssumableRole` 和 `emr-account` 取代為其各自的值。跨帳戶的數量限制為五個。

下列程式碼片段為範例 LCC bash 指令碼，如果您的 Studio Classic 應用程式和叢集位於相同的帳戶中則可套用：

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::123456789012:role/emr-execution-role-1",
          "arn:aws:iam::123456789012:role/emr-execution-role-2"
      ]
    }
}
EOF
```

如果您的 Studio Classic 應用程式和叢集位於不同的帳戶中，請指定可以使用該叢集的 Amazon EMR 存取角色。在下列範例政策中，*123456789012* 是 Amazon EMR 叢集帳戶 ID，而 *212121212121* 和 *434343434343* 則是允許的 Amazon EMR 存取角色的 ARN。

```
#!/bin/bash

set -eux

FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE"
FILE_NAME="emr-configurations-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "emr-execution-role-arns":
    {
      "123456789012": [
          "arn:aws:iam::212121212121:role/emr-execution-role-1",
          "arn:aws:iam::434343434343:role/emr-execution-role-2"
      ]
    }
}
EOF

# add your cross-account EMR access role
FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE"
FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json"
FILE="$FILE_DIRECTORY/$FILE_NAME"

mkdir -p $FILE_DIRECTORY

cat << 'EOF' > "$FILE"
{
    "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role"
}
EOF
```

------

# 參考政策
<a name="studio-set-up-emr-permissions-reference"></a>
+ **列出 Amazon EMR 政策**：此政策允許執行下列動作：
  + `AllowPresignedUrl` 允許產生預先簽章的 URL，用於從 Studio 內存取 Spark UI。
  + `AllowClusterDiscovery` 和 `AllowClusterDetailsDiscovery` 允許列出和描述所提供區域和帳戶中的 Amazon EMR 叢集。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowPresignedUrl",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:CreatePersistentAppUI",
                  "elasticmapreduce:DescribePersistentAppUI",
                  "elasticmapreduce:GetPersistentAppUIPresignedURL",
                  "elasticmapreduce:GetOnClusterAppUIPresignedURL"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDetailsDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:DescribeCluster",
                  "elasticmapreduce:ListInstances",
                  "elasticmapreduce:ListInstanceGroups",
                  "elasticmapreduce:DescribeSecurityConfiguration"
              ],
              "Resource": [
                  "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/*"
              ]
          },
          {
              "Sid": "AllowClusterDiscovery",
              "Effect": "Allow",
              "Action": [
                  "elasticmapreduce:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ **建立 Amazon EMR 叢集政策**：此政策允許執行下列動作：
  + `AllowEMRTemplateDiscovery` 允許在 Service Catalog 中搜尋 Amazon EMR 範本。Studio 和 Studio Classic 使用此項目來顯示可用的範本。
  + `AllowSagemakerProjectManagement` 啟用 [什麼是 SageMaker AI 專案？](sagemaker-projects-whatis.md) 的建立。在 Studio 或 Studio Classic 中，存取 AWS Service Catalog 是透過 管理[什麼是 SageMaker AI 專案？](sagemaker-projects-whatis.md)。

  所提供 JSON 中定義的 IAM 政策會授予這些許可。將陳述式清單複製到您角色的內嵌政策之前，請將 *region* 和 *accountID* 取代為您的實際區域和 AWS 帳戶 ID 值。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowEMRTemplateDiscovery",
              "Effect": "Allow",
              "Action": [
                  "servicecatalog:SearchProducts"
              ],
              "Resource": "*"
          },
          {
              "Sid": "AllowSagemakerProjectManagement",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:CreateProject",
                  "sagemaker:DeleteProject"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:111122223333:project/*"
          }
      ]
  }
  ```

------
+ **網域、使用者設定檔和空間更新動作政策 **：以下政策授予許可，以更新指定區域和 AWS 帳戶中的 SageMaker AI 網域、使用者設定檔和空間。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------