

# 태그 기반 IAM 액세스 제어 정책 사용
<a name="tags-access-control"></a>

태그를 사용하면 `Condition` 블록이 포함된 IAM 정책을 작성하여 태그를 기반으로 리소스에 대한 액세스를 제어할 수 있습니다. 이 섹션에는 작업 그룹 및 데이터 카탈로그 리소스에 대한 태그 정책 예제가 포함되어 있습니다.

## 작업 그룹에 대한 태그 정책 예제
<a name="tag-policy-examples-workgroups"></a>

### 예 - 기본 태깅 정책
<a name="tag-policy-examples-workgroups-basic"></a>

다음 IAM 정책은 `workgroupA`라는 작업 그룹에 대해 쿼리를 실행하고 태그 작업을 할 수 있도록 허용합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "athena:ListWorkGroups",
                "athena:ListEngineVersions",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetWorkGroup",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:BatchGetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": "arn:aws:athena:{{us-east-1}}:{{123456789012}}:workgroup/{{workgroupA}}"
        }
    ]
}
```

------

### 예 - 태그 키와 태그 값 페어를 기반으로 작업 그룹에서 작업을 거부하는 정책 블록
<a name="tag-policy-examples-workgroups-basic"></a>

작업 그룹과 같은 리소스에 연결된 태그를 리소스 태그라고 합니다. 리소스 태그를 사용하면 키-값 페어(예: `stack`, `production`)로 태그가 지정된 작업 그룹에 대해 명시된 작업을 거부하는 다음과 같은 정책 블록을 작성할 수 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "athena:GetWorkGroup",
                "athena:UpdateWorkGroup",
                "athena:DeleteWorkGroup",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:BatchGetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery",
                "athena:CreatePreparedStatement",
                "athena:GetPreparedStatement",
                "athena:ListPreparedStatements",
                "athena:UpdatePreparedStatement",
                "athena:DeletePreparedStatement"
            ],
            "Resource": "arn:aws:athena:{{us-east-1}}:{{123456789012}}:workgroup/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/{{stack}}": "{{production}}"
                }
            }
        }
    ]
}
```

------

### 예 - 지정된 태그에 대한 태그 변경 작업 요청을 제한하는 정책 블록
<a name="tag-policy-examples-workgroups-restricted-specific"></a>

태그를 변경하는 작업에 파라미터로 전달되는 태그(예: 태그가 있는 `TagResource`, `UntagResource`, 또는 `CreateWorkGroup`)를 요청 태그라고 합니다. 다음 예제 정책 블록에서는 전달된 태그 중 하나에 `costcenter` 키와 `1`, `2` 또는 `3` 값이 있는 경우에만 `CreateWorkGroup` 작업을 허용합니다.

**참고**  
IAM 역할이 `CreateWorkGroup` 작업의 일환으로 태그를 전달할 수 있도록 하려면 `TagResource` 및 `CreateWorkGroup` 작업에 대한 권한을 해당 역할에 부여해야 합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateWorkGroup",
                "athena:TagResource"
            ],
            "Resource": "arn:aws:athena:{{us-east-1}}:{{123456789012}}:workgroup/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/{{costcenter}}": [
                        "{{1}}",
                        "{{2}}",
                        "{{3}}"
                    ]
                }
            }
        }
    ]
}
```

------

## 데이터 카탈로그에 대한 태그 정책 예제
<a name="tag-policy-examples-data-catalogs"></a>

### 예 - 기본 태깅 정책
<a name="tag-policy-examples-data-catalogs-basic"></a>

다음 IAM 정책을 사용하면 `datacatalogA`라는 데이터 카탈로그에 대한 태그와 상호 작용할 수 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListWorkGroups",
                "athena:ListEngineVersions",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetWorkGroup",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:BatchGetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StopQueryExecution",
                "athena:GetQueryResults",
                "athena:GetQueryResultsStream",
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:BatchGetNamedQuery",
                "athena:ListNamedQueries",
                "athena:DeleteNamedQuery"
            ],
            "Resource": [
                "arn:aws:athena:{{us-east-1}}:{{123456789012}}:workgroup/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateDataCatalog",
                "athena:GetDataCatalog",
                "athena:UpdateDataCatalog",
                "athena:DeleteDataCatalog",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource"
            ],
            "Resource": "arn:aws:athena:{{us-east-1}}:{{123456789012}}:datacatalog/{{datacatalogA}}"
        }
    ]
}
```

------

### 예 - 태그 키와 태그 값 페어를 기반으로 데이터 카탈로그에서 작업을 거부하는 정책 블록
<a name="tag-policy-examples-data-catalogs-deny-actions"></a>

리소스 태그를 사용하여 특정 태그 키-값 페이로 태그가 지정된 데이터 카탈로그에서 특정 작업을 거부하는 정책 블록을 작성할 수 있습니다. 다음 예제 정책은 태그 키-값 페어(`stack`, `production`)가 있는 데이터 카탈로그에 대한 작업을 거부합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "athena:CreateDataCatalog",
                "athena:GetDataCatalog",
                "athena:UpdateDataCatalog",
                "athena:DeleteDataCatalog",
                "athena:GetDatabase",
                "athena:ListDatabases",
                "athena:GetTableMetadata",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:TagResource",
                "athena:UntagResource",
                "athena:ListTagsForResource"
            ],
            "Resource": "arn:aws:athena:{{us-east-1}}:{{123456789012}}:datacatalog/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/{{stack}}": "{{production}}"
                }
            }
        }
    ]
}
```

------

### 예 - 지정된 태그에 대한 태그 변경 작업 요청을 제한하는 정책 블록
<a name="tag-policy-examples-data-catalogs-action-specific-tags"></a>

태그를 변경하는 작업에 파라미터로 전달되는 태그(예: 태그가 있는 `TagResource`, `UntagResource`, 또는 `CreateDataCatalog`)를 요청 태그라고 합니다. 다음 예제 정책 블록에서는 전달된 태그 중 하나에 `costcenter` 키와 `1`, `2` 또는 `3` 값이 있는 경우에만 `CreateDataCatalog` 작업을 허용합니다.

**참고**  
IAM 역할이 `CreateDataCatalog` 작업의 일환으로 태그를 전달할 수 있도록 하려면 `TagResource` 및 `CreateDataCatalog` 작업에 대한 권한을 해당 역할에 부여해야 합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateDataCatalog",
                "athena:TagResource"
            ],
            "Resource": "arn:aws:athena:{{us-east-1}}:{{123456789012}}:datacatalog/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/{{costcenter}}": [
                        "{{1}}",
                        "{{2}}",
                        "{{3}}"
                    ]
                }
            }
        }
    ]
}
```

------