Amazon EMR on EKS에 대한 크로스 계정 액세스 설정 - 아마존 EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EMR on EKS에 대한 크로스 계정 액세스 설정

Amazon EMR on EKS에 대한 크로스 계정 액세스를 설정할 수 있습니다. 크로스 계정 액세스를 통해 한 AWS 계정의 사용자가 다른 AWS 계정에 속한 기본 데이터에 액Amazon EMR세스하고 Amazon EMR on EKS 작업을 실행할 수 있습니다.

필수 조건

Amazon EMR on EKS에서 크로스 계정 액세스를 설정하려면 다음 AWS 계정에 로그인한 상태에서 작업을 완료합니다.

  • AccountA ‐ Amazon EMR을 EKS 클러스터의 네임스페이스에 등록하여 Amazon EMR on EKS 가상 클러스터를 생성하는 AWS 계정.

  • AccountB ‐ Amazon EMR on EKS 작업에서 액세스하려는 Amazon S3 버킷 또는 DynamoDB 테이블이 포함된 AWS 계정.

크로스 계정 액세스를 설정하기 전에 AWS 계정에서 다음과 같은 준비를 마쳐야 합니다.

크로스 계정 Amazon S3 버킷 또는 DynamoDB 테이블에 액세스하는 방법

Amazon EMR on EKS에서 크로스 계정 액세스를 설정하려면 다음 단계를 수행합니다.

  1. AccountB에서 Amazon S3 버킷(cross-account-bucket)을 생성합니다. 자세한 내용은 버킷 생성 단원을 참조하세요. DynamoDB에 대한 크로스 계정 액세스를 원하는 경우 AccountB에서 DynamoDB 테이블을 생성할 수도 있습니다. 자세한 내용은 DynamoDB 테이블 생성을 참조하세요.

  2. AccountB에서 cross-account-bucket에 액세스할 수 있는 Cross-Account-Role-B IAM 역할을 생성합니다.

    1. IAM 콘솔에 로그인합니다.

    2. 역할을 선택하고 새 역할(Cross-Account-Role-B)을 생성합니다. IAM 역할 생성에 대한 자세한 내용은 IAM 사용 설명서에서 IAM 역할 생성을 참조하세요.

    3. 다음 정책 명령문에서 볼 수 있듯이 cross-account-bucket S3 버킷에 액세스할 수 있는 Cross-Account-Role-B에 대한 권한을 지정하는 IAM 정책을 생성합니다. 그런 다음, IAM 정책을 Cross-Account-Role-B에 연결합니다. 자세한 내용은 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 사용 설명서에서 DynamoDB 테이블 생성을 참조하세요.

      다음은 DynamoDB 테이블(CrossAccountTable)에 액세스하기 위한 정책입니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:AccountB:table/CrossAccountTable" } ] }
  3. Cross-Account-Role-B 역할에 대한 신뢰 관계를 편집합니다.

    1. 역할에 대한 신뢰 관계를 구성하려면 2단계에서 생성한 역할(Cross-Account-Role-B)에 대해 IAM 콘솔에서 신뢰 관계 탭을 선택합니다.

    2. 신뢰 관계 편집을 선택합니다.

    3. 다음 정책 문서를 추가합니다. 그러면 AccountAJob-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" } ] }
  4. STS 역할 수임을 통해 AccountAJob-Execution-Role-ACross-Account-Role-B를 수임할 권한을 부여합니다.

    1. AWS 계정 AccountA에 대한 IAM 콘솔에서 Job-Execution-Role-A를 선택합니다.

    2. 다음 정책 명령을 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" } ] }
  5. Amazon S3 액세스의 경우 Amazon EMR on EKS에 작업을 제출하는 동안 다음 spark-submit 파라미터(spark conf)를 설정합니다.

    참고

    기본적으로 EMRFS는 작업 실행 역할을 사용하여 작업에서 S3 버킷에 액세스합니다. 그러나 customAWSCredentialsProviderAssumeRoleAWSCredentialsProvider로 설정된 경우 EMRFS는 Amazon S3 액세스에 대해 Job-Execution-Role-A 대신, 사용자가 ASSUME_ROLE_CREDENTIALS_ROLE_ARN에서 지정하는 해당 역할을 사용합니다.

    • --conf spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider

    • --conf spark.kubernetes.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B \

    • --conf spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B \

    참고

    작업 spark 구성에서 실행기 및 드라이버 env 모두에 대해 ASSUME_ROLE_CREDENTIALS_ROLE_ARN을 설정해야 합니다.

    DynamoDB 크로스 계정 액세스에 대해 --conf spark.dynamodb.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider를 설정해야 합니다.

  6. 다음 예제에서 볼 수 있듯이 크로스 계정 액세스를 사용하여 Amazon EMR on EKS 작업을 실행합니다.

    aws emr-containers start-job-run \ --virtual-cluster-id 123456 \ --name myjob \ --execution-role-arn execution-role-arn \ --release-label emr-6.2.0-latest \ --job-driver '{"sparkSubmitJobDriver": {"entryPoint": "entryPoint_location", "entryPointArguments": ["arguments_list"], "sparkSubmitParameters": "--class <main_class> --conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1 --conf spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider --conf spark.kubernetes.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B --conf spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B"}} ' \ --configuration-overrides '{"applicationConfiguration": [{"classification": "spark-defaults", "properties": {"spark.driver.memory": "2G"}}], "monitoringConfiguration": {"cloudWatchMonitoringConfiguration": {"logGroupName": "log_group_name", "logStreamNamePrefix": "log_stream_prefix"}, "persistentAppUI":"ENABLED", "s3MonitoringConfiguration": {"logUri": "s3://my_s3_log_location" }}}'