

# 작업 태그를 사용하여 Batch Operations에 대한 권한 제어
<a name="batch-ops-job-tags-examples"></a>

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

각 배치 작업에 최대 50개의 작업 태그를 적용할 수 있습니다. 태그를 통해 세분화된 정책을 설정하여 작업을 편집할 수 있는 사용자 집합을 제한할 수 있습니다. 작업 태그가 있을 경우 사용자가 작업을 취소하고, 확인 상태의 작업을 활성화하거나 작업의 우선 순위 레벨을 변경할 수 있는 능력을 부여하거나 제한할 수 있습니다. 또한 모든 새 작업에 태그를 적용하고 태그에 대해 허용되는 키-값 페어를 지정할 수 있습니다. [AWS Identity and Access Management (IAM) 정책 언어](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html)를 사용하여 이러한 모든 조건을 표현할 수 있습니다. 자세한 정보는 **서비스 승인 참조에서 [Amazon S3에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)를 참조하세요.

S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 [Amazon S3 API 작업에 필요한 권한](using-with-s3-policy-actions.md) 섹션을 참조하세요.

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

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

다음 예제에서는 다음 부서를 사용하며 각 부서는 Batch Operations를 다양한 방식으로 활용합니다.
+ 재무
+ 규정 준수
+ 비즈니스 인텔리전스
+ 엔지니어링

**Topics**
+ [사용자 및 리소스에 태그를 할당하여 액세스 제어](#job-tags-examples-attaching-tags)
+ [단계별 배치 작업 태그 지정 및 작업 우선 순위 제한 적용](#tagging-jobs-by-stage-and-enforcing-limits-on-job-priority)

## 사용자 및 리소스에 태그를 할당하여 액세스 제어
<a name="job-tags-examples-attaching-tags"></a>

이 시나리오에서는 관리자가 [속성 기반 액세스 제어(ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)를 사용하고 있습니다. ABAC는 사용자와 AWS 리소스 모두에 태그를 연결하여 권한을 정의하는 IAM 권한 부여 전략입니다.

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

**키 : 값**
+ `department : Finance`
+ `department : Compliance`
+ `department : BusinessIntelligence`
+ `department : Engineering`
**참고**  
작업 태그 키와 값은 대/소문자를 구분합니다.

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

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

이 예제의 정책에는 다음과 같은 세 가지 정책 문이 포함되어 있습니다.
+ 정책의 첫 번째 문은 작업 생성 요청에 해당 부서와 일치하는 작업 태그가 포함되어 있는 경우 사용자가 배치 작업을 생성할 수 있도록 허용합니다. 이는 정책 평가 시 사용자의 부서 태그로 대체되는 `"${aws:PrincipalTag/department}"` 구문을 사용하여 표현됩니다. `("aws:RequestTag/department")` 요청에서 부서 태그에 대해 제공된 값이 사용자의 부서와 일치하면 조건이 충족됩니다.
+ 정책의 두 번째 문은 사용자가 업데이트 중인 작업이 사용자의 부서와 일치하는 경우 사용자가 작업의 우선 순위를 변경하거나 작업 상태를 업데이트할 수 있도록 허용합니다.
+ 세 번째 문은 (1) 부서 태그가 보존되고 (2) 업데이트하려는 작업이 해당 부서 내에 있는 한 사용자가 `PutJobTagging` 요청을 통해 언제든지 배치 작업 태그를 업데이트할 수 있도록 허용합니다.

------
#### [ JSON ]

****  

```
{
      "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}"        
                }      
            }    
        }  
    ]
}
```

------

## 단계별 배치 작업 태그 지정 및 작업 우선 순위 제한 적용
<a name="tagging-jobs-by-stage-and-enforcing-limits-on-job-priority"></a>

모든 S3 배치 작업에는 Amazon S3이 작업을 실행할 순서를 결정하는 데 사용하는 숫자 우선 순위가 있습니다. 이 예제에서는 다음과 같이 대부분의 사용자가 작업에 할당할 수 있는 최대 우선 순위를 제한하고, 제한된 권한 사용자 집합에 대해 높은 우선 순위 범위를 예약합니다.
+ QA 스테이지 우선 순위 범위(낮음): 1-100
+ 프로덕션 단계 우선 순위 범위(높음): 1-300

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

**키 : 값**
+ `stage : QA`
+ `stage : Production`

### 부서 내에서 우선 순위가 낮은 작업 생성 및 업데이트
<a name="creating-and-updating-low-priority-jobs"></a>

이 정책은 부서 기반 제한 외에 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": "*"
    }
    ]
}
```

### 부서 내에서 우선 순위가 높은 작업 생성 및 업데이트
<a name="creating-and-updating-high-priority-jobs"></a>

일부 사용자는 QA 또는 Production 중 하나에서 우선 순위가 높은 작업을 생성할 수 있어야 합니다. 이 요구를 지원하기 위해 이전 섹션의 우선 순위가 낮은 정책에 맞게 조정된 관리형 정책을 생성합니다.

이 정책은 다음을 수행합니다.
+ 사용자가 `stage=QA` 태그 또는 `stage=Production` 태그를 사용하여 부서에서 작업을 생성하거나 업데이트할 수 있습니다.
+ 사용자는 작업의 우선 순위를 최대 300개까지 생성하거나 업데이트할 수 있습니다.

------
#### [ JSON ]

****  

```
{
      "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"        
                    ]      
                }    
            }  
        }  
    ]
}
```

------