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
- Amazon EMR Serverless 애플리케이션을 생성한 AWS 계정입니다. 교차 계정 액세스를 설정하기 전에 이 계정에서 다음과 같은 준비를 마쳐야 합니다.-
작업을 실행하려는 Amazon EMR Serverless 애플리케이션.
-
애플리케이션에서 작업을 실행하는 데 필요한 권한이 있는 작업 실행 역할. 자세한 내용은 Amazon EMR Serverless에 대한 작업 런타임 역할 단원을 참조하십시오.
-
-
AccountB
- Amazon EMR Serverless 작업에서 액세스하려는 S3 버킷이 포함된 AWS 계정입니다.
S3 버킷 정책을 사용하여 교차 계정 S3 데이터에 액세스
account A에서 account B의 S3 버킷에 액세스하려면 다음 정책을 account B의 S3 버킷에 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions 1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA
:root" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucket_name_in_AccountB
" ] }, { "Sid": "Example permissions 2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA
:root" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucket_name_in_AccountB
/*" ] } ] }
Amazon S3의 교차 계정 버킷 권한 구성에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 예제 2: 버킷 소유자가 교차 계정 버킷 권한 부여를 참조하세요.
수임된 역할을 사용하여 교차 계정 S3 데이터에 액세스
Amazon EMR Serverless에 대한 교차 계정 액세스를 설정하는 또 다른 방법은 AWS Security Token Service(AWS STS)에서 AssumeRole
작업을 사용하는 것입니다. AWS STS는 사용자가 사용할 권한이 제한된 임시 자격 증명을 요청할 수 있는 글로벌 웹 서비스입니다. AssumeRole
로 생성한 임시 보안 자격 증명을 사용하여 EMR Serverless 및 Amazon S3에 대해 API 직접 호출을 수행할 수 있습니다.
다음 단계에서는 수임된 역할을 사용하여 EMR Serverless에서 교차 계정 S3 데이터에 액세스하는 방법을 보여줍니다.
-
AccountB
에서 Amazon S3 버킷(cross-account-bucket
)을 생성합니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 버킷 생성을 참조하세요. DynamoDB에 대한 크로스 계정 액세스를 원하는 경우AccountB
에서 DynamoDB 테이블을 생성할 수도 있습니다. 자세한 내용은 Amazon DynamoDB 개발자 안내서의 DynamoDB 테이블 생성을 참조하세요. -
교차 계정 버킷
에 액세스할 수AccountB
에서Cross-Account-Role-B
IAM 역할을 생성합니다.AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
역할을 선택하고 새 역할(
Cross-Account-Role-B
)을 생성합니다. IAM 역할 생성에 대한 자세한 내용은 IAM 사용 설명서의 IAM 역할 생성을 참조하세요. -
다음 정책 명령문에서 볼 수 있듯이
cross-account-bucket
S3 버킷에 액세스할 수 있는Cross-Account-Role-B
에 대한 권한을 지정하는 IAM 정책을 생성합니다. 그런 다음, IAM 정책을Cross-Account-Role-B
에 연결합니다. 자세한 내용은 IAM 사용자 설명서에서 IAM 정책 생성을 참조하세요.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
cross-account-bucket
", "arn:aws:s3:::cross-account-bucket
/*" ] } ] }DynamoDB 액세스가 필요한 경우 교차 계정 DynamoDB 테이블에 액세스할 권한을 지정하는 IAM 정책을 생성합니다. 그런 다음, IAM 정책을
Cross-Account-Role-B
에 연결합니다. 자세한 내용은 IAM 사용 설명서의 Amazon DynamoDB: 특정 테이블에 대한 액세스 허용을 참조하세요.다음은 DynamoDB 테이블(
CrossAccountTable
)에 대한 액세스를 허용하는 정책입니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:
AccountB
:table/CrossAccountTable
" } ] } -
Cross-Account-Role-B
역할에 대한 신뢰 관계를 편집합니다.-
역할에 대한 신뢰 관계를 구성하려면 2단계에서 생성한 역할(
Cross-Account-Role-B
)에 대해 IAM 콘솔에서 신뢰 관계 탭을 선택합니다. -
신뢰 관계 편집을 선택합니다.
-
다음 정책 문서를 추가합니다. 그러면
AccountA
에서Job-Execution-Role-A
가Cross-Account-Role-B
역할을 수임할 수 있습니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA
:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
-
-
Cross-Account-Role-B
를 수임하기 위해 AWS STSAssumeRole
권한을AccountA
의Job-Execution-Role-A
에 부여합니다.-
AWS 계정
AccountA
에 대한 IAM 콘솔에서Job-Execution-Role-A
를 선택합니다. -
다음 정책 명령을
Job-Execution-Role-A
에 추가하여Cross-Account-Role-B
역할에서AssumeRole
작업을 허용합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
AccountB
:role/Cross-Account-Role-B" } ] }
-
수임된 역할 예제
하나의 수임된 역할을 사용하여 계정의 모든 S3 리소스에 액세스하거나 Amazon EMR 6.11 이상을 사용하는 경우 여러 교차 계정 S3 버킷에 액세스할 때 수임할 여러 IAM 역할을 구성할 수 있습니다.
하나의 수임된 역할로 S3 리소스에 액세스
참고
단일 수임된 역할을 사용하도록 작업을 구성하면 entryPoint
스크립트를 포함하여 작업 전반의 모든 S3 리소스가 해당 역할을 사용합니다.
단일 수임된 역할을 사용하여 계정 B의 모든 S3 리소스에 액세스하려면 다음 구성을 지정합니다.
-
EMRFS 구성
fs.s3.customAWSCredentialsProvider
를spark.hadoop.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 Application Master 및 Tez 태스크 컨테이너에서 환경 변수를 지정합니다.
다음 예제에서는 수임된 역할을 사용하여 교차 계정 액세스로 EMR Serverless 작업 실행을 시작하는 방법을 보여줍니다.
여러 수임된 역할로 S3 리소스에 액세스
EMR Serverless 릴리스 6.11.0 이상을 사용하면 여러 교차 계정 버킷에 액세스할 때 수임할 여러 IAM 역할을 구성할 수 있습니다. 계정 B의 여러 수임된 역할을 사용하여 다른 S3 리소스에 액세스하려면 작업 실행을 시작할 때 다음 구성을 사용합니다.
-
EMRFS 구성
fs.s3.customAWSCredentialsProvider
를com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
로 지정합니다. -
S3 버킷 이름에서 수임할 계정 B의 IAM 역할로의 매핑을 정의하려면 EMRFS 구성
fs.s3.bucketLevelAssumeRoleMapping
을 지정합니다. 값은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 작업 실행을 시작하는 방법을 보여줍니다.