AWS Glue 데이터 카탈로그의 데이터베이스와 테이블에 대한 세분화된 액세스 - Amazon Athena

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

AWS Glue 데이터 카탈로그의 데이터베이스와 테이블에 대한 세분화된 액세스

Amazon Athena과 AWS Glue 데이터 카탈로그을 함께 사용하면, Athena에서 사용하는 다음 Data Catalog 객체에 대한 리소스 수준 정책을 정의할 수 있습니다.

IAM 자격 증명 기반 정책에서 리소스 수준 권한을 정의합니다.

중요

이 단원에서는 IAM 자격 증명 기반 정책의 리소스 수준 사용 권한에 대해 설명합니다. 이는 리소스 기반 정책과는 다릅니다. 차이에 대한 자세한 내용은 ID 기반 정책 및 리소스 기반 정책 in the AWS ID 및 액세스 관리 사용자 안내서.

이러한 작업에 대해서는 다음 주제를 참조하십시오.

이 작업을 수행하려면 다음 주제를 참조하십시오.
리소스에 대한 세분화된 액세스를 정의하는 IAM 정책 생성 IAM 정책 만들기 in the AWS ID 및 액세스 관리 사용자 안내서.
AWS Glue에서 사용하는 IAM 자격 증명 기반 정책에 대해 알아봅니다. ID 기반 정책(IAM 정책) in the AWS Glue 개발자 가이드.

이 섹션

Limitations

AWS Glue 데이터 카탈로그 및 Athena에서 세분화된 액세스 제어를 사용할 때는 다음 제한 사항을 고려해야 합니다.

  • 데이터베이스와 테이블에 대한 액세스만 제한할 수 있습니다. 세분화된 액세스 제어는 테이블 수준에서 적용되며 테이블 내 개별 파티션에 대한 액세스는 제한할 수 없습니다. 자세한 정보는 AWS Glue의 테이블 파티션 및 버전을 참조하십시오.

  • Athena은(는) AWS Glue 데이터 카탈로그에 대한 교차 계정 액세스를 지원하지 않습니다.

  • The AWS Glue 데이터 카탈로그 에는 다음 리소스가 포함됩니다. CATALOG, DATABASE, TABLE, 그리고 FUNCTION.

    참고

    이 목록에서 공통적인 자원 Athena 그리고 AWS Glue 데이터 카탈로그 are TABLE, DATABASE, 그리고 CATALOG 각 계정에 대해. Function 구체적인 AWS Glue. Athena의 삭제 작업의 경우, AWS Glue 작업에 대한 권한을 포함해야 합니다. 세분화된 정책 예제를 참조하십시오.

    계층은 다음과 같습니다. CATALOG 모든 것이 DATABASES 각 계정에서 DATABASE 이 모든 것이 TABLES and FUNCTIONS. 예를 들어, 이름의 경우 table_test 데이터베이스에 속하는 db 귀하의 계정에 있는 카탈로그는 db 및 계정 내의 카탈로그입니다. db 데이터베이스의 경우 상위 항목은 계정 내 카탈로그이고 하위 항목은 테이블과 함수입니다. 리소스 구조에 대한 자세한 내용은 데이터 카탈로그의 아랍 목록 in the AWS Glue 개발자 가이드.

  • 리소스에 대한 삭제 이외의 모든 Athena 작업의 경우(예: CREATE DATABASE, CREATE TABLE, SHOW DATABASE, SHOW TABLE 또는 ALTER TABLE) Data Catalog에서 리소스(테이블 또는 데이터베이스)와 리소스의 모든 상위 항목에 대해 해당 작업을 호출할 권한이 필요합니다. 예를 들어, 테이블의 경우 상위 항목은 속하는 데이터베이스와 계정에 대한 카탈로그입니다. 데이터베이스의 경우 상위 항목은 계정의 카탈로그입니다. 세분화된 정책 예제를 참조하십시오.

  • Athena에서의 삭제 작업(예: DROP DATABASE 또는 DROP TABLE) 의 경우에는 Data Catalog에서 이 리소스의 모든 상위 항목 및 하위 항목에 대해 삭제 작업을 호출할 권한이 추가로 필요합니다. 예를 들어, 데이터베이스를 삭제하려면 데이터베이스, 카탈로그(데이터베이스의 상위 항목)과 모든 테이블, 사용자 정의 함수(테이블의 하위 항목)에 대한 권한이 필요합니다. 테이블은 하위 항목이 없습니다. DROP TABLE을 실행하려면 테이블, 테이블이 속한 데이터베이스 및 카탈로그에서 이 작업에 대한 사용 권한이 필요합니다. 세분화된 정책 예제를 참조하십시오.

  • 또한 Data Catalog에서 특정 데이터베이스에 대한 액세스를 제한할 때 GetDatabaseCreateDatabase 작업에 대해서는 각 AWS 리전의 default 데이터베이스와 카탈로그에 액세스 정책을 지정해야 합니다. 하나 이상의 리전에서 Athena를 사용한다면, 각 리전에 있는 개별 default 데이터베이스 및 카탈로그에 리소스 ARN용 정책에 대한 개별 라인을 추가해야 합니다.

    예를 들어, GetDatabase 액세스 example_db in the us-east-1 (N.Virginia) 지역 default 다음 두 가지 작업을 위한 정책 내의 데이터베이스 및 카탈로그: GetDatabase and CreateDatabase:

    { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }

