작업 태그를 사용하여 S3 배치 작업에 대한 권한 제어 - Amazon Simple Storage Service

작업 태그를 사용하여 S3 배치 작업에 대한 권한 제어

S3 배치 작업 관리를 돕기 위해 작업 태그를 추가할 수 있습니다. 작업 태그를 사용하여 배치 작업에 대한 액세스를 제어하고 작업이 생성될 때 태그를 적용할 수 있습니다.

각 배치 작업에 최대 50개의 작업 태그를 적용할 수 있습니다. 이렇게 하면 작업을 편집할 수 있는 사용자 집합을 제한하는 매우 세부적인 정책을 설정할 수 있습니다. 작업 태그가 있을 경우 사용자가 작업을 취소하고, 확인 상태의 작업을 활성화하거나 작업의 우선 순위 레벨을 변경할 수 있는 능력을 부여하거나 제한할 수 있습니다. 또한 모든 새 작업에 태그를 적용하고 태그에 대해 허용되는 키-값 페어를 지정할 수 있습니다. 동일한 IAM 정책 언어를 사용하여 이러한 모든 조건을 표현할 수 있습니다. 자세한 내용은 Amazon S3에 사용되는 작업, 리소스 및 조건 키 섹션을 참조하세요.

다음 예제에서는 S3 배치 작업 태그를 사용하여 특정 부서(예: 재무 또는 규정 준수 부서)에서 실행되는 작업만 생성 및 편집할 수 있는 권한을 사용자에게 부여하는 방법을 보여줍니다. QA 또는 Production 등 관련된 development의 단계에 따라 작업을 할당할 수도 있습니다.

이 예제에서는 AWS Identity and Access Management(IAM) 정책의 S3 Batch Operations 태그를 사용하여 사용자에게 부서 내에서 실행 중인 작업만 생성하고 편집할 수 있는 권한을 부여합니다. QA 또는 Production 등 관련된 개발의 단계에 따라 작업을 할당합니다.

이 예제에서는 다음과 같은 부서를 사용하며 각 부서는 서로 다른 방식으로 배치 작업을 사용합니다.

  • 재무

  • 규정 준수

  • 비즈니스 인텔리전스

  • 엔지니어링

사용자 및 리소스에 태그를 할당하여 액세스 제어

이 시나리오에서는 관리자가 속성 기반 액세스 제어(ABAC)를 사용하고 있습니다. ABAC는 IAM 사용자와 AWS 리소스 모두에 태그를 연결하여 권한을 정의하는 IAM 권한 부여 전략입니다.

사용자 및 작업에는 다음 부서 태그 중 하나가 할당됩니다.

키 : 값

  • department : Finance

  • department : Compliance

  • department : BusinessIntelligence

  • department : Engineering

    참고

    작업 태그 키와 값은 대/소문자를 구분합니다.

ABAC 액세스 제어 전략을 사용하여 재무 부서의 사용자에게 department=Finance 태그를 IAM 사용자와 연결하여 부서 내에서 S3 배치 작업을 생성하고 관리할 수 있는 권한을 부여합니다.

또한 회사의 모든 사용자가 해당 부서 내에서 S3 배치 작업을 생성하거나 수정할 수 있도록 허용하는 관리형 정책을 IAM 사용자에게 연결할 수 있습니다.

이 예제의 정책에는 다음과 같은 세 가지 정책 문이 포함되어 있습니다.

  • 정책의 첫 번째 문은 작업 생성 요청에 해당 부서와 일치하는 작업 태그가 포함되어 있는 경우 사용자가 배치 작업을 생성할 수 있도록 허용합니다. 이는 정책 평가 시 IAM 사용자의 부서 태그로 대체되는 "${aws:PrincipalTag/department}" 구문을 사용하여 표현됩니다. ("aws:RequestTag/department") 요청에서 부서 태그에 대해 제공된 값이 사용자의 부서와 일치하면 조건이 충족됩니다.

  • 정책의 두 번째 문은 사용자가 업데이트 중인 작업이 사용자의 부서와 일치하는 경우 사용자가 작업의 우선 순위를 변경하거나 작업 상태를 업데이트할 수 있도록 허용합니다.

  • 세 번째 문은 (1) 부서 태그가 보존되고 (2) 업데이트하려는 작업이 해당 부서 내에 있는 한 사용자가 PutJobTagging 요청을 통해 언제든지 배치 작업 태그를 업데이트할 수 있도록 허용합니다.

{ "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 배치 작업에는 Amazon S3이 작업을 실행할 순서를 결정하는 데 사용하는 숫자 우선 순위가 있습니다. 이 예제에서는 다음과 같이 대부분의 사용자가 작업에 할당할 수 있는 최대 우선 순위를 제한하고, 제한된 권한 사용자 집합에 대해 높은 우선 순위 범위를 예약합니다.

  • QA 스테이지 우선 순위 범위(낮음): 1-100

  • 프로덕션 단계 우선 순위 범위(높음): 1-300

이를 위해 작업의 단계를 나타내는 새 태그 세트를 도입합니다.

키 : 값

  • stage : QA

  • stage : Production

부서 내에서 우선 순위가 낮은 작업 생성 및 업데이트

이 정책은 부서 기반 제한 외에 S3 배치 작업 생성 및 업데이트에 대한 두 가지 새로운 제한을 적용합니다.

  • 사용자는 해당 부서에서 작업에 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" ] } } } ] }