AWS Glue용 리소스 기반 정책 예제 - AWS Glue

AWS Glue용 리소스 기반 정책 예제

이 섹션에는 크로스 계정 액세스 권한을 부여하는 정책을 비롯해 리소스 기반 정책 예제가 포함되어 있습니다.

다음 예제에서는 AWS Command Line Interface(AWS CLI)를 사용하여 AWS Glue 서비스 API 작업과 상호 작용합니다. AWS Glue 콘솔에서 또는 AWS SDK 중 하나를 사용하여 동일한 작업을 수행할 수 있습니다.

중요

AWS Glue 리소스 정책을 변경하면 계정 내 기존 AWS Glue 사용자에 대한 권한을 실수로 취소해 예기치 않은 중단을 일으킬 수 있습니다. 다음 예제는 개발 또는 테스트 계정에서만 시도해 보고, 변경하기 전에 이러한 예제가 기존 워크플로우에 문제를 일으키지 않는지 확인하십시오.

AWS Glue에서 리소스 기반 정책 사용 시 고려 사항

참고

IAM 정책과 AWS Glue 리소스 정책을 둘 다 전파하려면 몇 초 가량 걸립니다. 새 정책을 연결하더라도 새 정책이 시스템 전체에서 전파되기까지 이전 정책이 계속해서 적용됩니다.

JSON 형식으로 작성된 정책 문서를 사용해 리소스 정책을 생성하거나 수정할 수 있습니다. 정책 구문은 자격 증명 기반 IAM 정책에 대해 동일하지만(IAM JSON 정책 참조 확인) 다음과 같은 예외가 있습니다.

  • 각 정책 설명에는 "Principal" 또는 "NotPrincipal" 블록이 필요합니다.

  • "Principal" 또는 "NotPrincipal"은 유효한 기존 보안 주체를 식별해야 합니다. 와일드카드 패턴(예: arn:aws:iam::account-id:user/*)은 허용되지 않습니다.

  • 정책의 "Resource" 블록에는 다음 정규식 구문과 일치하는 모든 리소스 ARN이 필요합니다. 여기서 첫 번째 %sregion이고 두 번째 %saccount-id입니다.

    *arn:aws:glue:%s:%s:(\*|[a-zA-Z\*]+\/?.*)

    예를 들어, arn:aws:glue:us-west-2:account-id:*arn:aws:glue:us-west-2:account-id:database/default 둘 다 허용되지만 *는 허용되지 않습니다.

  • 자격 증명 기반 정책과 달리 AWS Glue 리소스 정책에는 정책이 연결된 카탈로그에 속한 리소스의 Amazon 리소스 이름(ARN)만 포함되어야 합니다. 이러한 ARN은 항상 arn:aws:glue:로 시작합니다.

  • 정책은 자격 증명이 추가 정책 생성 또는 수정을 수행할 수 없도록 잠기게 만들 수는 없습니다.

  • 리소스 정책 JSON 문서는 크기가 10KB를 초과할 수 없습니다.

리소스 정책을 사용하여 동일한 계정에서 액세스 제어

이 예제에서 계정 A의 관리 사용자는 계정 A의 IAM 사용자인 Alice에게 카탈로그에 대한 모든 액세스 권한을 부여하는 리소스 정책을 생성합니다. Alice에게는 연결된 IAM 정책이 없습니다.

이렇게 하기 위해 관리 사용자가 다음 AWS CLI 명령을 실행합니다.

# Run as admin of Account A $ aws glue put-resource-policy --profile administrator-name --region us-west-2 --policy-in-json '{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::account-A-id:user/Alice" ] }, "Effect": "Allow", "Action": [ "glue:*" ], "Resource": [ "arn:aws:glue:us-west-2:account-A-id:*" ] } ] }'

JSON 정책 문서를 AWS CLI 명령의 일부로 입력하는 대신 정책 문서를 파일로 저장한 다음 AWS CLI 명령에서 파일 경로(file://로 접두사가 지정됨)를 참조할 수 있습니다. 다음은 이렇게 할 수 있는 방법을 보여주는 예제입니다.

$ echo '{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::account-A-id:user/Alice" ] }, "Effect": "Allow", "Action": [ "glue:*" ], "Resource": [ "arn:aws:glue:us-west-2:account-A-id:*" ] } ] }' > /temp/policy.json $ aws glue put-resource-policy --profile admin1 \ --region us-west-2 --policy-in-json file:///temp/policy.json

리소스 정책이 전파된 후 Alice는 다음과 같이 계정 A에 있는 모든 AWS Glue 리소스에 액세스할 수 있습니다.

# Run as user Alice $ aws glue create-database --profile alice --region us-west-2 --database-input '{ "Name": "new_database", "Description": "A new database created by Alice", "LocationUri": "s3://my-bucket" }' $ aws glue get-table --profile alice --region us-west-2 --database-name "default" --table-name "tbl1"}

Alice의 get-table 호출에 대한 응답으로 AWS Glue 서비스는 다음을 반환합니다.

{ "Table": { "Name": "tbl1", "PartitionKeys": [], "StorageDescriptor": { ...... }, ...... } }