[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.RowAccessPolicies policies = bigquery.rowAccessPolicies();
    
    String resource = String.format(
                "projects/%s/datasets/%s/tables/%s/rowAccessPolicies/%s", 
                "プロジェクトID",
                "データセットID",
                "テーブルID",
                "行アクセスポリシーID");
    
    TestIamPermissionsRequest content = new TestIamPermissionsRequest();
    content.setPermissions(Arrays.asList("bigquery.tables.getIamPolicy"));
    
    Bigquery.RowAccessPolicies.TestIamPermissions test = policies.testIamPermissions(resource,content);
    
    TestIamPermissionsResponse res = test.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/tables/{テーブルID}/rowAccessPolicies/{行アクセスポリシー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>
おしまい。。