작업 태그로 Batch Operations 권한 제어하기
작업 태그로 Batch Operations 권한 제어하기
작업 태그를 활용하면 누가 어떤 작업을 만들고 수정할 수 있는지 세밀하게 제어할 수 있어요. 같은 직원이더라도 부서별로 자신의 부서 작업만 다루게 하거나, 단계(개발·운영)별로 우선순위 상한을 다르게 걸 수도 있죠. IAM 정책 언어로 이런 조건을 모두 표현할 수 있어요.
출처: 문서
본문
Amazon S3 Batch Operations 작업을 관리하는 데 도움이 되도록 작업 태그(job tags)를 추가할 수 있어요. 작업 태그로 Batch Operations 작업에 대한 접근을 제어하고, 어떤 작업이 만들어질 때 태그가 반드시 적용되도록 강제할 수도 있죠.
각 Batch Operations 작업에 최대 50개의 작업 태그를 적용할 수 있어요. 태그를 사용하면 작업을 편집할 수 있는 사용자 집합을 제한하는 세분화된 정책을 설정할 수 있어요. 작업 태그는 사용자가 작업을 취소하거나, 확인 상태의 작업을 활성화하거나, 작업의 우선순위 수준을 바꾸는 능력을 부여하거나 제한할 수 있어요. 또한 모든 새 작업에 태그가 적용되도록 강제하고, 태그에 허용되는 키-값 쌍을 지정할 수도 있죠. 이러한 모든 조건은 AWS Identity and Access Management(IAM) 정책 언어로 표현할 수 있어요. 자세한 내용은 Service Authorization Reference의 Actions, resources, and condition keys for Amazon S3 문서를 참고하세요.
S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 Required permissions for Amazon S3 API operations 문서를 참고하세요.
다음 예제는 S3 Batch Operations 작업 태그를 사용해, 특정 부서(예: Finance, Compliance) 안에서만 실행되는 작업을 사용자가 만들고 편집할 수 있게 권한을 부여하는 방법을 보여줘요. 또한 QA나 Production 같은 개발 단계에 따라 작업을 할당할 수도 있어요.
이 예제에서 IAM 정책의 S3 Batch Operations 작업 태그를 사용해 사용자에게 자기 부서 안에서 실행되는 작업만 만들고 편집할 권한을 부여해요. 개발 단계(예: QA, Production)에 따라 작업을 할당하죠.
다음 예제들은 각각 Batch Operations를 다르게 사용하는 부서를 사용해요.
- Finance
- Compliance
- Business Intelligence
- Engineering
- 사용자와 리소스에 태그를 할당해 접근 제어하기
- 작업을 단계별로 태그하고 작업 우선순위 상한 적용하기
사용자와 리소스에 태그를 할당해 접근 제어하기
이 시나리오에서 관리자는 속성 기반 접근 제어(ABAC, attribute-based access control)를 사용해요. ABAC는 사용자와 AWS 리소스 양쪽에 태그를 붙여 권한을 정의하는 IAM 인가 전략이에요.
사용자와 작업에는 다음 부서 태그 중 하나가 할당돼요.
department: Financedepartment: Compliancedepartment: BusinessIntelligencedepartment: Engineering
참고 작업 태그 키와 값은 대소문자를 구분해요.
ABAC 접근 제어 전략을 사용해, Finance 부서의 사용자에게 자기 부서 안의 S3 Batch Operations 작업을 만들고 관리할 권한을 부여하려면 그 사용자에게 department=Finance 태그를 연결해요.
또한 IAM 사용자에게 회사 내 어떤 사용자든 자기 부서 안에서 S3 Batch Operations 작업을 만들거나 수정할 수 있게 하는 관리형 정책을 연결할 수 있어요.
이 예제의 정책은 세 개의 정책 문을 포함해요.
- 정책의 첫 번째 문은 작업 생성 요청에 자기 부서와 일치하는 작업 태그가 포함되는 경우에만 사용자가 Batch Operations 작업을 만들 수 있게 해요. 이는 정책 평가 시 사용자의 부서 태그로 대체되는
"${aws:PrincipalTag/department}"구문으로 표현해요. 요청의 부서 태그("aws:RequestTag/department")에 제공된 값이 사용자의 부서와 일치하면 조건이 충족돼요. - 두 번째 문은 사용자가 갱신하는 작업이 사용자의 부서와 일치하는 경우에만 작업의 우선순위를 바꾸거나 작업 상태를 갱신할 수 있게 해요.
- 세 번째 문은 (1) 사용자의 부서 태그가 유지되고 (2) 갱신하는 작업이 사용자의 부서 안에 있는 한,
PutJobTagging요청을 통해 사용자가 언제든 Batch Operations 작업의 태그를 갱신할 수 있게 해요.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}"
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobPriority",
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
}
}
}
]
}
작업을 단계별로 태그하고 작업 우선순위 상한 적용하기
모든 S3 Batch Operations 작업에는 Amazon S3가 작업을 실행할 순서를 결정하는 데 사용하는 숫자 우선순위가 있어요. 이 예제에서는 대부분의 사용자가 작업에 할당할 수 있는 최대 우선순위를 제한하고, 더 높은 우선순위 범위는 소수의 권한 있는 사용자만 사용하도록 예약해요. 우선순위 범위는 다음과 같아요.
- QA 단계 우선순위 범위(낮음): 1-100
- Production 단계 우선순위 범위(높음): 1-300
이를 위해 작업의 단계를 나타내는 새 태그 세트를 도입해요.
stage: QAstage: Production
부서 내 낮은 우선순위 작업 만들고 갱신하기
이 정책은 부서 기반 제한 외에도 S3 Batch Operations 작업 생성과 갱신에 두 가지 새 제한을 도입해요.
- 사용자가 작업에
stage=QA태그를 포함해야 한다는 새 조건과 함께 자기 부서의 작업을 만들거나 갱신할 수 있게 해요. - 사용자가 작업의 우선순위를 새 최대치인 100까지 만들거나 갱신할 수 있게 해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}",
"aws:RequestTag/stage": "QA"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 100
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
}
}
},
{
"Effect": "Allow",
"Action": "s3:UpdateJobPriority",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}",
"aws:ResourceTag/stage": "QA"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 100
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/department}",
"aws:RequestTag/stage": "QA",
"aws:ResourceTag/stage": "QA"
}
}
},
{
"Effect": "Allow",
"Action": "s3:GetJobTagging",
"Resource": "*"
}
]
}
부서 내 높은 우선순위 작업 만들고 갱신하기
소수의 사용자는 QA 또는 Production에서 높은 우선순위 작업을 만들어야 할 수도 있어요. 이 요구를 지원하려면 앞 절의 낮은 우선순위 정책을 변형한 관리형 정책을 만들어요.
이 정책은 다음을 수행해요.
- 사용자가
stage=QA또는stage=Production태그 중 하나로 자기 부서의 작업을 만들거나 갱신할 수 있게 해요. - 사용자가 작업의 우선순위를 최대 300까지 만들거나 갱신할 수 있게 해요.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:RequestTag/stage": [
"QA",
"Production"
]
},
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 300
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
}
}
},
{
"Effect": "Allow",
"Action": "s3:UpdateJobPriority",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:ResourceTag/stage": [
"QA",
"Production"
]
},
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 300
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"
},
"ForAnyValue:StringEquals": {
"aws:RequestTag/stage": [
"QA",
"Production"
],
"aws:ResourceTag/stage": [
"QA",
"Production"
]
}
}
}
]
}