필수. 액세스 정책을 Default AWS 지역당 데이터베이스 및 카탈로그

Athena를 AWS Glue 데이터 카탈로그와 함께 사용하기 위해서는 GetDatabaseCreateDatabase와 관련해 default 데이터베이스 및 AWS 리전당 AWS Glue 데이터 카탈로그에 대한 다음 액세스 정책이 마련되어 있어야 합니다.

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }

AWS Glue의 테이블 파티션 및 버전

AWS Glue에서 테이블에는 파티션 및 버전이 있을 수 있습니다. 테이블 버전 및 파티션은 AWS Glue에서 독립적인 리소스로 간주되지 않습니다. 테이블과 테이블의 상위 리소스에 대한 액세스 권한을 부여해 테이블 버전 및 파티션에 대한 액세스 권한을 제공합니다.

세분화된 액세스 제어를 위해서 다음 액세스 권한이 적용됩니다.

  • 세분화된 액세스 제어는 테이블 수준에서 적용됩니다. 데이터베이스와 테이블에 대한 액세스만 제한할 수 있습니다. 예를 들어, 분할된 테이블에 대한 액세스를 허용하는 경우 해당 액세스 권한은 테이블의 모든 파티션에 적용됩니다. 한 테이블의 개별 파티션에 대한 액세스는 제한할 수 없습니다.

    중요

    AWS Glue에서 파티션에 대한 작업을 실행해야 하는 경우 테이블 내 모든 파티션에 대한 액세스 권한을 갖는 것으로는 충분하지 않습니다. 파티션에 대한 작업을 실행하기 위해서는 해당 작업에 대한 권한이 필요합니다. 예를 들어, 데이터베이스 myDB의 테이블 myTable에 대해 GetPartitions를 실행하려면 Data Catalog, myDB 데이터베이스 및 myTable에 대해 glue:GetPartitions 작업을 수행할 권한이 필요합니다.

  • 세분화된 액세스 제어는 테이블 버전에는 적용되지 않습니다. 파티션과 마찬가지로, 테이블의 이전 버전에 대한 액세스 권한은 AWS Glue에서 테이블, 테이블 상위 항목 및 테이블 버전 API에 대한 액세스를 통해 부여됩니다.

사용 권한 관련 정보 AWS Glue 작업, AWS Glue API 사용 권한: 조치 및 리소스 참조 in the AWS Glue 개발자 가이드.

테이블과 데이터베이스에 대한 세분화된 권한 예제

다음 표는 Athena의 데이터베이스와 테이블에 대한 세분화된 액세스를 허용하는 IAM 자격 증명 기반 정책의 예제를 보여줍니다. 처음에는 이 예제로 시작한 다음, 자신의 필요에 따라 특정 데이터베이스와 테이블에 대한 특정 작업을 허용하거나 거부하도록 수정하는 방법을 권장합니다.

다음 예에는 GetDatabaseCreateDatabase 작업과 관련해 default 데이터베이스와 카탈로그에 대한 액세스 정책이 포함되어 있습니다. Athena 및 AWS Glue 데이터 카탈로그를 함께 사용하려면 이 정책이 필요합니다. 여러 AWS 리전의 경우에는 이 정책을 리전별로 한 라인씩 각각의 default 데이터베이스 및 카탈로그에 대해 추가하십시오.

또한 example_db 데이터베이스와 test 테이블 이름을 사용자의 데이터베이스 및 테이블 이름으로 교체해야 합니다.

DDL 문 리소스에 대한 액세스를 부여하는 IAM 액세스 정책 예제
데이터베이스 생성 example_db(이)라는 데이터베이스를 생성할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
데이터베이스 변경 example_db 데이터베이스의 속성을 수정할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:UpdateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
DROP DATABASE example_db 데이터베이스를 포함된 모든 테이블과 함께 삭제할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:DeleteDatabase", "glue:GetTables", "glue:GetTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*", "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*" ] }
SHOW DATABASES AWS Glue 데이터 카탈로그의 모든 데이터베이스를 나열할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/*" ] }
테이블 생성 example_db 데이터베이스에 test(이)라는 테이블을 생성할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
SHOW TABLES example_db의 모든 테이블을 나열할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*" ] }
테이블 삭제 example_db 데이터베이스에 test(이)라는 분할된 테이블을 삭제할 수 있습니다. 테이블에 파티션이 없다면 파티션 작업을 포함하지 마십시오.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:DeleteTable", "glue:GetPartitions", "glue:GetPartition", "glue:DeletePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }