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

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

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

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

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

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

必要條件

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

  • 使用 Amazon 6.9 或以上EMR版本。

  • 在 Studio 傳統 Jupyter 伺服器應用程式設定中使用 JupyterLab 版本 3。此版本支援使用執行階段角色與 Amazon EMR 叢集的工作室傳統連線。

  • 允許在叢集的安全組態中使用執行期角色。如需詳細資訊,請參閱 Amazon EMR 步驟的執行階段角色

  • 使用 使用者指南 中列出的任何核心建立筆記本。

  • 請務必檢閱中的指示,設定工作室傳統版以使用執行階段IAM角色以使用 Studio 傳統版設定執行階段角色。

跨帳戶連線案例

當您的資料位於 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 執行角色位於您的工作室經典帳戶中。您的 Studio 經典版執行角色具有使EMRAPIGetClusterSessionCredentials用 Amazon 存取叢集的權限。若要存取 Amazon S3 儲存貯體,請授予 Amazon EMR 執行角色跨帳戶 Amazon S3 儲存貯體存取權限 — 您可以在 Amazon S3 儲存貯體政策內授予這些許可。

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

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

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

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

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

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

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

  3. (選擇性) 授與傳遞遵循任何使用者定義命名慣例之IAM角色的權限。

  4. (選擇性) 授與存取使用特定使用者定義字串標記之 Amazon EMR 叢集的權限。

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

下列範例政策允許屬於模型和訓練群組的 Amazon EMR 執行角色呼叫GetClusterSessionCredentials。此外,保單持有人可以 Amazon EMR 取標記為字串modelingtraining.

{ "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. 建立信任政策以指定哪些工作室傳統帳戶IDs可信任擔任 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 存取角色設定為使APIGetClusterSessionCredentials用存取角色權限政策中指定的 Amazon EMR 執行角色來呼叫。以下為政策的範例:

    { "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. 手動將路由新增至兩個帳戶中的私人子網路路由表。這允許從 Studio 傳統帳戶建立和連接 Amazon EMR 叢集到遠端帳戶的私有子網路。

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

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

設定 Lake Formation 存取權

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

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

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

若要為 Amazon EMR 執行角色寫入組態檔案,請將 a 使用生命週期設定來自訂 Studio 經典版 (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 ARN 適用於 Amazon EMR 叢集帳戶,而 2121212121 和 43434343434343 適用於允許的 Amazon 存取角色。 ARNs EMR

#!/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