[BigQuery API(V2)] JavaでBigQueryテーブルのアクセス許可をテストする

BigQuery API V2(Java)を使用して、
BigQueryテーブルのアクセス許可をテストする方法についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[BigQuery API(V2)] JavaでBigQueryを使う](https://qiita.com/doran/items/8b7ba29672527426e88d)
を参照ください。
:::

|No|||目次|
|---|---|---|---|
|1|||[アクセス許可をテスト](#1-アクセス許可をテスト)|
||1||[スコープ](#11-スコープ)|
||2||[実行](#12-実行)|
||3||[レスポンスの内容](#13-レスポンスの内容)|
||4||[IAM権限](#14-iam権限)|
|||1|[BigQueryの権限](#141-bigqueryの権限)|
|||2|[BigQueryMLタスクの権限](#142-bigquerymlタスクの権限)|

## 1. アクセス許可をテスト
指定したテーブルのアクセス許可をテストします。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM
BigqueryScopes.CLOUD_PLATFORM_READ_ONLY
https://www.googleapis.com/auth/bigquery.readonly
```
[⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)](https://qiita.com/doran/items/8b7ba29672527426e88d#32-bigqueryインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Bigquery bigquery = getBigquery();
    Bigquery.Tables tables = bigquery.tables();
    
    String resource = String.format("projects/%s/datasets/%s/tables/%s",
                                    "プロジェクトID","データセットID","テーブルID");
    
    TestIamPermissionsRequest content = new TestIamPermissionsRequest();
    content.setPermissions(Arrays.asList("bigquery.tables.getIamPolicy"));
    
    Bigquery.Tables.TestIamPermissions permission = tables.testIamPermissions(resource,content);
    
    TestIamPermissionsResponse res = permission.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/tables/{テーブルID}:testIamPermissions
が実行されます。

#### 1.2.2. クエリパラメータ
クエリパラメータはありません。

#### 1.2.3. リクエストボディ
TestIamPermissionsRequestメソッドにより、リクエストボディを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setPermissions|List\<String\>|[チェックするためのIAM権限](#14-iam権限)|

### 1.3. レスポンスの内容
#### TestIamPermissionsResponse
|メソッド|戻り値|説明|
|---|---|---|
|getPermissions|List\<String\>|[許可されたIAM権限](#14-iam権限)|

### 1.4. IAM権限

#### 1.4.1. BigQueryの権限

|権限|説明|
|---|---|
|bigquery.bireservations.get|BI Engine の予約を読み取ります|
|bigquery.bireservations.update|BI Engine の予約を更新します|
|bigquery.capacityCommitments.create|プロジェクトに容量コミットメントを作成します|
|bigquery.capacityCommitments.delete|容量コミットメントを削除します|
|bigquery.capacityCommitments.get|容量コミットメントに関する詳細を取得します|
|bigquery.capacityCommitments.list|プロジェクト内の容量コミットメントすべてを一覧表示します|
|bigquery.capacityCommitments.update|プロジェクト内の容量コミットメントすべてを更新します|
|bigquery.config.update|構成を作成します|
|bigquery.config.get|構成の詳細を取得します|
|bigquery.connections.create|プロジェクト内で新しい接続を作成します|
|bigquery.connections.delete|接続を削除します|
|bigquery.connections.get|接続のメタデータを取得します。認証情報は除外されます|
|bigquery.connections.list|プロジェクト内の接続を一覧表示します|
|bigquery.connections.update|接続とその認証情報を更新します|
|bigquery.connections.updateTag|接続のタグを更新します|
|bigquery.connections.use|接続構成を使用して、リモート データソースに接続します|
|bigquery.connections.delegate|承認済みの外部テーブルとリモート関数を作成するために接続を委任します|
|bigquery.dataPolicies.create|新しいデータポリシーを作成します|
|bigquery.dataPolicies.delete|データポリシーを削除します|
|bigquery.dataPolicies.get|データポリシーに関するメタデータを取得します|
|bigquery.dataPolicies.getIamPolicy|データポリシーの IAM 権限を読み取ります|
|bigquery.dataPolicies.list|プロジェクト内のデータポリシーを一覧表示します|
|bigquery.dataPolicies.maskedGet|データポリシーに関連付けられたポリシータグを持つ列のマスクされたデータを表示します|
|bigquery.dataPolicies.setIamPolicy|データポリシーの IAM 権限を設定します|
|bigquery.dataPolicies.update|データポリシーのメタデータを更新します|
|bigquery.datasets.create|新しい空白のデータセットを作成します|
|bigquery.datasets.createTagBinding|データセットにリソースタグ バインディングを作成します|
|bigquery.datasets.delete|データセットを削除します|
|bigquery.datasets.deleteTagBinding|データセットのリソースタグ バインディングを削除します|
|bigquery.datasets.get|データセットに関するメタデータと権限を取得します|
|bigquery.datasets.getIamPolicy|Google Cloud コンソールでデータセットの IAM 権限を取得するオプションをユーザーに提供するために必要です|
|bigquery.datasets.link|リンクされたデータセットを作成します|
|bigquery.datasets.listTagBindings|データセットのリソースタグ バインディングを一覧表示します|
|bigquery.datasets.setIamPolicy|Google Cloud コンソールでデータセットの IAM 権限を設定するオプションをユーザーに提供するために必要です|
|bigquery.datasets.update|データセットのメタデータと権限を更新します|
|bigquery.datasets.updateTag|データセットの Data Catalog タグを更新します|
|bigquery.jobs.create|プロジェクト内でジョブ（クエリを含む）を実行します|
|bigquery.jobs.get|ジョブのデータとメタデータを取得します|
|bigquery.jobs.list|すべてのジョブを一覧表示し、任意のユーザーが送信した任意のジョブのメタデータを取得します|
|bigquery.jobs.listAll|すべてのジョブを一覧表示し、任意のユーザーが送信した任意のジョブのメタデータを取得します|
|bigquery.jobs.listExecutionMetadata|ユーザーが送信したジョブに関するすべてのジョブ実行メタデータを一覧表示します|
|bigquery.jobs.delete|ジョブのメタデータを削除します|
|bigquery.jobs.update|ジョブをキャンセルします|
|bigquery.models.create|新しいML モデルを作成します|
|bigquery.models.delete|ML モデルを削除します|
|bigquery.models.getData|ML モデルのデータを取得します|
|bigquery.models.getMetadata|ML モデルのメタデータを取得します|
|bigquery.models.list|ML モデルとモデルのメタデータを一覧表示します|
|bigquery.models.updateData|ML モデルのデータを更新します|
|bigquery.models.updateMetadata|ML モデルのメタデータを更新します|
|bigquery.models.export|ML モデルをエクスポートします|
|bigquery.models.updateTag|モデルの Data Catalog タグを更新します|
|bigquery.readsessions.create|Storage Read API を使用して新しい読み取りセッションを作成します|
|bigquery.readsessions.getData|Storage Read API を使用して読み取りセッションからデータを読み取ります|
|bigquery.readsessions.update|Storage Read API を使用して読み取りセッションを更新します|
|bigquery.reservations.create|管理プロジェクトでスロット予約を作成します|
|bigquery.reservations.delete|スロット予約を削除します|
|bigquery.reservations.get|スロット予約の詳細を取得します|
|bigquery.reservations.list|管理プロジェクト内のすべてのスロット予約を一覧表示します|
|bigquery.reservations.update|スロット予約のプロパティを更新します|
|bigquery.reservationAssignments.create|予約割り当てを作成します|
|bigquery.reservationAssignments.delete|予約割り当てを削除します|
|bigquery.reservationAssignments.list|プロジェクト内の予約割り当てすべてを一覧表示します|
|bigquery.reservationAssignments.search|特定のプロジェクト、フォルダ、または組織の予約割り当てを見つけます|
|bigquery.rowAccessPolicies.create|テーブルに新しい行レベルのアクセス ポリシーを作成します|
|bigquery.rowAccessPolicies.delete|テーブルから行レベルのアクセス ポリシーを削除します|
|bigquery.rowAccessPolicies.getFilteredData|テーブルから、行レベルアクセス ポリシーの権限譲受人リストにあるプリンシパルにのみ表示するデータを取得します|
|bigquery.rowAccessPolicies.list|テーブルのすべての行レベルのアクセス ポリシーを表示します|
|bigquery.rowAccessPolicies.overrideTimeTravelRestrictions|行レベルのアクセス ポリシーがある、または以前に存在していたテーブルの過去のデータにアクセスします|
|bigquery.rowAccessPolicies.getIamPolicy|行アクセス ポリシーの IAM 権限を取得します|
|bigquery.rowAccessPolicies.setIamPolicy|行アクセス ポリシーの IAM 権限を設定します|
|bigquery.rowAccessPolicies.update|行レベルのアクセス ポリシーを再作成します|
|bigquery.routines.create|新しいルーティン（関数とストアド プロシージャ）を作成します|
|bigquery.routines.delete|ルーティンを削除します|
|bigquery.routines.get|ルーティンの定義とメタデータを取得します|
|bigquery.routines.list|ルーティンおよびルーティンのメタデータを一覧表示します|
|bigquery.routines.update|ルーティンの定義とメタデータを更新します|
|bigquery.routines.updateTag|ルーティンの Data Catalog タグを更新します|
|bigquery.savedqueries.create|保存したクエリを作成します|
|bigquery.savedqueries.delete|保存したクエリを削除します|
|bigquery.savedqueries.get|保存したクエリのメタデータを取得します|
|bigquery.savedqueries.list|保存したクエリの一覧を表示します|
|bigquery.savedqueries.update|保存したクエリを更新します|
|bigquery.tables.create|新しいテーブルを作成します|
|bigquery.tables.createIndex|テーブルの検索インデックスを作成します|
|bigquery.tables.createSnapshot|新しいテーブル スナップショットを作成します|
|bigquery.tables.createTagBinding|テーブルにリソースタグ バインディングを作成します|
|bigquery.tables.delete|テーブルを削除します|
|bigquery.tables.deleteIndex|テーブルの検索インデックスを削除します|
|bigquery.tables.deleteSnapshot|テーブル スナップショットを削除します|
|bigquery.tables.deleteTagBinding|テーブルのリソースタグ バインディングを削除します|
|bigquery.tables.export|BigQuery からテーブルのデータをエクスポートします|
|bigquery.tables.get|テーブルのメタデータを取得します|
|bigquery.tables.getData|テーブルのデータを取得します|
|bigquery.tables.getIamPolicy|テーブルの IAM ポリシーを読み取ります|
|bigquery.tables.list|テーブルとテーブルのメタデータを一覧表示します|
|bigquery.tables.replicateData|テーブルデータを複製します|
|bigquery.tables.restoreSnapshot|テーブル スナップショットを復元します|
|bigquery.tables.setCategory|テーブル スキーマにポリシータグを設定します|
|bigquery.tables.setIamPolicy|テーブルの IAM ポリシーを変更します|
|bigquery.tables.update|テーブルのメタデータを更新します|
|bigquery.tables.updateData|テーブルのデータを更新します|
|bigquery.tables.updateTag|テーブルの Data Catalog タグを更新します|
|bigquery.transfers.get|転送のメタデータを取得します|
|bigquery.transfers.update|転送を作成、更新、削除します|

#### 1.4.2. BigQueryMLタスクの権限
|権限|説明|
|---|---|
|bigquery.jobs.create<br>bigquery.models.create<br>bigquery.models.getData<br>bigquery.models.updateData|CREATE MODEL ステートメントを使用して新しいモデルを作成する|
|bigquery.jobs.create<br>bigquery.models.create<br>bigquery.models.getData<br>bigquery.models.updateData<br>bigquery.models.updateMetadata|CREATE OR REPLACE MODEL ステートメントを使用して既存のモデルを置き換える|
|bigquery.models.delete|models.delete API を使用してモデルを削除する|
|bigquery.jobs.create<br>bigquery.models.delete|DROP MODEL ステートメントを使用してモデルを削除する|
|bigquery.models.getMetadata|models.get API を使用してモデル メタデータを取得する|
|bigquery.models.list|models.list API を使用してモデルとそのメタデータを一覧表示する
|bigquery.models.updateMetadata|models.delete API を使用してモデル メタデータを更新する|
|bigquery.jobs.create<br>bigquery.models.getData|ML.EVALUATE、ML.PREDICT、ML.TRAINING_INFO、ML.WEIGHTS などの関数を使用して、評価、予測、モデル、特徴の検査を行う|
|bigquery.jobs.create<br>bigquery.models.export|モデルをエクスポートする|
|bigquery.models.updateTag|モデルの Data Catalog タグを更新する|


<br>
<br>
おしまい。。