

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

# EMR Serverless에서 다른 AWS 계정의 S3 데이터 액세스
<a name="jobs-s3-access"></a>

한 AWS 계정에서 Amazon EMR Serverless 작업을 실행하고 다른 계정에 속한 Amazon S3 버킷의 데이터에 액세스하도록 구성할 수 AWS 있습니다. 이 페이지에서는 EMR Serverless에서 S3에 대한 교차 계정 액세스를 구성하는 방법을 설명합니다.

EMR Serverless에서 실행되는 작업은 S3 버킷 정책 또는 수임된 역할을 사용하여 다른 AWS 계정에서 Amazon S3의 데이터에 액세스할 수 있습니다.

## 사전 조건
<a name="jobs-s3-access-prerequisites"></a>

Amazon EMR Serverless에 대한 교차 계정 액세스를 설정하려면 두 AWS 계정에 로그인한 상태에서 작업을 완료합니다.
+ **`AccountA`** - Amazon EMR Serverless 애플리케이션을 생성한 AWS 계정입니다. 교차 계정 액세스를 설정하기 전에 이 계정에서 다음과 같은 준비를 완료합니다.
  + 작업을 실행하려는 Amazon EMR Serverless 애플리케이션.
  + 애플리케이션에서 작업을 실행하는 데 필요한 권한이 있는 작업 실행 역할. 자세한 정보는 [Amazon EMR Serverless에 대한 작업 런타임 역할](security-iam-runtime-role.md) 섹션을 참조하세요.
+ **`AccountB`** - Amazon EMR Serverless 작업에서 액세스하려는 S3 버킷이 포함된 AWS 계정입니다.

## S3 버킷 정책을 사용하여 교차 계정 S3 데이터에 액세스
<a name="jobs-s3-access-how-to-s3-bucket-policy"></a>

