계정 간 연합 쿼리 사용 설정 - Amazon Athena

계정 간 연합 쿼리 사용 설정

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

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

고려 사항 및 제한

  • 교차 계정 연동 쿼리 기능은 Lambda 기반 데이터 원본을 사용하는 비 Hive 메타스토어 데이터 커넥터에 사용할 수 있습니다.

  • AWS Glue Data Catalog 데이터 원본 유형에 대해 해당 기능을 사용할 수 없습니다. AWS Glue Data Catalog에 대한 교차 계정 액세스에 관한 자세한 내용은 AWS Glue 데이터 카탈로그에 대한 교차 계정 액세스 섹션을 참조하세요.

  • 커넥터의 Lambda 함수에서 얻은 응답이 Lambda 응답 크기 제한(6MB)을 초과하는 경우 Athena는 자동으로 응답을 암호화하고 일괄 처리한 후 사용자가 구성한 Amazon S3 버킷으로 유출합니다. Athena 쿼리를 실행하는 엔터티가 유출 위치에 대한 액세스 권한을 보유해야 Athena에서 유출한 데이터를 읽을 수 있습니다. 쿼리를 완료한 후에는 데이터가 필요하지 않으므로 유출 위치에서 객체를 삭제하도록 Amazon S3 수명 주기 정책을 설정하는 것이 좋습니다.

  • AWS 리전에서 페더레이션된 쿼리 사용은 지원되지 않습니다.

필요한 권한

  • 데이터 관리자 계정 A가 데이터 분석가 계정 B와 Lambda 함수를 공유하려면 계정 B에서 Lambda가 함수 및 유출 버킷 액세스를 호출해야 합니다. 따라서 계정 A는 리소스 기반 정책을 Lambda 함수에 추가하고 보안 주체 액세스 권한을 Amazon S3 유출 버킷에 추가해야 합니다.

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

      { "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountInvocationStatement", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:aws-region:account-A-id:function:lambda-function-name" } ] }
    2. 다음 정책은 계정 B의 보안 주체에 대한 유출 버킷 액세스를 허용합니다.

      { "Version": "2008-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::spill-bucket", "arn:aws:s3:::spill-bucket/*" ] } ] }
    3. 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. }
  • 계정 A가 해당 커넥터를 계정 B와 공유하려면 계정 B는 계정 A가 AWS Security Token Service AssumeRole API 작업을 호출함으로써 권한을 맡는 AthenaCrossAccountCreate-account-A-id라는 역할을 생성해야 합니다.

    CreateDataCatalog 작업을 허용하는 다음 정책은 계정 B에서 생성되어야 하며 계정 B가 계정 A에 대해 생성하는 AthenaCrossAccountCreate-account-A-id 역할에 추가되어야 합니다.

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

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

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

계정 B와 계정 A의 Lambda 데이터 원본 공유
  1. https://console.aws.amazon.com/athena/에서 Athena 콘솔을 엽니다.

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

    확장 메뉴를 선택합니다.
  3. 데이터 소스(Data Source)을 선택합니다.

  4. 데이터 원본(Data sources) 페이지에서 공유할 커넥터의 링크를 선택합니다.

  5. Lambda 데이터 원본에 대한 세부 정보 페이지에서 오른쪽 상단 모서리에 있는 공유(Share) 옵션을 선택합니다.

    공유를 선택합니다.
  6. 다른 계정과 Lambda-name 공유(Share Lambda-name with another account) 대화 상자에 필수 정보를 입력합니다.

    • 데이터 원본 이름(Data source name)에서 복사된 데이터 원본의 이름을 다른 계정에 표시하려는 대로 입력합니다.

    • 계정 ID(Account ID)에서 데이터 원본을 공유할 계정의 ID(이 경우 계정 B)를 입력합니다.

    데이터 원본 이름 및 AWS 계정 ID를 입력합니다.
  7. 공유를 선택합니다. 지정한 공유 데이터 커넥터가 계정 B에 생성됩니다. 계정 A의 커넥터에 대한 구성 변경 사항은 계정 B의 커넥터에 적용됩니다.

계정 A에서 계정 B로 공유 데이터 원본 추가

데이터 분석가는 데이터 관리자로부터 계정에 추가할 커넥터의 ARN을 제공받을 수 있습니다. 관리자가 제공한 Lambda ARN을 계정에 추가하려면 Athena 콘솔의 데이터 원본(Data sources) 페이지를 사용합니다.

계정에 공유 데이터 커넥터의 Lambda ARN 추가
  1. https://console.aws.amazon.com/athena/에서 Athena 콘솔을 엽니다.

  2. 새 콘솔 환경을 사용하고 있는데 탐색 창이 표시되지 않는 경우 왼쪽의 확장 메뉴를 선택합니다.

  3. 데이터 소스(Data Source)을 선택합니다.

  4. 데이터 원본(Data sources) 페이지에서 데이터 원본 연결(Connect data source)을 선택합니다.

    데이터 원본 연결을 선택합니다.
  5. 사용자 정의 또는 공유 커넥터(Custom or shared connector)를 선택합니다.

    사용자 정의 또는 공유 커넥터(Custom or shared connector)를 선택합니다.
  6. Lambda 함수(Lambda function) 섹션에서 기존 Lamba 함수 사용(Use an existing Lambda function) 옵션을 선택했는지 확인합니다.

    다른 계정의 Lambda ARN 지정.
  7. Lambda 함수 선택 또는 입력(Choose or enter a Lambda function)에서 계정 A의 Lambda ARN을 입력합니다.

  8. 데이터 원본 연결을 선택합니다.

문제 해결

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