

# IAM ポリシーを使用してワークグループのアクセスを制御する
<a name="workgroups-iam-policy"></a>

ワークグループへのアクセスを制御するには、リソースレベルの IAM 許可、またはアイデンティティベースの IAM ポリシーを使用します。IAM ポリシーを使用するときは、常に IAM のベストプラクティスに従うようにしてください。詳細については、「*IAM ユーザーガイド*」の「[IAM でのセキュリティベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

**注記**  
信頼できる ID 伝達が有効になっているワークグループにアクセスするには、Athena [GetWorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetWorkGroup.html) API アクションの応答によって返される `IdentityCenterApplicationArn` に IAM アイデンティティセンターのユーザーを割り当てる必要があります。

次の手順は、Athena に固有の手順です。

IAM 固有の情報については、このセクションの最後に表示されているリンク先を参照してください。JSON キャパシティ予約ポリシーの例についての情報は、「[ワークグループのポリシーの例](example-policies-workgroup.md)」を参照してください。

**IAM コンソールのビジュアルエディタを使用してワークグループポリシーを作成する**

1. AWS マネジメントコンソール にサインインして、IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. 左側のナビゲーションペインで、[**Policies**] (ポリシー)、[**Create policy**] (ポリシーの作成) の順にクリックします。

1. [**Visual editor**] (ビジュアルエディタ) タブで、[**Choose a service**] (サービスの選択) をクリックします。次に、ポリシーに追加する Athena を選択します。

1. **[Select actions]** (アクションの選択) を選択し、ポリシーに追加するアクションを選択します。ビジュアルエディタが Athena で利用できるアクションを表示します。詳細については、「*サービス承認リファレンス*」の「[Amazon Athena のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)」を参照してください。

1. **[Add actions]** (アクションの追加) をクリックして特定のアクションを入力、またはワイルドカード (\$1) を使用して複数のアクションを指定します。

   デフォルトでは、作成しているポリシーが選択するアクションを許可します。Athena 内の `workgroup` リソースに対するリソースレベルのアクセス許可をサポートするアクションを 1 つ、または複数選択すると、エディタが `workgroup` リソースをリストします。

1. **[リソース]** を選択して、ポリシーの特定のワークグループを指定します。JSON ワークグループポリシーの例については、「[ワークグループのポリシーの例](example-policies-workgroup.md)」を参照してください。

1. 以下のように `workgroup` リソースを指定します。

   ```
   arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>
   ```

1. **[Review policy]** (ポリシーの確認) をクリックして、作成するポリシーの **[Name]** (名前) と **[Description**] (説明) (オプション) を入力します。ポリシー概要を確認して、意図したアクセス許可を付与したことを確認します。

1. **[Create Policy]** (ポリシーの作成) をクリックして、新しいポリシーを保存します。

1. このアイデンティティベースのポリシーをユーザー、グループ、またはロールにアタッチします。

詳細については、「*サービス認可リファレンス*」と「*IAM ユーザーガイド*」で以下のトピックを参照してください。
+  [Amazon Athena のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) 
+  [ビジュアルエディタでのポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) 
+  [IAM ポリシーの追加と削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) 
+  [リソースへのアクセスの制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources) 

JSON ワークグループポリシーの例については、「[ワークグループのポリシーの例](example-policies-workgroup.md)」を参照してください。

Amazon Athena アクションの完全なリストについては、「[Amazon Athena API リファレンス](https://docs.aws.amazon.com/athena/latest/APIReference/)」の API アクション名を参照してください。

# ワークグループのポリシーの例
<a name="example-policies-workgroup"></a>

このセクションには、ワークグループに対するさまざまなアクションを有効にするために使用できるポリシーの例が含まれています。IAM ポリシーを使用するときは、常に IAM のベストプラクティスに従うようにしてください。詳細については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)の「*IAM でのセキュリティベストプラクティス*」を参照してください。

ワークグループは、Athena によって管理されている IAM リソースです。そのため、ワークグループポリシーが入力として `workgroup` を実行するアクションを使用する場合、ワークグループの ARN を次のように指定する必要があります。

```
"Resource": [arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>]
```

`<workgroup-name>` は、ワークグループの名前です。例えば、`test_workgroup` という名前のワークグループの場合は、次のようにリソースとして指定します。

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"]
```

Amazon Athena アクションの完全なリストについては、「[Amazon Athena API リファレンス](https://docs.aws.amazon.com/athena/latest/APIReference/)」の API アクション名を参照してください。IAM ポリシーの詳細については、「*IAM ユーザーガイド*」で「[ビジュアルエディタでのポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)」を参照してください。ワークグループ用の IAM ポリシーの作成に関する詳細については、「[IAM ポリシーを使用してワークグループのアクセスを制御する](workgroups-iam-policy.md)」を参照してください。
+  [Example policy for full access to all workgroups](#example1-full-access-all-wkgs) 
+  [Example policy for full access to a specified workgroup](#example2-full-access-this-wkg) 
+  [Example policy for running queries in a specified workgroup](#example3-user-access) 
+  [Example policy for running queries in the primary workgroup](#example4-run-in-primary-access) 
+  [Example policy for management operations on a specified workgroup](#example5-manage-wkgs-access) 
+  [Example policy for listing workgroups](#example6-list-all-wkgs-access) 
+  [Example policy for running and stopping queries in a specific workgroup](#example7-run-queries-access) 
+  [Example policy for working with named queries in a specific workgroup](#example8-named-queries-access) 
+  [Example policy for working with Spark notebooks](#example9-spark-workgroup) 

**Example すべてのワークグループへのフルアクセスのポリシーの例**  
次のポリシーでは、アカウントに存在している可能性があるすべてのワークグループリソースへのフルアクセスを許可します。アカウントの他のすべてのユーザーのワークグループを管理する必要があるユーザーにこのポリシーを使用することをお勧めします。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

**Example 指定したワークグループへのフルアクセスのポリシーの例**  
次のポリシーでは、`workgroupA` という名前の 1 つの特定のワークグループリソースへのフルアクセスを許可します。特定のワークグループを完全に制御しているユーザーにこのポリシーを使用できます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions",
                "athena:ListWorkGroups",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:BatchGetQueryExecution",
                "athena:GetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StartQueryExecution",
                "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"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:DeleteWorkGroup",
                "athena:UpdateWorkGroup",
                "athena:GetWorkGroup",
                "athena:CreateWorkGroup"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA"
            ]
        }
    ]
}
```

**Example 指定したワークグループでクエリを実行するためのポリシーの例**  
次のポリシーでは、ユーザは指定された `workgroupA` でクエリを実行し、それらを表示することを許可されています。ユーザーは、ワークグループの更新や削除など、ワークグループ自体の管理タスクを実行することはできません。このポリシーの例では、ユーザをこのワークグループのみに制限したり、他のワークグループへのアクセスを拒否したりしないことに注意してください。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions",
                "athena:ListWorkGroups",
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetWorkGroup", 
                "athena:BatchGetQueryExecution",
                "athena:GetQueryExecution",
                "athena:ListQueryExecutions",
                "athena:StartQueryExecution",
                "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"
            ]
        }
    ]
}
```

**Example プライマリワークグループでクエリを実行するためのポリシーの例**  
上記の例を変更して、特定のユーザーがプライマリワークグループでクエリを実行できるようにすることができます。  
指定したワークグループでクエリを実行するように設定されているすべてのユーザーに、このプライマリワークグループのリソースを追加することをお勧めします。このリソースをワークグループのユーザーポリシーに追加すると、指定したワークグループが削除されたり無効になったりした場合に役立ちます。この場合、プライマリワークグループでクエリを実行し続けることができます。
アカウントのユーザーがプライマリワークグループでクエリを実行できるようにするには、次の例のように、プライマリワークグループの ARN を含む行を [Example policy for running queries in a specified workgroup](#example3-user-access) のリソースセクションに追加します。  

```
arn:aws:athena:us-east-1:123456789012:workgroup/primary"
```

**Example 指定したワークグループに対する管理オペレーションのポリシーの例**  
次のポリシーでは、ユーザはワークグループ `test_workgroup` の作成、削除、詳細の取得、および更新を許可されています。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListEngineVersions"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateWorkGroup",
                "athena:GetWorkGroup",
                "athena:DeleteWorkGroup",
                "athena:UpdateWorkGroup"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"
            ]
        }
    ]
}
```

