使用執行時間 IAM 角色從工作室傳統版 Connect 到 Amazon EMR 叢集 - Amazon SageMaker

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

使用執行時間 IAM 角色從工作室傳統版 Connect 到 Amazon EMR 叢集

當您從 Amazon SageMaker Studio 傳統版筆記本連接到 Amazon EMR 叢集時,您可以直觀地瀏覽 IAM 角色清單 (稱為執行階段角色),然後即時選取一個角色。接著,從您的 Studio Classic 筆記本建立的所有 Apache Spark、Apache Hive 或普雷斯托作業只會存取附加至執行階段角色的原則所允許的資料和資源。此外,從管理的資料湖存取資料時 AWS Lake Formation,您可以使用附加至執行階段角色的原則強制執行資料表層級和資料行層級存取。

透過這項功能,您和團隊成員可以連線到同一個叢集,每個叢集都使用執行期角色,其許可範圍將與您個別的資料存取層級相符。您的工作階段也會在共用叢集上彼此隔離。透過這項能夠控制對相同共用叢集上資料的精細存取,即可簡化 Amazon EMR 叢集的佈建,降低營運開銷並節省成本。

若要試用這項新功能,請參閱使用 Amazon SageMaker 工作室經典版套用精細的資料存取控制 AWS Lake Formation 和 Amazon EMR。這篇部落格文章可協助您設定示範環境,方便您嘗試使用預先設定的執行期角色連線至 Amazon EMR 叢集。

必要條件

開始之前,請確定您符合以下先決條件:

跨帳戶連線案例

當您的資料位於 Studio Classic 帳戶之外時,執行階段角色驗證可支援各種跨帳戶連線案例。下圖顯示了三種不同的方式,您可以在工作室典型帳戶和資料帳戶之間指派 Amazon EMR 叢集、資料,甚至 Amazon EMR 執行角色:

執行期 IAM 角色驗證支援的跨帳戶案例。

在選項 1 中,您的 Amazon EMR 叢集和 Amazon EMR 執行角色位於與您的工作室傳統帳戶不同的資料帳戶中。您可以定義個別的 Amazon EMR 存取角色權限政策,該政策授予您的工作室傳統執行角色的權限,以擔任 Amazon EMR 存取角色。然後,Amazon EMR 存取角色會代表您的工作室傳統執行角色呼叫 Amazon EMR APIGetClusterSessionCredentials,讓您能夠存取叢集。

在選項 2 中,您的 Amazon EMR 叢集和 Amazon EMR 執行角色位於您的工作室典型帳戶中。您的工作室傳統版執行角色具有使用 Amazon EMR API 存GetClusterSessionCredentials取叢集的權限。若要存取 Amazon S3 儲存貯體,請提供 Amazon EMR 執行角色跨帳戶 Amazon S3 儲存貯體存取許可 — 您可以在 Amazon S3 儲存貯體政策中授予這些許可。

在選項 3 中,您的 Amazon EMR 叢集位於您的工作室典型帳戶中,而 Amazon EMR 執行角色位於資料帳戶中。您的工作室傳統版執行角色具有使用 Amazon EMR API 存GetClusterSessionCredentials取叢集的權限。將 Amazon EMR 執行角色新增到執行角色組態 JSON 中。接著即可在選擇叢集時在使用者介面中選取角色。如需如何設定執行角色設定 JSON 檔案的詳細資訊,請參閱將您的執行角色預先載入工作室經典版

設定工作室傳統版以使用執行階段 IAM 角色

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

當 Amazon EMR 叢集和工作室傳統版位於相同帳戶時,設定執行階段角色身份驗證

如果您的 Amazon EMR 叢集位於您的工作室典型帳戶中,請新增基本政策以連接到您的 Amazon EMR 叢集,並設定許可以呼叫 Amazon EMR APIGetClusterSessionCredentials,讓您可以存取叢集。完成下列步驟,將必要的權限新增至您的 Studio 傳統版執行原則:

  1. 新增必要的 IAM 政策,以連線到 Amazon EMR 叢集。如需詳細資訊,請參閱 從經典 SageMaker工作室探索 Amazon EMR 叢集

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

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

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

  5. 如果您不想手動呼叫 Amazon EMR 連線命令,請在本機 Amazon EFS 中安裝 SageMaker組態檔案,然後在選取 Amazon EMR 叢集時選取要使用的角色。如需有關預先載入 IAM 角色的詳細資訊,請參閱將您的執行角色預先載入工作室經典版

