

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

# Amazon EMR on EKS에 대한 크로스 계정 액세스 설정
<a name="security-cross-account"></a>

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

## 사전 조건
<a name="security-cross-account-prereq"></a>

Amazon EMR on EKS에 대한 교차 계정 액세스를 설정하려면 다음 AWS 계정에 로그인한 상태에서 작업을 완료합니다.
+ `AccountA` ‐ Amazon EMR을 EKS 클러스터의 네임스페이스에 등록하여 Amazon EMR on EKS 가상 클러스터를 생성한 AWS 계정입니다.
+ `AccountB` ‐ Amazon EMR on EKS 작업이 액세스하도록 하려는 Amazon S3 버킷 또는 DynamoDB 테이블이 포함된 AWS 계정입니다.

교차 AWS 계정 액세스를 설정하기 전에 계정에서 다음을 준비해야 합니다.
+ 작업을 실행하려는 `AccountA`의 Amazon EMR on EKS 가상 클러스터.
+ 가상 클러스터에서 작업을 실행하는 데 필요한 권한이 있는 `AccountA`의 작업 실행 역할. 자세한 내용은 [작업 실행 역할 생성](creating-job-execution-role.md) 및 [Amazon EMR on EKS에서 작업 실행 역할 사용](iam-execution-role.md) 섹션을 참조하세요.

## 크로스 계정 Amazon S3 버킷 또는 DynamoDB 테이블에 액세스하는 방법
<a name="security-cross-account-steps"></a>

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

1. `AccountB`에서 Amazon S3 버킷(`cross-account-bucket`)을 생성합니다. 자세한 내용은 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) 섹션을 참조하세요. DynamoDB에 대한 크로스 계정 액세스를 원하는 경우 `AccountB`에서 DynamoDB 테이블을 생성할 수도 있습니다. 자세한 내용은 [DynamoDB 테이블 생성](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)을 참조하세요.

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

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

   1. **역할**을 선택하고 새 역할(`Cross-Account-Role-B`)을 생성합니다. IAM 역할 생성에 대한 자세한 내용은 IAM 사용 설명서에서 [IAM 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)을 참조하세요.

   1. 다음 정책 명령문에서 볼 수 있듯이 `cross-account-bucket` S3 버킷에 액세스할 수 있는 `Cross-Account-Role-B`에 대한 권한을 지정하는 IAM 정책을 생성합니다. 그런 다음, IAM 정책을 `Cross-Account-Role-B`에 연결합니다. 자세한 내용은 IAM 사용 설명서에서 [새 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)을 참조하세요.

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:*"
            ],
            "Resource": [
              "arn:aws:s3:::cross-account-bucket",
              "arn:aws:s3:::cross-account-bucket/*"
            ],
            "Sid": "AllowS3"
          }
        ]
      }
      ```

------

      DynamoDB 액세스가 필요한 경우 크로스 계정 DynamoDB 테이블에 액세스할 권한을 지정하는 IAM 정책을 생성합니다. 그런 다음, IAM 정책을 `Cross-Account-Role-B`에 연결합니다. 자세한 내용은 IAM 사용 설명서에서 [DynamoDB 테이블 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html)을 참조하세요.

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

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "dynamodb:*"
            ],
            "Resource": [
              "arn:aws:dynamodb:us-east-1:*:table/CrossAccountTable"
            ],
            "Sid": "AllowDYNAMODB"
          }
        ]
      }
      ```

------

1. `Cross-Account-Role-B` 역할에 대한 신뢰 관계를 편집합니다.

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

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

   1. 다음 정책 문서를 추가합니다. 그러면 `AccountA`의 `Job-Execution-Role-A`에서 이 `Cross-Account-Role-B` 역할을 수임할 수 있습니다.

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "AllowSTSAssumerole",
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::{{123456789012}}:role/Job-Execution-Role-A"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

------

1. STS 역할 수임을 통해 `AccountA`의 `Job-Execution-Role-A`에 `Cross-Account-Role-B`를 수임할 권한을 부여합니다.

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

   1. 다음 정책 명령을 `Job-Execution-Role-A`에 추가하여 `Cross-Account-Role-B` 역할에서 `AssumeRole` 작업을 허용합니다.

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "sts:AssumeRole"
            ],
            "Resource": [
              "arn:aws:iam::*:role/Cross-Account-Role-B"
            ],
            "Sid": "AllowSTSAssumerole"
          }
        ]
      }
      ```

------

1. Amazon S3 액세스의 경우 Amazon EMR on EKS에 작업을 제출하는 동안 다음 `spark-submit` 파라미터(`spark conf`)를 설정합니다.
**참고**  
기본적으로 EMRFS는 작업 실행 역할을 사용하여 작업에서 S3 버킷에 액세스합니다. 그러나 `customAWSCredentialsProvider`가 `AssumeRoleAWSCredentialsProvider`로 설정된 경우 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`를 설정해야 합니다.

1. 다음 예제에서 볼 수 있듯이 크로스 계정 액세스를 사용하여 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" }}}'
   ```