[Cloud Storage API(V2)] Javaでバケットのアクセス権限をテストする

Cloud Storage API V2(Java)を使用して、
Cloud Storageのバケットのアクセス権限をテストする方法
についてご紹介します。

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

|No|||目次|
|---|---|---|---|
|1|||[アクセス権限をテスト](#1-アクセス権限をテスト)|
||1||[スコープ](#11-スコープ)|
||2||[実行](#12-実行)|
||3||[レスポンスの内容](#13-レスポンスの内容)|

## 1. アクセス権限をテスト
指定したバケットのアクセス権限をテストします。

指定したIAMアクセス権限がない場合は、例外が発生します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
StorageScopes.CLOUD_PLATFORM
StorageScopes.CLOUD_PLATFORM_READ_ONLY
StorageScopes.DEVSTORAGE_FULL_CONTROL
StorageScopes.DEVSTORAGE_READ_ONLY
StorageScopes.DEVSTORAGE_READ_WRITE
```
[⧉[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();
    
    List<String> permissions = new ArrayList<>();
    permissions.add("IAM権限");
    Storage.Buckets.TestIamPermissions iam = buckets.testIamPermissions("バケットID",permissions);
    
    TestIamPermissionsResponse res = iam.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//storage.googleapis.com/storage/v1/b/{バケットID}/iam/testPermissions
が実行されます。

#### 1.2.2. クエリパラメータ
Storage.BucketsのtestIamPermissions()に渡します。

|メソッド|引数|説明|
|---|---|---|
|permissions|List\<String\>|【必須】[テストするアクセス許可]((#14-iam権限))|

### 1.3. レスポンスの内容
#### TestIamPermissionsResponse
|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："storage#testIamPermissionsResponse"|
|getPermissions|List\<String\>|[呼び出し元が保持するアクセス許可](#14-iam権限)|

#### 1.4. IAM権限

##### 1.4.1 バケットの権限
|権限名|説明|
|---|---|
|storage.buckets.create|プロジェクト内に新しいバケットを作成|
|storage.buckets.createTagBinding|バケットに新しいタグ バインディングを作成|
|storage.buckets.delete|バケットを削除|
|storage.buckets.deleteTagBinding|バケットでタグ バインディングを削除|
|storage.buckets.enableObjectRetention|バケットでオブジェクト保持構成を有効にする|
|storage.buckets.get|バケットのメタデータ（IAM ポリシーを除く）を読み取る。バケットの Pub/Sub 通知構成の一覧表示または読み取る|
|storage.buckets.getIamPolicy|バケットの IAM ポリシーを読み取る|
|storage.buckets.getObjectInsights|インベントリ レポートのオブジェクトのメタデータを読み取る|
|storage.buckets.list|プロジェクト内のバケットを一覧表示する。一覧表示するときに、バケットのメタデータも読み取る（IAM を除く）|
|storage.buckets.listEffectiveTags|バケットに関連付けられているタグをすべて一覧表示|
|storage.buckets.listTagBindings|バケットに直接適用されたタグを一覧表示|
|storage.buckets.setIamPolicy|バケットの IAM ポリシーを更新|
|storage.buckets.update|バケットのメタデータ（IAM ポリシーを除く）を更新|

##### 1.4.2. マネージド フォルダの権限
|権限名|説明|
|---|---|
|storage.managedFolders.create|マネージド フォルダを作成|
|storage.managedFolders.delete|マネージド フォルダを削除|
|storage.managedFolders.get|マネージド フォルダを読み取る|
|storage.managedFolders.getIamPolicy|マネージド フォルダの IAM ポリシーを読み取る|
|storage.managedFolders.list|バケットまたはフォルダ内のマネージド フォルダを一覧表示|
|storage.managedFolders.setIamPolicy|マネージド フォルダの IAM ポリシーを更新|

##### 1.4.3. オブジェクトの権限
|権限名|説明|
|---|---|
|storage.objects.create|新しいオブジェクトをバケットに追加|
|storage.objects.delete|オブジェクトを削除|
|storage.objects.get|オブジェクトのデータとメタデータを読み取る（ACL を除く）|
|storage.objects.getIamPolicy|IAM ポリシーとして返されるオブジェクトの ACL を読み取る|
|storage.objects.list|バケット内のオブジェクトを一覧表示する。一覧表示するときに、オブジェクトのメタデータも読み取る（ACL を除く）|
|storage.objects.overrideUnlockedRetention|オブジェクト保持構成を操作するときに、x-goog-bypass-governance-retention ヘッダーまたは overrideUnlockedRetention クエリ パラメータを使用|
|storage.objects.setIamPolicy|オブジェクトの ACL を更新|
|storage.objects.setRetention|オブジェクトの保持を追加または更新|
|storage.objects.update|オブジェクトのメタデータを更新する（ACL を除く）。更新時にオブジェクトのメタデータも読み取る（ACL を除く）|

##### 1.4.4. HMAC キーの権限
|権限名|説明|
|---|---|
|storage.hmacKeys.create|プロジェクト内のサービス アカウントの新しい HMAC キーを作成|
|storage.hmacKeys.delete|既存の HMAC キーを削除|
|storage.hmacKeys.get|HMAC キーのメタデータを読み取る|
|storage.hmacKeys.list|プロジェクト内の HMAC キーのメタデータを一覧表示|
|storage.hmacKeys.update|HMAC キーのステータスを更新|

##### 1.4.5. マルチパート アップロードの権限
|権限名|説明|
|---|---|
|storage.multipartUploads.create|複数のパートでオブジェクトをアップロード|
|storage.multipartUploads.abort|マルチパート アップロード セッションを中止にする|
|storage.multipartUploads.listParts|マルチパート アップロード セッションで、アップロードされたオブジェクト パーツを一覧表示|
|storage.multipartUploads.list|バケット内のマルチパート アップロード セッションを一覧表示|

##### 1.4.6. Storage Insights インベントリ レポートの権限
|権限名|説明|
|---|---|
|storageinsights.reportConfigs.create|インベントリ レポートの構成を作成|
|storageinsights.reportConfigs.delete|インベントリ レポートの構成を削除|
|storageinsights.reportConfigs.get|インベントリ レポートの構成を取得|
|storageinsights.reportConfigs.list|インベントリ レポートの構成を一覧表示|
|storageinsights.reportConfigs.update|インベントリ レポートの構成を変更|
|storageinsights.reportDetails.get|インベントリ レポートを取得|
|storageinsights.reportDetails.list|インベントリ レポートを一覧表示|

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