[Cloud Storage API(V2)] JavaでバケットのIAMポリシーを取得する

Cloud Storage API V2(Java)を使用して、
Cloud StorageのバケットのIAMポリシーを取得する方法
についてご紹介します。

**IAM**
Identity and Access Managementの略で
リソースへのアクセス制御を管理する機能のことです。
リソースに対し、どのユーザーがどうアクセスするか等の
ルールのことをIAMポリシーと呼びます。

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

|No|||目次|
|---|---|---|---|
|1|||[IAMポリシーを取得](#1-iamポリシーを取得)|
||1||[スコープ](#11-スコープ)|
||2||[実行](#12-実行)|
||3||[レスポンスの内容](#13-レスポンスの内容)|

## 1. IAMポリシーを取得
指定したバケットのIAMポリシーを取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
StorageScopes.CLOUD_PLATFORM
StorageScopes.DEVSTORAGE_FULL_CONTROL
```
[⧉[Cloud Storage API(V2)] JavaでCloud Storageを使う(2.2 Storageインスタンスを取得)](https://qiita.com/doran/items/2a5f7ef8070fd5b8c94d#22-storageインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Storage storage = getStorage();
    Storage.Buckets buckets = storage.buckets();
    Storage.Buckets.GetIamPolicy iamPolicy = buckets.getIamPolicy("バケットID");
    
    Policy res = iamPolicy.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}/iam
が実行されます。

#### 1.2.2. クエリパラメータ
Storage.Buckets.GetIamPolicyのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setOptionsRequestedPolicyVersion|Integer|取得するIAMポリシーのバージョン|

### 1.3. レスポンスの内容
#### Policy
|メソッド|戻り値|説明|
|---|---|---|
|getVersion|Integer|IAMポリシーのバージョン|
|getKind|String|リソースの種類<br>固定文字列："storage#policy"|
|getResourceId|String|このポリシーが属するリソースID|
|getBindings|List\<[Policy.Bindings](#policybindings)\>|一連のアクセス許可を伴うロールと、そのロールを持つプリンシパルとの関連付け|
|getEtag|String|ポリシーのHTTPエンティティタグ|

#### Policy.Bindings
|メソッド|戻り値|説明|
|---|---|---|
|getRole|String|[Storageロール](#storageロール)|
|getMembers|List\<String\>|[基本ロール](#基本ロール)とプロジェクトIDを組み合わせた文字列<br><br>次の文字列を配列で返す<br>"projectOwner:{プロジェクトID}"<br>"projectEditor:{プロジェクトID}"<br>"projectViewer:{プロジェクトID}"
|getCondition|[Expr](#expr)|このバインディングに関連付けられた条件オブジェクト|

#### Expr
|メソッド|戻り値|説明|
|---|---|---|
|getTitle|String|条件のタイトル|
|getDescription|String|条件の説明|
|getExpression|String|Common Expression Language (CEL) のサブセットを使用した属性ベースの論理式|

#### 基本ロール
|ロール|概要|
|---|---|
|Viewer|既存のリソースやデータの表示(ただし変更ではない)など、状態に影響を与えない読み取り専用の権限|
|Editor|すべての閲覧者権限に加えて、既存のリソースの変更など、状態を変更するアクションに対する権限|
|Owner|すべての編集者の権限に加えて、次のようなアクションの権限|

#### Storageロール
|ロール|定義値|概要|
|---|---|---|
|Storage オブジェクト作成者|roles/storage.objectCreator|ユーザーによるオブジェクトの作成を許可|
|Storage オブジェクト閲覧者|roles/storage.objectViewer|オブジェクトとそのメタデータ（ACL を除く）を閲覧するためのアクセス権|
|Storage オブジェクト ユーザー|roles/storage.objectUser|オブジェクトとマネージド フォルダ、およびそれらのメタデータを作成、表示、一覧表示、更新、削除するためのアクセス権|
|ストレージ オブジェクト管理者|roles/storage.objectAdmin|オブジェクトの一覧表示、作成、表示、削除、オブジェクトの ACL の設定など、オブジェクトのすべてを管理できる権限|
|ストレージ フォルダ管理者|roles/storage.folderAdmin|オブジェクトとマネージド フォルダに対する完全な制御権限|
|Storage HMAC キー管理者|roles/storage.hmacKeyAdmin|プロジェクト内の HMAC キーのすべてを管理する権限|
|Storage 管理者|roles/storage.admin|オブジェクト ACL や IAM ポリシーの取得と設定など、バケット、マネージド フォルダ、オブジェクトに対する完全な制御権限|
|Storage Insights 管理者|roles/storageinsights.admin|Storage Insights のインベントリ レポートと構成に対する完全な制御権限|
|Storage Insights 閲覧者|roles/storageinsights.viewer|Storage Insights のインベントリ レポートと構成に対する読み取り専用アクセス権|
|Storage Insights コレクタ サービス|roles/storage.insightsCollectorService|インベントリ レポートのオブジェクト メタデータに対する読み取りアクセス権|

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