

# 교차 계정 페더레이션 쿼리 활성화
<a name="xacct-fed-query-enable"></a>

연합 쿼리를 사용하면 AWS Lambda에 배포된 데이터 원본 커넥터를 사용하여 Amazon S3 이외의 데이터 원본을 쿼리할 수 있습니다. 교차 계정 연합 쿼리 기능을 사용하면 Lambda 함수와 쿼리할 데이터 원본이 다른 계정에 위치하도록 할 수 있습니다.

**참고**  
AWS Glue Data Catalog에 페더레이션 데이터 소스를 등록하지 않은 경우에만 이 방법을 사용합니다. AWS Glue Data Catalog에 데이터 소스를 등록한 경우 AWS Glue Data Catalog 교차 계정 기능 및 권한 모델을 사용합니다. 자세한 내용은 *AWS Glue 사용 설명서*의 [교차 계정 액세스 권한 부여](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html)를 참조하세요.

데이터 관리자는 데이터 커넥터를 데이터 분석가의 계정과 공유하거나 데이터 분석가로서 데이터 관리자의 공유 Lambda ARN을 사용하여 계정에 추가하여 교차 계정 연동 쿼리를 활성화할 수 있습니다. 원래 계정의 커넥터에 대한 구성이 변경되면 업데이트된 구성이 다른 사용자 계정에 있는 커넥터의 공유 인스턴스에 자동으로 적용됩니다.

## 고려 사항 및 제한 사항
<a name="xacct-fed-query-enable-considerations-and-limitations"></a>
+ 교차 계정 연동 쿼리 기능은 Lambda 기반 데이터 원본을 사용하는 비 Hive 메타스토어 데이터 커넥터에 사용할 수 있습니다.
+ AWS Glue Data Catalog 데이터 원본 유형에 대해 해당 기능을 사용할 수 없습니다. AWS Glue Data Catalog에 대한 교차 계정 액세스에 관한 자세한 내용은 [AWS Glue 데이터 카탈로그에 대한 크로스 계정 액세스 구성](security-iam-cross-account-glue-catalog-access.md) 섹션을 참조하세요.
+ 커넥터의 Lambda 함수에서 얻은 응답이 Lambda 응답 크기 제한(6MB)을 초과하는 경우 Athena는 자동으로 응답을 암호화하고 일괄 처리한 후 사용자가 구성한 Amazon S3 버킷으로 유출합니다. Athena 쿼리를 실행하는 엔터티가 유출 위치에 대한 액세스 권한을 보유해야 Athena에서 유출한 데이터를 읽을 수 있습니다. 쿼리를 완료한 후에는 데이터가 필요하지 않으므로 유출 위치에서 객체를 삭제하도록 Amazon S3 수명 주기 정책을 설정하는 것이 좋습니다.
+ AWS 리전에서 페더레이션된 쿼리 사용은 지원되지 않습니다.

## 필수 권한
<a name="xacct-fed-query-enable-required-permissions"></a>

필요한 권한을 설정하려면 계정 A(*444455556666*)와 계정 B(*111122223333*) 모두에서 작업을 수행해야 합니다.

### 계정 A에 대한 작업
<a name="xacct-fed-query-enable-required-permissions-account-a"></a>

데이터 관리자 계정 A가 데이터 분석가 계정 B와 Lambda 함수를 공유하려면 계정 B에서 Lambda가 함수 및 유출 버킷 액세스를 호출해야 합니다. 따라서 계정 A는 [리소스 기반 정책](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)을 Lambda 함수에 추가하고 [보안 주체](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) 액세스 권한을 Amazon S3 유출 버킷에 추가해야 합니다.

1. 다음 정책은 Lambda가 계정 A의 Lambda 함수에서 계정 B에 대한 함수 호출 권한을 부여합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "CrossAccountInvocationStatement",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:user/username"
                   ]
               },
               "Action": "lambda:InvokeFunction",
               "Resource": "arn:aws:lambda:us-east-1:444455556666:function:lambda-function-name"
           }
       ]
   }
   ```

------

1. 다음 정책은 계정 B의 보안 주체에 대한 유출 버킷 액세스를 허용합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
               "AWS": ["arn:aws:iam::111122223333:user/username"]
               },
               "Action": [
                   "s3:GetObject",
                   "s3:ListBucket"
                ],
               "Resource": [
                   "arn:aws:s3:::spill-bucket",
                   "arn:aws:s3:::spill-bucket/*"
               ]
           }
        ]
    }
   ```

------

1. Lambda 함수가 퍼더레이션 SDK가 제공하는 기본 암호화 대신에 AWS KMS 키를 통해 유출 버킷을 암호화하려면 다음 예와 같이 계정 A의 AWS KMS 키 정책은 계정 B의 사용자에게 액세스 권한을 부여해야 합니다.

   ```
   { 
       "Sid": "Allow use of the key", 
       "Effect": "Allow", 
       "Principal": 
       { 
          "AWS": ["arn:aws:iam::account-B-id:user/username"] 
       }, 
       "Action": [ "kms:Decrypt" ], 
       "Resource": "*" // Resource policy that gets placed on the KMS key. 
    }
   ```

### 계정 B에 대한 작업
<a name="xacct-fed-query-enable-required-permissions-account-b"></a>

