태그를 사용하는 AWS Glue 자격 증명 기반(IAM) 액세스 제어 정책 예제
이 섹션에서는 태그를 사용하여 다양한 AWS Glue 작업 및 리소스에 대한 권한을 제어하는 AWS Identity and Access Management(IAM) 정책 예제를 제공합니다. 이러한 예제를 복사해 IAM 콘솔에서 편집할 수 있습니다. 그런 다음 사용자, 역할 및 그룹 등 IAM 자격 증명에 연결할 수 있습니다.
태그를 연결하고 IAM 정책에서 resourceTag
조건을 지정하여 크롤러, 작업, 트리거 및 개발 엔드포인트에 대한 액세스를 제어할 수 있습니다.
태그를 사용하는 액세스 제어 예제
예를 들어 트리거 t2
에 대한 액세스를 계정에 있는 Tom
이라는 특정 사용자로 제한하려 한다고 가정합니다. Sam
을 포함해 다른 모든 사용자들은 t1
을 트리거하기 위한 액세스 권한을 갖습니다. 트리거 t1
및 t2
는 다음과 같은 속성을 갖추고 있습니다.
aws glue get-triggers { "Triggers": [ { "State": "CREATED", "Type": "SCHEDULED", "Name": "t1", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" }, { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" } ] }
t2
를 트리거하기 위한 태그 값 Tom
(aws:resourceTag/Name": "Tom"
)에 AWS Glue 관리자가 연결되어 있습니다. 또한 AWS Glue 관리자는 태그를 기준으로 조건 문과 함께 IAM 정책을 Tom에게 제공했습니다. 결과적으로 Tom은 태그 값 Tom
으로 리소스에서 수행되는 AWS Glue 작업만 사용할 수 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": "*", "Condition": { "StringEquals": { "aws:resourceTag/Name": "Tom" } } } ] }
Tom이 트리거 t1
에 대한 액세스를 시도하면 액세스 거부 메시지가 수신됩니다. 한편, Tom은 트리거 t2
를 성공적으로 검색할 수 있습니다.
aws glue get-trigger --name t1 An error occurred (AccessDeniedException) when calling the GetTrigger operation: User: Tom is not authorized to perform: glue:GetTrigger on resource: arn:aws:glue:us-east-1:123456789012:trigger/t1 aws glue get-trigger --name t2 { "Trigger": { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" } }
이 API 작업은 태그에 대한 필터링을 지원하지 않기 때문에 Tom은 여러 개의 GetTriggers
API를 사용하여 트리거를 나열할 수 없습니다.
Tom에게 GetTriggers
에 대한 액세스 권한을 부여하기 위해 AWS Glue 관리자는 권한을 두 개의 섹션으로 분할하는 정책을 생성합니다. 첫 번째 섹션에서는 Tom에게 GetTriggers
API 작업에서 모든 트리거에 액세스할 수 있도록 허용합니다. 두 번째 섹션에서는 Tom에게 Tom
으로 태그 값이 지정된 API 작업에 액세스할 수 있도록 허용합니다. 이 정책에 따라 Tom에게는 트리거 t2
에 대한 GetTriggers
및 GetTrigger
액세스가 모두 허용됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:GetTriggers", "Resource": "*" }, { "Effect": "Allow", "Action": "glue:*", "Resource": "*", "Condition": { "StringEquals": { "aws:resourceTag/Name": "Tom" } } } ] }
거부와 함께 태그를 사용하는 액세스 제어 예제
리소스 정책을 작성하는 또 다른 방법은 리소스에 대한 액세스를 명시적으로 거부하는 것입니다. 예를 들어, Arnav가 특수 팀의 일원이라고 가정해 보겠습니다. 모든 AWS Glue 작업 리소스에 Team
키 및 Special
값으로 태그가 지정됩니다. 관리자가 자격 증명에 다음 정책을 연결하면 해당 사용자들이 특수 팀으로 태그가 지정된 작업을 제외한 모든 작업에 액세스할 수 있습니다. 이 정책의 첫 번째 섹션에서는 모든 AWS Glue 작업이 허용됩니다. 그러나 두 번째 섹션에서는 특수 팀으로 태그가 지정된 작업에 대한 액세스가 거부됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": "arn:aws:glue:us-east-1:123456789012:job/*" }, { "Effect": "Deny", "Action": "glue:*", "Resource": "arn:aws:glue:us-east-1:123456789012:job/*", "Condition": { "StringEquals": { "aws:ResourceTag/Team": "Special" } } } ] }
Sam은 이전 예제와 똑같은 트리거를 사용하여 트리거 t1
에 액세스할 수 있지만, 트리거 t2
는 액세스할 수 없습니다. 다음 예제는 Sam이 t1
및 t2
에 액세스를 시도할 때의 결과를 보여줍니다.
aws glue get-trigger --name t1 { "Trigger": { "State": "CREATED", "Type": "SCHEDULED", "Name": "t1", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" } } aws glue get-trigger --name t2 An error occurred (AccessDeniedException) when calling the GetTrigger operation: User: Sam is not authorized to perform: glue:GetTrigger on resource: arn:aws:glue:us-east-1:123456789012:trigger/t2 with an explicit deny
명시적 거부 정책은 여러 개의 API에 적용되지 않습니다. 태그 값 Tom
이 트리거 t2
에 연결된 경우에도 Sam은 여전히 GetTriggers
를 호출하여 트리거 t2
를 볼 수 있습니다. 따라서 관리자는 GetTriggers
API 작업에 대한 액세스를 허용하고 싶지 않을 수 있습니다. 다음 예제는 Sam이 GetTriggers
API를 실행할 때의 결과를 보여줍니다.
aws glue get-triggers { "Triggers": [ { "State": "CREATED", "Type": "SCHEDULED", "Name": "t1", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" }, { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" } ] }
목록 및 배치 API 작업과 함께 태그를 사용하는 액세스 제어 예
리소스 정책을 작성하는 세 번째 접근 방식은 태그 값에 대해 리소스를 나열하도록 List
API 작업을 사용해 리소스에 대한 액세스를 허용하는 것입니다. 그런 다음, 해당되는 Batch
API 작업을 사용하여 특정 리소스의 세부 정보에 대한 액세스를 허용합니다. 이러한 접근 방식에서는 관리자가 여러 개의 GetCrawlers
, GetDevEndpoints
, GetJobs
또는 GetTriggers
API 작업에 대한 액세스를 허용할 필요가 없습니다. 대신에 다음 API 작업을 통해 리소스를 나열할 수 있도록 허용할 수 있습니다.
ListCrawlers
ListDevEndpoints
ListJobs
ListTriggers
그리고 다음 API 작업을 통해 개별 리소스에 대한 세부 정보를 확인할 수 있도록 허용할 수 있습니다.
BatchGetCrawlers
BatchGetDevEndpoints
BatchGetJobs
BatchGetTriggers
관리자는 이러한 접근 방식을 사용하기 위해 다음을 수행할 수 있습니다.
크롤러, 개발 엔드포인트, 작업 및 트리거에 태그를 추가합니다.
GetCrawlers
,GetDevEndponts
,GetJobs
,GetTriggers
같은Get
API 작업에 대한 사용자 액세스를 거부합니다.사용자가 액세스 권한을 가진 태그 지정 리소스를 확인할 수 있도록
ListCrawlers
,ListDevEndponts
,ListJobs
,ListTriggers
같은List
API 작업에 대한 사용자 액세스를 허용합니다.TagResource
및UntagResource
같은 AWS Glue 태그 지정 API에 대한 사용자 액세스를 거부합니다.BatchGetCrawlers
,BatchGetDevEndponts
,BatchGetJobs
,BatchGetTriggers
같은BatchGet
API 작업을 통해 리소스 세부 정보에 대한 사용자 액세스를 허용합니다.
예를 들어, ListCrawlers
작업을 호출할 때 사용자 이름과 일치하도록 태그 값을 제공합니다. 그러면 결과는 제공된 태그 값과 일치하는 크롤러의 목록이 됩니다. 주어진 태그를 사용해 각 크롤러에 대한 세부 정보를 얻을 수 있도록 BatchGetCrawlers
에 이름 목록을 제공합니다.
예를 들어 Tom이 Tom
으로 태그가 지정된 트리거의 세부 정보만 검색할 수 있도록 하려면 관리자가 Tom
에서 트리거에 태그를 추가하고, 모든 사용자에 대해 GetTriggers
API 작업 액세스를 거부하고, 모든 사용자에 대해 ListTriggers
및 BatchGetTriggers
액세스를 허용할 수 있습니다. 다음은 AWS Glue 관리자가 Tom에게 부여하는 리소스 정책입니다. 이 정책의 첫 번째 섹션에서는 GetTriggers
에 대한 AWS Glue API 작업이 거부됩니다. 정책의 두 번째 섹션에서는 모든 리소스에 대해ListTriggers
가 허용됩니다. 그러나 세 번째 섹션에서는 Tom
이라고 태그가 지정된 리소스에게 BatchGetTriggers
액세스가 허용됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "glue:GetTriggers", "Resource": "*" }, { "Effect": "Allow", "Action": [ "glue:ListTriggers" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "glue:BatchGetTriggers" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "aws:resourceTag/Name": "Tom" } } } ] }
Tom은 이전 예제와 똑같은 트리거를 사용하여 트리거 t2
에 액세스할 수 있지만, 트리거 t1
에는 액세스할 수 없습니다. 다음 예제는 Tom이 BatchGetTriggers
를 통해 t1
및 t2
에 액세스를 시도할 때의 결과를 보여줍니다.
aws glue batch-get-triggers --trigger-names t2 { "Triggers": { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j2" } ], "Schedule": "cron(0 0/1 * * ? *)" } } aws glue batch-get-triggers --trigger-names t1 An error occurred (AccessDeniedException) when calling the BatchGetTriggers operation: No access to any requested resource.
다음 예제는 Tom이 동일한 BatchGetTriggers
호출에서 트리거 t2
와 트리거 t3
(존재하지 않음) 모두에 액세스를 시도할 때의 결과를 보여줍니다. Tom은 트리거 t2
에 대한 액세스 권한을 가지고 있고 이 트리거가 존재하기 때문에 t2
만 반환됩니다. Tom에게 트리거 t3
에 대한 액세스가 허용되지만 트리거 t3
가 존재하지 않기 때문에 "TriggersNotFound": []
목록에서 응답으로 t3
가 반환됩니다.
aws glue batch-get-triggers --trigger-names t2 t3 { "Triggers": { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j2" } ], "TriggersNotFound": ["t3"], "Schedule": "cron(0 0/1 * * ? *)" } }