account A에서 account B의 S3 버킷에 액세스하려면 다음 정책을 account B의 S3 버킷에 연결합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExamplePermissions1",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket-name"
      ]
    },
    {
      "Sid": "ExamplePermissions2",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket-name/*"
      ]
    }
  ]
}
```

------

S3 버킷 정책을 통한 S3 교차 계정 액세스에 대한 자세한 내용은 **Amazon Simple Storage Service 사용 설명서의 [예제 2: 버킷 소유자가 교차 계정 버킷 권한 부여](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)를 참조하세요.

## 수임된 역할을 사용하여 교차 계정 S3 데이터에 액세스
<a name="jobs-s3-access-how-to-assumed-role"></a>

Amazon EMR Serverless에 대한 교차 계정 액세스를 설정하는 또 다른 방법은 AWS Security Token Service (AWS STS)의 `AssumeRole` 작업을 사용하는 것입니다.는 사용자에게 제한된 권한의 임시 자격 증명을 요청할 수 있는 글로벌 웹 서비스 AWS STS 입니다. `AssumeRole`로 생성한 임시 보안 자격 증명을 사용하여 EMR Serverless 및 Amazon S3에 대해 API 직접 호출을 수행할 수 있습니다.

다음 단계에서는 수임된 역할을 사용하여 EMR Serverless에서 교차 계정 S3 데이터에 액세스하는 방법을 보여줍니다.

1. `AccountB`에서 Amazon S3 버킷(*cross-account-bucket*)을 생성합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)을 참조하세요. DynamoDB에 대한 크로스 계정 액세스를 원하는 경우 `AccountB`에서 DynamoDB 테이블을 생성합니다. 자세한 내용은 **Amazon DynamoDB 개발자 안내서의 [DynamoDB 테이블 생성](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)을 참조하세요.

1. *교차 계정 버킷*에 액세스할 수 `AccountB`에서 `Cross-Account-Role-B` IAM 역할을 생성합니다.

   1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 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 사용자 설명서*에서 [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 사용 설명서*의 [Amazon 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:*:123456789012: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": [
          {
            "Effect": "Allow",
            "Action": [
              "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::123456789012:role/Job-Execution-Role-A",
            "Sid": "AllowSTSAssumerole"
          }
        ]
      }
      ```

------

1. `AccountA`를 AWS STS 수임할 수 있는 `AssumeRole` 권한을 `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::123456789012:role/Cross-Account-Role-B"
            ],
            "Sid": "AllowSTSAssumerole"
          }
        ]
      }
      ```

------

## 수임된 역할 예제
<a name="jobs-s3-access-how-to-assumed-role-examples"></a>

계정 내 모든 S3 리소스에 액세스하기 위해 단일 역할을 사용하거나, Amazon EMR 6.11 이상 버전에서는 서로 다른 계정 간 S3 버킷에 액세스할 때 적용할 여러 IAM 역할을 구성할 수 있습니다.

**Topics**
+ [하나의 수임된 역할로 S3 리소스에 액세스](#jobs-s3-access-how-to-assumed-role-single)
+ [여러 수임된 역할로 S3 리소스에 액세스](#jobs-s3-access-how-to-assumed-role-multiple)

### 하나의 수임된 역할로 S3 리소스에 액세스
<a name="jobs-s3-access-how-to-assumed-role-single"></a>

**참고**  
단일 수임된 역할을 사용하도록 작업을 구성하면 `entryPoint` 스크립트를 포함하여 작업 전반의 모든 S3 리소스가 해당 역할을 사용합니다.

단일 수임된 역할을 사용하여 계정 B의 모든 S3 리소스에 액세스하려면 다음 구성을 지정합니다.

1. EMRFS 구성 `fs.s3.customAWSCredentialsProvider`를 `com.amazonaws.emr.AssumeRoleAWSCredentialsProvider`로 지정합니다.

1. Spark의 경우 `spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` 및 `spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN`을 사용하여 드라이버 및 실행기에서 환경 변수를 지정합니다.

1. 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 작업 실행을 시작하는 방법을 보여줍니다.

------
#### [ Spark ]

다음 예제에서는 S3에 대한 교차 계정 액세스로 EMR Serverless Spark 작업 실행을 시작하기 위해 수임된 역할을 사용하는 방법을 보여줍니다.

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "entrypoint_location",
            "entryPointArguments": [":argument_1:", ":argument_2:"],
            "sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
        }
    }' \
     --configuration-overrides '{
        "applicationConfiguration": [{
            "classification": "spark-defaults",
            "properties": {
                "spark.hadoop.fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.AssumeRoleAWSCredentialsProvider",
                "spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B",
                "spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B"
            }
        }]
    }'
```

------
#### [ Hive ]

다음 예제에서는 S3에 대한 교차 계정 액세스로 EMR Serverless Hive 작업 실행을 시작하기 위해 수임된 역할을 사용하는 방법을 보여줍니다.

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "hive": {
            "query": "query_location",
            "parameters": "hive_parameters"
        }
    }' \
    --configuration-overrides '{
        "applicationConfiguration": [{
            "classification": "hive-site",
            "properties": {
                "fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.AssumeRoleAWSCredentialsProvider",
                "hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B",
                "tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B",
                "tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B"
            }
        }]
    }'
```

------

### 여러 수임된 역할로 S3 리소스에 액세스
<a name="jobs-s3-access-how-to-assumed-role-multiple"></a>

EMR Serverless 릴리스 6.11.0 이상을 사용하면 여러 교차 계정 버킷에 액세스할 때 가정할 여러 IAM 역할을 구성할 수 있습니다. 계정 B의 여러 수임된 역할을 사용하여 다른 S3 리소스에 액세스하려면 작업 실행을 시작할 때 다음 구성을 사용합니다.

1. EMRFS 구성 `fs.s3.customAWSCredentialsProvider`를 `com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider`로 지정합니다.

1. S3 버킷 이름에서 수임할 계정 B의 IAM 역할로의 매핑을 정의하려면 EMRFS 구성 `fs.s3.bucketLevelAssumeRoleMapping`을 지정합니다. 값은 `bucket1->role1;bucket2->role2` 형식이어야 합니다.

예를 들어, `arn:aws:iam::AccountB:role/Cross-Account-Role-B-1`을 사용하여 버킷 `bucket1`에 액세스하고 `arn:aws:iam::AccountB:role/Cross-Account-Role-B-2`를 사용하여 버킷 `bucket2`에 액세스할 수 있습니다. 다음 예시는 여러 계정 간 역할을 통해 계정 간 액세스로 EMR Serverless 작업 실행을 시작하는 방법을 보여줍니다.

------
#### [ Spark ]

다음 예제에서는 여러 수임된 역할을 사용하여 EMR Serverless Spark 작업 실행을 생성하는 방법을 보여줍니다.

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "entrypoint_location",
            "entryPointArguments": [":argument_1:", ":argument_2:"],
            "sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
        }
    }' \
     --configuration-overrides '{
        "applicationConfiguration": [{
            "classification": "spark-defaults",
            "properties": {
                "spark.hadoop.fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider",
                "spark.hadoop.fs.s3.bucketLevelAssumeRoleMapping": "bucket1->arn:aws:iam::AccountB:role/Cross-Account-Role-B-1;bucket2->arn:aws:iam::AccountB:role/Cross-Account-Role-B-2"
            }
        }]
    }'
```

------
#### [ Hive ]

다음 예는 가정된 여러 역할을 사용하여 EMR Serverless Hive 작업 실행을 생성하는 방법을 보여줍니다.

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "hive": {
            "query": "query_location",
            "parameters": "hive_parameters"
        }
    }' \
    --configuration-overrides '{
        "applicationConfiguration": [{
            "classification": "hive-site",
            "properties": {
                "fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.AssumeRoleAWSCredentialsProvider",
                "fs.s3.bucketLevelAssumeRoleMapping": "bucket1->arn:aws:iam::AccountB:role/Cross-Account-Role-B-1;bucket2->arn:aws:iam::AccountB:role/Cross-Account-Role-B-2"
            }
        }]
    }'
```

------