AWS Glue Data Catalog의 데이터베이스 및 테이블에 대한 액세스 구성 - Amazon Athena

AWS Glue Data Catalog의 데이터베이스 및 테이블에 대한 액세스 구성

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

참고

이 주제에서는 데이터베이스 및 테이블 수준 보안에 대해 설명합니다. 열 수준, 행 수준 및 셀 수준 보안 구성에 대한 자세한 내용은 Lake Formation 포메이션의 데이터 필터링 및 셀 수준 보안 섹션을 참조하세요.

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

중요

이 단원에서는 IAM ID 기반 정책의 리소스 수준 사용 권한에 대해 설명합니다. 이는 리소스 기반 정책과는 다릅니다. 차이점에 대한 자세한 내용은 IAM 사용 설명서ID 기반 정책 및 리소스 기반 정책을 참조하십시오.

이러한 작업에 대해서는 다음 주제를 참조하세요.

이 작업을 수행하려면 다음 주제를 참조하세요.
리소스에 대한 액세스를 정의하는 IAM 정책 생성 IAM 사용 설명서IAM 정책 생성.
AWS Glue에서 사용하는 IAM ID 기반 정책에 대해 알아봅니다. AWS Glue 개발자 안내서ID 기반 정책(IAM 정책).

이 섹션

제한 사항

AWS Glue Data Catalog 및 Athena에 데이터베이스 및 테이블 수준 액세스 제어를 사용할 경우 다음과 같은 제한 사항을 고려하세요.

  • IAM Identity Center 지원 Athena 작업 그룹을 사용하려면 IAM Identity Center ID를 사용하도록 Lake Formation을 구성해야 합니다. 자세한 내용은 AWS Lake Formation 개발자 안내서의 Integrating IAM Identity Center를 참조하십시오.

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

  • AWS Glue Data Catalog에는 CATALOG, DATABASE, TABLEFUNCTION 리소스가 포함되어 있습니다.

    참고

    이 목록에서 Athena와 AWS Glue Data Catalog 간의 공통적인 리소스는 각 계정에 대한 TABLE, DATABASE, CATALOG입니다. Function은 AWS Glue에만 적용됩니다. Athena의 삭제 작업의 경우, AWS Glue 작업에 대한 권한을 포함해야 합니다. 데이터베이스 및 테이블 수준 권한 예 섹션을 참조하세요.

    계층 구조는 다음과 같습니다. CATALOG는 각 계정 내에서 모든 DATABASES의 상위 항목이고, 각 DATABASE는 자신의 TABLESFUNCTIONS 모두의 상위 항목입니다. 예를 들어, 계정의 카탈로그 내에서 데이터베이스 db에 속한 table_test 테이블의 경우 상위 항목은 계정 내 db와 카탈로그입니다. db 데이터베이스의 경우 상위 항목은 계정 내 카탈로그이고 하위 항목은 테이블과 함수입니다. 리소스의 계층적 구조에 대한 자세한 내용은 AWS Glue 개발자 안내서데이터 카탈로그의 ARN 목록을 참조하세요.

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

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

AWS 리전별로 카탈로그 및 데이터베이스에 대한 AWS Glue 액세스 구성

Athena에서 AWS Glue를 사용하려면 AWS 리전당 계정의 AWS Glue Data Catalog 및 데이터베이스에 대한 액세스 권한을 부여하는 정책이 필요합니다. 데이터베이스를 생성하려면 CreateDatabase 권한도 필요합니다. 다음 예제 정책에서는 AWS 리전, AWS 계정 ID 및 데이터베이스 이름을 사용자의 고유한 이름으로 바꿉니다.

{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases", "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를 실행하려면 카탈로그, myDB 데이터베이스 및 myTable 리소스에 대한 glue:GetPartitions 권한을 부여해야 합니다.

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

AWS Glue 작업의 권한에 대한 자세한 내용은 AWS Glue 개발자 안내서AWS Glue API 권한: 작업 및 리소스 참조를 참조하세요.

데이터베이스 및 테이블 수준 권한 예

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

이 예제에는 Athena와 AWS Glue를 함께 사용할 수 있도록 데이터베이스 및 카탈로그에 대한 액세스가 포함됩니다. 여러 AWS 리전의 경우 리전별로 한 줄씩 각각의 데이터베이스 및 카탈로그에 대해 유사한 정책을 포함합니다.

예제에서는 example_db 데이터베이스와 test 테이블 이름을 사용자의 고유한 데이터베이스 및 테이블 이름으로 바꿉니다.

DDL 문 리소스에 대한 액세스를 부여하는 IAM 액세스 정책 예제
ALTER DATABASE example_db 데이터베이스의 속성을 수정할 수 있습니다.
{ "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" ] }
데이터베이스 생성 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/example_db" ] }
CREATE TABLE example_db 데이터베이스에 test(이)라는 테이블을 생성할 수 있습니다.
{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }, { "Sid": "TablePermissions", "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetTable", "glue:GetPartitions", "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" ] }
DROP DATABASE example_db 데이터베이스를 포함된 모든 테이블과 함께 삭제할 수 있습니다.
{ "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/*" ] }
DROP TABLE example_db 데이터베이스에 test(이)라는 분할된 테이블을 삭제할 수 있습니다. 테이블에 파티션이 없다면 파티션 작업을 포함하지 마세요.
{ "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" ] }
MSCK REPAIR TABLE example_db 데이터베이스에서 test라는 테이블에 Hive 호환 파티션을 추가한 후 카탈로그 메타데이터를 업데이트할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetTable", "glue:GetPartitions", "glue:GetPartition", "glue:BatchCreatePartition" ], "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 DATABASES AWS Glue Data Catalog의 모든 데이터베이스를 나열할 수 있습니다.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/*" ] }
SHOW TABLES example_db의 모든 테이블을 나열할 수 있습니다.
{ "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/*" ] }