下列範例政策允許屬於模型和訓練群組的 Amazon EMR 執行角色呼叫 GetClusterSessionCredentials。此外,政策擁有者可存取標記為字串 modelingtraining 的 Amazon EMR 叢集。

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

當叢集和 Studio 傳統版位於不同帳戶時,設定執行階段角色驗證

如果您的 Amazon EMR 叢集不在您的工作室傳統帳戶中,請允許您的工作室傳統執行角色扮演跨帳戶 Amazon EMR 存取角色,以便您可以連線到叢集。若要設定跨帳戶組態,請完成以下步驟:

  1. 建立您的 Studio 傳統版執行角色權限政策,以便執行角色可以擔任 Amazon EMR 存取角色。以下為政策的範例:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAssumeCrossAccountEMRAccessRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::emr_account_id:role/emr-access-role-name" } ] }
  2. 建立信任政策以指定哪些工作室傳統帳戶 ID 受信任,以擔任 Amazon EMR 存取角色。以下為政策的範例:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::studio_account_id:role/studio_execution_role" }, "Action": "sts:AssumeRole" } }
  3. 建立 Amazon EMR 存取角色許可政策,該政策授予 Amazon EMR 執行角色在叢集上執行預定任務所需的許可。設定 Amazon EMR 存取角色,以使用存取角色許可政策中指定的 Amazon EMR 執行角色呼叫 API GetClusterSessionCredentials。以下為政策的範例:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI", "Effect": "Allow", "Action": "elasticmapreduce:GetClusterSessionCredentials", "Resource": "", "Condition": { "StringLike": { "elasticmapreduce:ExecutionRoleArn": [ "arn:aws:iam::emr_account_id:role/emr-execution-role-name" ] } } } ] }
  4. 設定跨帳戶網路,讓流量可以在您的帳戶之間來回移動。如需引導式指示,請參閱部落格文章中的設定網路從 SageMaker Studio Classic 建立和管理 Amazon EMR 叢集以執行互動式 Spark 和 ML 工作負載 — 第 2 部分。部落格文章的步驟可協助您完成以下任務:

    1. VPC 對等您的工作室經典帳戶和您的 Amazon EMR 帳戶以建立連接。

    2. 手動將路由新增至兩個帳戶中的私人子網路路由表。這允許從工作室傳統帳戶建立和連接 Amazon EMR 叢集到遠端帳戶的私有子網路。

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

  5. 如果您不想手動呼叫 Amazon EMR 連線命令,請在本機 Amazon EFS 中安裝 SageMaker組態檔案,以便在選擇 Amazon EMR 叢集時選取要使用的角色。如需有關預先載入 IAM 角色的詳細資訊,請參閱將您的執行角色預先載入工作室經典版

設定 Lake Formation 存取權

從管理的資料湖存取資料時 AWS Lake Formation,您可以使用附加至執行階段角色的原則強制執行資料表層級和資料行層級存取。若要設定 Lake Formation 存取權限,請參閱將 Amazon EMR 與 AWS Lake Formation整合

將您的執行角色預先載入工作室經典版

如果您不想手動呼叫 Amazon EMR 連線命令,可以在本機 Amazon EFS 中安裝 SageMaker組態檔案,以便在選擇 Amazon EMR 叢集時選取要使用的執行角色。

若要為 Amazon EMR 執行角色寫入組態檔案,請將 搭配 Amazon SageMaker 工作室經典版使用生命週期 (LCC) 與 Jupyter 伺服器應用程式建立關聯。或者,您也可以編寫或更新組態檔案,然後使用以下指令重新啟動 Jupyter 伺服器:restart-jupyter-server

下列程式碼片段是範例 LCC bash 指令碼,如果您的 Studio 典型應用程式和叢集位於相同的帳戶中,您可以套用:

#!/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 典型應用程式和叢集位於不同的帳戶中,請指定可以使用該叢集的 Amazon EMR 存取角色。在下列範例政策中,123456789012 是 Amazon EMR 叢集帳戶的 ARN,而 212121212121434343434343 則是允許的 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