

# Athena for Spark에서 크로스 계정 AWS Glue 액세스 구성
<a name="spark-notebooks-cross-account-glue"></a>

이 주제에서는 크로스 계정 AWS Glue 액세스를 위해 소비자 계정 *666666666666* 및 소유자 계정 *999999999999*을 구성하는 방법을 보여줍니다. 계정이 구성되면 소비자 계정은 소유자의 AWS Glue 데이터베이스 및 테이블에서 Athena for Spark의 쿼리를 실행할 수 있습니다.

## 1단계: AWS Glue에서 소비자 역할에 대한 액세스 제공
<a name="spark-notebooks-cross-account-glue-in-aws-glue-provide-access-to-the-consumer-account"></a>

AWS Glue에서는 소유자가 소유자의 AWS Glue 데이터 카탈로그에 대한 소비자 역할 액세스를 제공하는 정책을 생성합니다.

**소유자의 데이터 카탈로그에 대한 소비자 역할 액세스를 허용하는 AWS Glue 정책을 추가하려면**

1. 카탈로그 소유자 계정을 사용하여 AWS Management Console에 로그인합니다.

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

1. 탐색 창에서 **데이터 카탈로그**를 확장하고 **카탈로그 설정**을 선택합니다.

1. **데이터 카탈로그 설정** 페이지의 **권한** 섹션에서 다음과 같은 정책을 추가합니다. 이 정책은 소유자 계정 *999999999999*에 있는 데이터 카탈로그에 대한 소비자 계정 *666666666666* 액세스 역할을 제공합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Cataloguers",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::666666666666:role/Admin",
                       "arn:aws:iam::666666666666:role/AWSAthenaSparkExecutionRole"
                   ]
               },
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-west-2:999999999999:catalog",
                   "arn:aws:glue:us-west-2:999999999999:database/*",
                   "arn:aws:glue:us-west-2:999999999999:table/*"
               ]
           }
       ]
   }
   ```

------

## 2단계: 액세스를 위해 소비자 계정 구성
<a name="spark-notebooks-cross-account-glue-configure-the-consumer-account-for-access"></a>

소비자 계정에서 소유자의 AWS Glue Data Catalog, 데이터베이스 및 테이블에 대한 액세스를 허용하는 정책을 생성하고 정책을 역할에 연결합니다. 다음 예제에서는 소비자 계정 *666666666666*을 사용합니다.

**소유자 AWS Glue Data Catalog에 액세스하기 위한 AWS Glue 정책을 생성하려면**

1. 소비자 계정을 사용하여 AWS Management Console에 로그인합니다.

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 서비스 탐색 창에서 **액세스 관리**를 확장하고 **정책**을 선택합니다.

1. **정책 생성**을 선택합니다.

1. **권한 지정** 페이지에서 **JSON**을 선택합니다.

1. **정책 편집기**에서 소유자 계정의 데이터 카탈로그에 대한 AWS Glue 작업을 허용하는 다음과 같은 JSON 문을 입력합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "glue:*",
               "Resource": [
                   "arn:aws:glue:us-east-1:999999999999:catalog",
                   "arn:aws:glue:us-east-1:999999999999:database/*",
                   "arn:aws:glue:us-east-1:999999999999:table/*"
               ]
           }
       ]
   }
   ```

------

1. **다음**을 선택합니다.

1. **검토 및 생성** 페이지의 **정책 이름**에 정책 이름을 입력합니다.

1. **정책 생성**을 선택합니다.

그런 다음 소비자 계정에서 IAM 콘솔을 사용하여 방금 생성한 정책을 IAM 역할 또는 소비자 계정이 소유자의 데이터 카탈로그에 액세스하는 데 사용할 역할에 연결합니다.

**소비자 계정의 역할에 AWS Glue 정책을 연결하려면**

1. 소비자 계정 IAM 콘솔의 탐색 창에서 **역할**을 선택합니다.

1. **역할** 페이지에서 정책을 연결하려는 역할을 찾습니다.

1. **권한 추가**를 선택하고 **정책 연결**을 선택합니다.

1. 방금 생성한 정책을 찾습니다.

1. 정책의 확인란을 선택하고 **권한 추가**를 선택합니다.

1. 단계를 반복하여 사용하려는 다른 역할에 정책을 추가합니다.

## 3단계: 세션 구성 및 쿼리 생성
<a name="spark-notebooks-cross-account-glue-configure-a-session-and-create-a-query"></a>

Athena Spark의 요청자 계정에서 지정된 역할을 사용하여 [노트북 생성](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook) 또는 [현재 세션 편집](notebooks-spark-getting-started.md#notebooks-spark-getting-started-editing-session-details)을 통해 액세스를 테스트할 세션을 생성합니다. [세션 속성을 구성](notebooks-spark-custom-jar-cfg.md#notebooks-spark-custom-jar-cfg-console)할 때 다음 중 하나를 지정합니다.
+ **AWS Glue 카탈로그 구분자** – 이 방법에서는 쿼리에 소유자 계정 ID를 포함합니다. 세션을 사용하여 다른 소유자의 데이터 카탈로그를 쿼리하려는 경우 이 방법을 사용합니다.
+ **AWS Glue 카탈로그 ID** - 이 방법에서는 데이터베이스를 직접 쿼리합니다. 세션을 사용하여 단일 소유자의 데이터 카탈로그만 쿼리하려는 경우 이 방법이 더 편리합니다.

### AWS Glue 카탈로그 구분자 사용
<a name="spark-notebooks-cross-account-glue-using-the-glue-catalog-separator-approach"></a>

세션 속성을 편집할 때 다음을 추가합니다.

```
{ 
    "spark.hadoop.aws.glue.catalog.separator": "/" 
}
```

셀에서 쿼리를 실행할 때 다음 예제와 같은 구문을 사용합니다. 이 `FROM` 절에서는 데이터베이스 이름 앞에 카탈로그 ID와 구분자가 필요합니다.

```
df = spark.sql('SELECT requestip, uri, method, status FROM `999999999999/mydatabase`.cloudfront_logs LIMIT 5') 
df.show()
```

### AWS Glue 카탈로그 ID 사용
<a name="spark-notebooks-cross-account-glue-using-the-glue-catalog-id-approach"></a>

세션 속성을 편집할 때 다음 속성을 입력합니다. *999999999999*를 소유자 계정 ID로 바꿉니다.

```
{ 
    "spark.hadoop.hive.metastore.glue.catalogid": "999999999999" 
}
```

셀에서 쿼리를 실행할 때는 다음과 같은 구문을 사용합니다. 이 `FROM` 절에서는 데이터베이스 이름 앞에 카탈로그 ID와 구분자가 필요하지 않습니다.

```
df = spark.sql('SELECT * FROM mydatabase.cloudfront_logs LIMIT 10') 
df.show()
```

## 추가 리소스
<a name="spark-notebooks-cross-account-glue-additional-resources"></a>

[AWS Glue 데이터 카탈로그에 대한 크로스 계정 액세스 구성](security-iam-cross-account-glue-catalog-access.md)

*AWS Lake Formation 개발자 안내서*의 [Managing cross-account permissions using both AWS Glue and Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-cross-account.html).

*AWS Prescriptive Guidance Patterns*의 [Configure cross-account access to a shared AWS Glue Data Catalog using Amazon Athena](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-a-shared-aws-glue-data-catalog-using-amazon-athena.html).