本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 EMR Serverless 存取另一個 AWS 帳戶中的 S3 資料
您可以從一個 AWS 帳戶執行 Amazon EMR Serverless 任務,並將其設定為存取屬於另一個 AWS 帳戶的 Amazon S3 儲存貯體中的資料。此頁面說明如何從 EMR Serverless 設定 S3 的跨帳戶存取。
在 EMR Serverless 上執行的任務可以使用 S3 儲存貯體政策或擔任的角色,從不同的 AWS 帳戶存取 Amazon S3 中的資料。
先決條件
若要設定 Amazon EMR Serverless 的跨帳戶存取權,您必須在登入兩個 AWS 帳戶時完成任務:
-
AccountA
– 這是 AWS 您已建立 Amazon EMR Serverless 應用程式的帳戶。設定跨帳戶存取之前,您必須在此帳戶中備妥下列項目:-
您要執行任務的 Amazon EMR Serverless 應用程式。
-
任務執行角色,具有在應用程式中執行任務所需的許可。如需詳細資訊,請參閱Amazon EMR Serverless 的任務執行期角色。
-
-
AccountB
– 這是 AWS 包含您希望 Amazon EMR Serverless 任務存取之 S3 儲存貯體的帳戶。
使用 S3 儲存貯體政策來存取跨帳戶 S3 資料
若要account B從 存取 中的 S3 儲存貯體account A,請將下列政策連接至 中的 S3 儲存貯體account B。
如需使用 S3 儲存貯體政策進行 S3 跨帳戶存取的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的範例 2:授予跨帳戶儲存貯體許可的儲存貯體擁有者。
使用擔任的角色來存取跨帳戶 S3 資料
設定 Amazon EMR Serverless 跨帳戶存取權的另一種方法是使用 AWS Security Token Service (AWS STS) 中的 AssumeRole
動作。 AWS STS 是一種全域 Web 服務,可讓您為使用者請求暫時、有限權限的登入資料。您可以使用使用 建立的臨時安全登入資料,對 EMR Serverless 和 Amazon S3 進行 API 呼叫AssumeRole
。
下列步驟說明如何使用擔任的角色從 EMR Serverless 存取跨帳戶 S3 資料:
-
在 中建立 Amazon S3 儲存貯體、
cross-account-bucket
體AccountB
。如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的建立儲存貯體。如果想要擁有對 DynamoDB 的跨帳戶存取權,也可以在AccountB
中建立 DynamoDB 資料表。如需詳細資訊,請參閱《Amazon DynamoDB 開發人員指南》中的建立 DynamoDB 資料表。 DynamoDB -
在
Cross-Account-Role-B
中建立可存取cross-account-bucket
體的AccountB
IAM 角色。登入 AWS Management Console 並開啟位於 https://https://console.aws.amazon.com/iam/
的 IAM 主控台。 -
選擇角色,並建立一個新角色
Cross-Account-Role-B
。如需如何建立 IAM 角色的詳細資訊,請參閱《IAM 使用者指南》中的建立 IAM 角色。 -
建立 IAM 政策,指定
Cross-Account-Role-B
存取cross-account-bucket
S3 儲存貯體的許可,如下列政策陳述式所示。然後,將 IAM 政策附接至Cross-Account-Role-B
。如需詳細資訊,請參閱「IAM 使用者指南」中的建立 IAM 政策。
如果您需要 DynamoDB 存取,請建立 IAM 政策,指定存取跨帳戶 DynamoDB 資料表的許可。然後,將 IAM 政策附接至
Cross-Account-Role-B
。如需詳細資訊,請參閱《IAM 使用者指南》中的 Amazon DynamoDB:允許存取特定資料表。以下是允許存取 DynamoDB 資料表 的政策
CrossAccountTable
。 -
編輯
Cross-Account-Role-B
角色的信任關係。-
若要設定角色的信任關係,請在 IAM 主控台中為您在步驟 2 中
Cross-Account-Role-B
建立的角色選擇信任關係索引標籤。 -
選取編輯信任關係。
-
新增下列政策文件。這可讓
Job-Execution-Role-A
中的AccountA
擔任該Cross-Account-Role-B
角色。
-
-
在
Job-Execution-Role-A
AccountA
中 AWS STS 授予擔任 的AssumeRole
許可Cross-Account-Role-B
。-
在 AWS 帳戶 的 IAM 主控台中
AccountA
,選取Job-Execution-Role-A
。 -
將以下政策陳述式新增至
Job-Execution-Role-A
以允許Cross-Account-Role-B
角色的AssumeRole
動作。
-
擔任的角色範例
您可以使用單一擔任角色來存取帳戶中的所有 S3 資源,或使用 Amazon EMR 6.11 及更高版本,您可以設定多個 IAM 角色,以便在存取不同的跨帳戶 S3 儲存貯體時擔任。
使用一個擔任的角色存取 S3 資源
注意
當您將任務設定為使用單一擔任角色時,整個任務的所有 S3 資源都會使用該角色,包括entryPoint
指令碼。
如果您想要使用單一擔任的角色來存取帳戶 B 中的所有 S3 資源,請指定下列組態:
-
將 EMRFS 組態指定
fs.s3.customAWSCredentialsProvider
至com.amazonaws.emr.AssumeRoleAWSCredentialsProvider
。 -
針對 Spark,使用
spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
和spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
在驅動程式和執行器上指定環境變數。 -
對於 Hive,使用
hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
、tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
和tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
在 Hive 驅動程式、Tez 應用程式主容器和 Tez 任務容器上指定環境變數。
下列範例示範如何使用 擔任的角色來啟動具有跨帳戶存取的 EMR Serverless 任務執行。
使用多個擔任的角色存取 S3 資源
透過 EMR Serverless 6.11.0 版和更新版本,您可以設定多個 IAM 角色,以便在存取不同的跨帳戶儲存貯體時擔任。如果您想要存取帳戶 B 中具有不同擔任角色的不同 S3 資源,請在開始任務執行時使用下列組態:
-
將 EMRFS 組態指定
fs.s3.customAWSCredentialsProvider
至com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
。 -
指定 EMRFS 組態
fs.s3.bucketLevelAssumeRoleMapping
,以定義從 S3 儲存貯體名稱到帳戶 B 中 IAM 角色的映射。值的格式應該為bucket1->role1;bucket2->role2
。
例如,您可以使用 arn:aws:iam::
存取儲存貯體 AccountB
:role/Cross-Account-Role-B-1bucket1
,並使用 arn:aws:iam::
存取儲存貯體 AccountB
:role/Cross-Account-Role-B-2bucket2
。下列範例示範如何透過多個擔任的角色,透過跨帳戶存取啟動 EMR Serverless 任務執行。