[BigQuery API(V2)] JavaでBigQueryテーブルにアクセス制御ポリシーを設定する

BigQuery API V2(Java)を使用して、
BigQueryテーブルにアクセス制御ポリシーを設定する方法についてご紹介します。

アクセス制御ポリシーを取得するには、
適切なIAM権限が付与されている必要があります。

権限付与に関しては
[⧉[BigQuery API(V2)] JavaでBigQueryを使う(2.権限付与)](https://qiita.com/doran/items/8b7ba29672527426e88d#2-権限付与)
を参照ください。

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

|No||目次|
|---|---|---|
|1||[アクセス制御ポリシーを設定](#1-アクセス制御ポリシーを設定)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|

## 1. アクセス制御ポリシーを設定
指定したテーブルにアクセス制御ポリシーを設定します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM
```
[⧉[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");
    
    SetIamPolicyRequest content = new SetIamPolicyRequest();
    //ポリシーの生成
    
    Bigquery.Tables.SetIamPolicy policy = tables.setIamPolicy(resource,content);
    
    Policy res = policy.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/datasets/{データセットID}/tables/{テーブルID}:setIamPolicy
が実行されます。

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

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

|メソッド|引数|説明|
|---|---|---|
|setPolicy|[Policy](#policyset)|ポリシー|
|setUpdateMask|String|変更するフィール(カンマ区切り)|

#### Policy(Set)
|メソッド|引数|説明|
|---|---|---|
|setVersion|Integer|ポリシーのバージョン|
|setBindings|List\<[Binding](#bindingset)\>|プリンシパルとの関連情報|
|setAuditConfigs|List\<[AuditConfig](#auditconfigset)\>|クラウド監査ログ構成|
|setEtag|String|ハッシュ値|

#### Binding(Set)
|メソッド|引数|説明|
|---|---|---|
|setRole|String|割り当てられるロール|
|setMembers|List\<String\>|リソースへのアクセスをリクエストするプリンシパル|
|setCondition|[Expr](#exprset)|関連付けられている条件|

#### Expr(Set)
|メソッド|引数|説明|
|---|---|---|
|setExpression|String|共通式言語構文での式のテキスト表現|
|setTitle|String|式のタイトル|
|setDescription|String|式の説明|
|setLocation|String|ロケーション|

#### AuditConfig(Set)
|メソッド|引数|説明|
|---|---|---|
|setService|String|監査ログを有効にするサービス|
|setAuditLogConfigs|List\<[AuditLogConfig](#auditlogconfigset)\>|各タイプの権限のログを記録するための設定|

#### AuditLogConfig(Set)
|メソッド|引数|説明|
|---|---|---|
|setLogType|[LogType(enum)](#logtype)|この構成で有効になるログのタイプ|
|setExemptedMembers|List\<String\>|このタイプのアクセス許可のログを記録しないID|

#### LogType
|定義値|内容|
|---|---|
|LOG_TYPE_UNSPECIFIED|デフォルト|
|ADMIN_READ|管理人が読込|
|DATA_WRITE|データの書込|
|DATA_READ|データの読込|

### 1.3. レスポンスの内容
#### Policy
|メソッド|戻り値|説明|
|---|---|---|
|getVersion|Integer|ポリシーのバージョン|
|getBindings|List\<[Binding](#binding)\>|プリンシパルとの関連情報|
|getAuditConfigs|List\<[AuditConfig](#auditconfig)\>|クラウド監査ログ構成|
|getEtag|String|ハッシュ値|

#### Binding
|メソッド|戻り値|説明|
|---|---|---|
|getRole|String|割り当てられるロール|
|getMembers|List\<String\>|リソースへのアクセスをリクエストするプリンシパル|
|getCondition|[Expr](#expr)|関連付けられている条件|

#### Expr
|メソッド|戻り値|説明|
|---|---|---|
|getExpression|String|共通式言語構文での式のテキスト表現|
|getTitle|String|式のタイトル|
|getDescription|String|式の説明|
|getLocation|String|ロケーション|

#### AuditConfig
|メソッド|戻り値|説明|
|---|---|---|
|getService|String|監査ログを有効にするサービス|
|getAuditLogConfigs|List\<[AuditLogConfig](#auditlogconfig)\>|各タイプの権限のログを記録するための設定|

#### AuditLogConfig
|メソッド|戻り値|説明|
|---|---|---|
|getLogType|[LogType(enum)](#logtype)|この構成で有効になるログのタイプ|
|getExemptedMembers|List\<String\>|このタイプのアクセス許可のログを記録しないID|

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