Lake Formation으로 테이블 또는 데이터베이스 접근 관리하기
Lake Formation으로 테이블 또는 데이터베이스 접근 관리하기
테이블 버킷을 Lake Formation과 통합했을 때 테이블과 데이터베이스에 대한 접근을 관리하는 방법을 설명해요.
출처: Managing access to a table or database with Lake Formation
본문
테이블 버킷이 Lake Formation을 사용하는 AWS 분석 서비스와 통합되어 있다면, Lake Formation이 테이블에 대한 접근을 관리하고 각 IAM 프린시펄(사용자 또는 역할)이 그들에 대해 작업을 수행하도록 승인받아야 요구해요. Lake Formation은 자체 권한 모델(Lake Formation permissions)을 사용해 Data Catalog 리소스에 대한 세밀한(fine-grained) 접근 제어를 가능하게 해요.
자세한 내용은 AWS Lake Formation Developer Guide의 Overview of Lake Formation permissions을 참고해 주세요.
AWS Lake Formation에는 두 가지 주요 권한 유형이 있어요.
- 메타데이터 접근 권한 (Metadata access permissions) – Data Catalog에서 메타데이터 데이터베이스와 테이블을 만들고, 읽고, 업데이트하고, 삭제하는 능력을 제어해요.
- 기본 데이터 접근 권한 (Underlying data access permissions) – Data Catalog 리소스가 가리키는 기본 Amazon S3 위치의 데이터를 읽고 쓰는 능력을 제어해요.
Lake Formation은 자체 권한 모델과 IAM 권한 모델을 조합해 Data Catalog 리소스와 기본 데이터에 대한 접근을 제어해요.
- Data Catalog 리소스나 기본 데이터에 접근하는 요청이 성공하려면, 그 요청이 IAM과 Lake Formation 양쪽의 권한 검사를 모두 통과해야 해요.
- IAM 권한은 Lake Formation 및 AWS Glue API와 리소스에 대한 접근을 제어하고, Lake Formation 권한은 Data Catalog 리소스, Amazon S3 위치, 기본 데이터에 대한 접근을 제어해요.
Lake Formation 권한은 부여된 리전에서만 적용되며, 프린시펄이 Lake Formation 권한을 부여받으려면 데이터 레이크 관리자나 필요한 권한을 가진 다른 프린시펄에게 승인받아야 해요.
테이블 버킷 통합을 수행한 사용자라면 여러분의 테이블에 이미 Lake Formation 권한이 있어요. 여러분만이 테이블에 접근할 유일한 프린시펄이라면 이 단계를 건너뛸 수 있어요. 다른 IAM 프린시펄에게만 테이블에 대한 Lake Formation 권한을 부여하면 돼요. 이렇게 하면 다른 프린시펄이 쿼리를 실행할 때 테이블에 접근할 수 있어요. 자세한 내용은 Granting Lake Formation permission on a table or database를 참고해 주세요.
테이블 또는 데이터베이스에 Lake Formation 권한 부여하기
Lake Formation 콘솔이나 AWS CLI를 통해 테이블 버킷의 테이블 또는 데이터베이스에 프린시펄에게 Lake Formation 권한을 부여할 수 있어요.
외부 계정이나 다른 계정의 IAM 프린시펄에게 Data Catalog 리소스에 대한 Lake Formation 권한을 부여하면, Lake Formation은 AWS Resource Access Manager(AWS RAM) 서비스를 사용해 리소스를 공유해요. 수혜(grantee) 계정이 부여자(grantor) 계정과 같은 조직에 있으면 공유 리소스를 즉시 사용할 수 있어요. 수혜 계정이 같은 조직에 없으면 AWS RAM이 수혜 계정에 리소스 부여를 수락하거나 거부하도록 초대장을 보내요. 그런 다음 공유 리소스를 사용 가능하게 하려면 수혜 계정의 데이터 레이크 관리자가 AWS RAM 콘솔이나 AWS CLI로 초대장을 수락해야 해요. 교차 계정 데이터 공유에 대한 자세한 내용은 AWS Lake Formation Developer Guide의 Cross-account data sharing in Lake Formation을 참고해 주세요.
Lake Formation 콘솔로 권한 부여
- AWS Lake Formation 콘솔(https://console.aws.amazon.com/lakeformation/)을 열고 데이터 레이크 관리자로 로그인합니다. 데이터 레이크 관리자 만드는 방법은 AWS Lake Formation Developer Guide의 Create a data lake administrator를 참고해 주세요.
- 탐색 창에서 Data permissions를 선택하고 Grant를 선택합니다.
- Grant Permissions 페이지의 Principals에서 다음 중 하나를 수행합니다.
- Amazon Athena 또는 Amazon Redshift의 경우 IAM users and roles를 선택하고 쿼리에 사용하는 IAM 프린시펄을 선택합니다.
- Amazon Data Firehose의 경우 IAM users and roles를 선택하고 테이블로 스트리밍하기 위해 만든 서비스 역할을 선택합니다.
- Quick의 경우 SAML users and groups를 선택하고 Quick 관리 사용자의 Amazon Resource Name(ARN)을 입력합니다.
- AWS Glue Iceberg REST 엔드포인트 접근의 경우 IAM users and roles를 선택하고 클라이언트용으로 만든 IAM 역할을 선택합니다. 자세한 내용은 Create an IAM role for your client를 참고해 주세요.
- LF-Tags or catalog resources 아래에서 Named Data Catalog resources를 선택합니다.
- Catalogs에서 테이블 버킷을 통합할 때 만든 서브카탈로그를 선택합니다(예:
account-id:s3tablescatalog/amzn-s3-demo-bucket). - Databases에서 만든 S3 테이블 버킷 네임스페이스를 선택합니다.
- (선택) Tables에서 테이블 버킷에 만든 S3 테이블을 선택합니다. 참고: Athena 쿼리 편집기에서 새 테이블을 만들고 있다면 테이블을 선택하지 마세요.
- 다음 중 하나를 수행합니다.
- 이전 단계에서 테이블을 지정했다면 Table permissions에서 Super를 선택합니다.
- 이전 단계에서 테이블을 지정하지 않았다면 Database permissions로 이동합니다.
- 교차 계정 데이터 공유에서는 Super를 선택해 다른 프린시펄에게 데이터베이스의 모든 권한을 부여할 수 없어요. 대신 Describe 같은 더 세밀한 권한을 선택하세요.
- Grant를 선택합니다.
AWS CLI로 권한 부여
데이터 레이크 관리자로 다음 AWS CLI 명령을 실행해야 해요. 자세한 내용은 AWS Lake Formation Developer Guide의 Create a data lake administrator를 참고해 주세요.
다음 명령을 실행해 S3 테이블 버킷의 테이블에 대한 Lake Formation 권한을 IAM 프린시펄에게 부여해 그 테이블에 접근하게 해요. 이 예시를 사용하려면 사용자 입력 플레이스홀더를 여러분의 정보로 바꿔 넣으세요.
aws lakeformation grant-permissions \
--region us-east-1 \
--cli-input-json \
'{ "Principal": { "DataLakePrincipalIdentifier": "user or role ARN, for example, arn:aws:iam::account-id:role/example-role" },
"Resource": { "Table": { "CatalogId": "account-id:s3tablescatalog/amzn-s3-demo-bucket",
"DatabaseName": "S3 table bucket namespace, for example, test_namespace",
"Name": "S3 table bucket table name, for example test_table"
}
},
"Permissions": [
"ALL"
]
}'