

# タグベースの 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` など) にパラメータとして渡されるタグは、リクエストタグと呼ばれます。次のポリシーブロックの例では、渡されたタグのいずれかがキー `CreateWorkGroup` と値 `costcenter`、`1`、または `2` を持つ場合にのみ、`3` オペレーションを許可します。

**注記**  
`CreateWorkGroup` オペレーションの一環としてタグを渡すことを IAM ロールに許可する場合は、そのロールに `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` など) にパラメータとして渡されるタグは、リクエストタグと呼ばれます。次のポリシーブロックの例では、渡されたタグのいずれかがキー `CreateDataCatalog` と値 `costcenter`、`1`、または `2` を持つ場合にのみ、`3` オペレーションを許可します。

**注記**  
`CreateDataCatalog` オペレーションの一環としてタグを渡すことを IAM ロールに許可する場合は、そのロールに `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}}"
                    ]
                }
            }
        }
    ]
}
```

------