**Example ワークグループを一覧表示するためのポリシーの例**  
次のポリシーでは、すべてのワークグループをすべてのユーザーが一覧表示できるようにします。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListWorkGroups"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example 特定のワークグループでクエリを実行および停止するためのポリシーの例**  
このポリシーでは、ユーザーは、ワークグループでクエリを実行できます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:StopQueryExecution"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"
            ]
        }
    ]
}
```

**Example 特定のワークグループで名前付きクエリを使用するポリシーの例**  
次のポリシーでは、ユーザーは指定されたワークグループの名前付きクエリに関する情報を作成、削除、取得するアクセス許可を持っています。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:CreateNamedQuery",
                "athena:GetNamedQuery",
                "athena:DeleteNamedQuery"
            ],
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"            ]
        }
    ]
}
```

**Example Athena で Spark ノートブックを操作するためのポリシーの例**  
Athena で Spark ノートブックを操作するには、次のようなポリシーを使用します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCreatingWorkGroupWithDefaults",
            "Action": [
                "athena:CreateWorkGroup",
                "s3:CreateBucket",
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:AttachRolePolicy",
                "s3:GetBucketLocation",
                "athena:ImportNotebook"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:athena:us-east-1:123456789012:workgroup/Demo*",
                "arn:aws:s3:::123456789012-us-east-1-athena-results-bucket-*",
                "arn:aws:iam::123456789012:role/service-role/AWSAthenaSparkExecutionRole-*",
                "arn:aws:iam::123456789012:policy/service-role/AWSAthenaSparkRolePolicy-*"
            ]
        },
        {
            "Sid": "AllowRunningCalculations",
            "Action": [
                "athena:ListWorkGroups",
                "athena:GetWorkGroup",
                "athena:StartSession",
                "athena:CreateNotebook",
                "athena:ListNotebookMetadata",
                "athena:ListNotebookSessions",
                "athena:GetSessionStatus",
                "athena:GetSession",
                "athena:GetNotebookMetadata",
                "athena:CreatePresignedNotebookUrl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/Demo*"
        },
        {
            "Sid": "AllowListWorkGroupAndEngineVersions",
            "Action": [
                "athena:ListWorkGroups",
                "athena:ListEngineVersions"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```