계정 A가 해당 커넥터를 계정 B와 공유하려면 계정 B는 계정 A가 AWS Security Token Service [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 작업을 호출함으로써 권한을 맡는 `AthenaCrossAccountCreate-account-A-id`라는 역할을 생성해야 합니다.

1. IAM 콘솔 또는 AWS CLI를 사용하여 `AthenaCrossAccountCreate-account-A-id` 역할을 사용자 지정 신뢰 정책 역할로 생성합니다. 사용자 지정 신뢰 정책은 액세스를 위임하고 다른 사람이 AWS 계정에서 작업을 수행하도록 허용합니다. 자세한 단계는 *IAM 사용 설명서*에서 [사용자 지정 신뢰 정책을 사용한 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)을 참조하세요.

   신뢰 관계에는 다음 예와 같이 키가 `AWS`이고 값이 계정 A의 ARN인 위탁자 객체가 있어야 합니다.

   ```
   ...
   "Principal": 
   { 
      "AWS": ["arn:aws:iam::account-A-id:user/username"]
   }, 
   ...
   ```

1. 또한 계정 B에서 `CreateDataCatalog` 작업을 허용하는 다음 정책을 생성합니다.

   ```
   {
    "Effect": "Allow",
    "Action": "athena:CreateDataCatalog",
    "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*"
   }
   ```

1. 계정 B를 사용하여 생성한 `AthenaCrossAccountCreate-account-A-id` 역할에 `CreateDataCatalog` 작업을 허용하는 정책을 추가합니다.

## 계정 A의 데이터 원본을 계정 B와 공유
<a name="xacct-fed-query-enable-sharing-a-lambda-data-source-in-account-a-with-account-b"></a>

사용 권한이 설정된 후에는 Athena 콘솔의 **데이터 소스 및 카탈로그** 페이지를 사용하여 사용자 계정(계정 A)의 데이터 커넥터를 다른 계정(계정 B)과 연결할 수 있습니다. 계정 A는 커넥터의 모든 제어 및 소유권을 유지합니다. 계정 A가 커넥터에 대한 구성을 변경하면 업데이트된 구성이 계정 B의 공유 커넥터에 적용됩니다.

**참고**  
Lambda 유형 데이터 소스만 공유할 수 있으며 AWS Glue 연결을 사용하는 데이터 소스는 공유할 수 없습니다. 자세한 내용은 [사용 가능한 데이터 소스 커넥터](connectors-available.md) 섹션을 참조하세요.

**계정 B와 계정 A의 Lambda 데이터 원본 공유**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)에서 Athena 콘솔을 엽니다.

1. 콘솔 탐색 창이 표시되지 않으면 왼쪽의 확장 메뉴를 선택합니다.  
![\[확장 메뉴를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/nav-pane-expansion.png)

1. **데이터 소스 및 카탈로그**를 선택합니다.

1. **데이터 소스 및 카탈로그** 페이지에서 공유할 커넥터의 링크를 선택합니다.

1. Lambda 데이터 원본에 대한 세부 정보 페이지에서 오른쪽 상단 모서리에 있는 **작업(Actions)** 메뉴에서 **공유(Share)**를 선택합니다.

1. **다른 계정과 *Lambda-name*을 공유하시겠습니까?(Share Lambda-name with another account?)** 대화 상자에 필수 정보를 입력합니다.
   + **데이터 원본 이름(Data source name)**에서 복사된 데이터 원본의 이름을 다른 계정에 표시하려는 대로 입력합니다.
   + **계정 ID(Account ID)**에서 데이터 원본을 공유할 계정의 ID(이 경우 계정 B)를 입력합니다.

1. **공유**를 선택합니다. 지정한 공유 데이터 커넥터가 계정 B에 생성됩니다. 계정 A의 커넥터에 대한 구성 변경 사항은 계정 B의 커넥터에 적용됩니다.

## 계정 A에서 계정 B로 공유 데이터 원본 추가
<a name="xacct-fed-query-enable-add-a-shared-lambda-function-arn-to-your-account"></a>

데이터 분석가는 데이터 관리자로부터 계정에 추가할 커넥터의 ARN을 제공받을 수 있습니다. 관리자가 제공한 Lambda ARN을 계정에 추가하려면 Athena 콘솔의 **데이터 소스 및 카탈로그** 페이지를 사용합니다.

**계정에 공유 데이터 커넥터의 Lambda ARN 추가**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)에서 Athena 콘솔을 엽니다.

1. 탐색 창이 표시되지 않으면 왼쪽의 확장 메뉴를 선택합니다.

1. **데이터 소스 및 카탈로그**를 선택합니다.

1. **데이터 소스 및 카탈로그** 페이지에서 **데이터 소스 생성**을 선택합니다.

1. **데이터 소스 선택** 페이지에서 **사용자 지정 또는 공유 커넥터**를 선택합니다.

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

1. **데이터 소스 세부 정보 입력** 페이지의 **연결 세부 정보** 섹션에서 **Lambda 함수 선택 또는 입력**에 계정 A의 Lambda ARN을 입력합니다.

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

1. **검토 및 생성** 페이지에서 **데이터 소스 생성**을 선택합니다.

## 문제 해결
<a name="xacct-fed-query-enable-troubleshooting"></a>

계정 A에 계정 B에서 역할을 부여할 권한이 없다는 오류 메시지가 나타나면 계정 B에서 생성한 역할 이름의 철자가 올바른지, 올바른 정책이 연결되어 있는지 확인합니다.