

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

# 設定列出 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 叢集。