Cloud IAMあれこれ試行（その3：「カスタムの役割」）

# お題
[前回](https://qiita.com/sky0621/items/eae674545f2fdeb127f2)の補足。

# 前提
[前回の前提](https://qiita.com/sky0621/items/eae674545f2fdeb127f2#前提)踏襲。

# 参考
https://cloud.google.com/iam/docs/understanding-custom-roles

# 実践
## カスタムの役割に割り当てられている権限の確認
### 既存の役割の確認
クラウドコンソールにて「IAMと管理 -> 役割」で確認
https://console.cloud.google.com/iam-admin/roles?authuser=0&project=【プロジェクトID】
　
例えば「請求」に関する役割は既存で下記のようなものがある。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/180599/1fe6a640-7cf6-2415-e06b-3a491b6c8476.png)
gcloudコマンドで確認してみると。
<pre>
$ gcloud iam roles list | grep "name:" | grep billing
name: roles/billing.admin
name: roles/billing.creator
name: roles/billing.projectManager
name: roles/billing.user
name: roles/billing.viewer
</pre>

### 既存の役割に割り当てられている権限の確認
例えば上記より「Billing Account Administrator」に割り当てられている権限は下記のようになっている。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/180599/98102213-6a7a-522c-55d7-5ad734b2e2fd.png)
gcloudコマンドで確認してみると。
<pre>
$ gcloud iam roles describe roles/billing.admin
description: Authorized to see and manage all aspects of billing accounts.
etag: AA==
includedPermissions:
- billing.accounts.close
- billing.accounts.get
- billing.accounts.getIamPolicy
- billing.accounts.getPaymentInfo
- billing.accounts.getSpendingInformation
- billing.accounts.getUsageExportSpec
- billing.accounts.list
- billing.accounts.move
- billing.accounts.redeemPromotion
- billing.accounts.removeFromOrganization
- billing.accounts.reopen
- billing.accounts.setIamPolicy
- billing.accounts.update
- billing.accounts.updatePaymentInfo
- billing.accounts.updateUsageExportSpec
- billing.budgets.create
- billing.budgets.delete
- billing.budgets.get
- billing.budgets.list
- billing.budgets.update
- billing.credits.list
- billing.resourceAssociations.create
- billing.resourceAssociations.delete
- billing.resourceAssociations.list
- billing.subscriptions.create
- billing.subscriptions.get
- billing.subscriptions.list
- billing.subscriptions.update
- cloudnotifications.activities.list
- logging.logEntries.list
- logging.logServiceIndexes.list
- logging.logServices.list
- logging.logs.list
- logging.privateLogEntries.list
- resourcemanager.projects.createBillingAssignment
- resourcemanager.projects.deleteBillingAssignment
name: roles/billing.admin
stage: GA
title: Billing Account Administrator
</pre>

ちなみに、一見同じように見える「プロジェクトの支払い管理者」という役割の権限を確認してみると下記のようになっている。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/180599/d1f51bdc-4f60-2ec9-0772-4679adcb71c9.png)

gcloudコマンドでは、下記。
<pre>
$ gcloud iam roles describe roles/billing.projectManager
description: Can assign a project's billing account or disable its billing.
etag: AA==
includedPermissions:
- resourcemanager.projects.createBillingAssignment
- resourcemanager.projects.deleteBillingAssignment
name: roles/billing.projectManager
stage: GA
title: Project Billing Manager
</pre>

「管理者」と付くのでけっこうな権限がありそうではあるものの単純に権限の割当数という観点では２個のみ。
「Administrator」は３６個。タイトルのイメージで判断せず、ちゃんと割当権限を確認することが大事。

たいていは「管理者」＞「編集者」＞「閲覧者」という感じではあると思う。
例えば、CloudSQLでは下記。
<pre>
$ gcloud iam roles list | grep "name:" | grep cloudsql
name: roles/cloudsql.admin
name: roles/cloudsql.client
name: roles/cloudsql.editor
name: roles/cloudsql.viewer
</pre>
■ Cloud SQL 管理者
<pre>
$ gcloud iam roles describe roles/cloudsql.admin | grep "\\- " | wc -l
40
</pre>
■ Cloud SQL 編集者
<pre>
koge@koge-W65-67SF:~$ gcloud iam roles describe roles/cloudsql.editor | grep "\\- " | wc -l
22
</pre>
■ Cloud SQL 閲覧者
<pre>
koge@koge-W65-67SF:~$ gcloud iam roles describe roles/cloudsql.viewer | grep "\\- " | wc -l
14
</pre>
■ Cloud SQL クライアント
<pre>
koge@koge-W65-67SF:~$ gcloud iam roles describe roles/cloudsql.client | grep "\\- " | wc -l
2
</pre>

### 既存の役割からカスタムの役割を作成
事例として妥当な感はないけど、Pub/Subの全権限を網羅するカスタム役割作成を試みる。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/180599/303a9a96-4f64-5756-7d07-dfb678dce7bd.png)
![05.png](https://qiita-image-store.s3.amazonaws.com/0/180599/b1352997-d259-9762-6041-7270cbbc6361.png)
![06.png](https://qiita-image-store.s3.amazonaws.com/0/180599/bbfe8904-f4f1-8b6a-2ea6-4175cf1bbbe1.png)

出来上がり。（まあ、名前は本当はもう少しちゃんと考えるとして。）
![07.png](https://qiita-image-store.s3.amazonaws.com/0/180599/9e2e2c2d-c423-506f-3cc6-f0cc54cbe3da.png)
![08.png](https://qiita-image-store.s3.amazonaws.com/0/180599/8eaa53e2-d978-bea4-3af5-b7fa1ff6a6ca.png)