Google CloudのIAMロールにおいて、オーナーとはプロジェクトやリソースに対して最上位の権限を持つロールです。
自分は以前、AWSに例えるとAdminのような全ての権限を持つロールという理解をしていましたが、そうではありません。
そのことを実感した事例をいくつか紹介いたします。
オーナーとは?
前述の通り、プロジェクトやリソースに対して最上位の権限を持つロールです。
リソースの作成、削除、変更、アクセス権の設定など、ほぼ全ての操作を実行することができ、他のユーザーやサービスアカウントに対しての権限委任をすることもできます。
事例 1
Terraformを使うにあたってサービスアカウントキーを運用を廃止するために、サービスアカウントの権限借用を許可しようとした時に発見しました。
これには以下のロールに含まれる権限が必要です。
1 2 3 4 5 6 7 8 9 | サービス アカウント ユーザー iam.serviceAccounts.actAs サービス アカウント トークン作成者 iam.serviceAccounts.getAccessToken iam.serviceAccounts.getOpenIdToken iam.serviceAccounts.implicitDelegation iam.serviceAccounts.signBlob iam.serviceAccounts.signJwt |
オーナーに含まれる権限は以下でした。
※関連する部分だけ載せています。
01 02 03 04 05 06 07 08 09 10 11 12 | オーナー iam.serviceAccounts.actAs iam.serviceAccounts.create iam.serviceAccounts.delete iam.serviceAccounts.disable iam.serviceAccounts.enable iam.serviceAccounts.get iam.serviceAccounts.getIamPolicy iam.serviceAccounts.list iam.serviceAccounts.setIamPolicy iam.serviceAccounts.undelete iam.serviceAccounts.update |
比較すると、サービス アカウント トークン作成者の権限がオーナーには含まれていないことがわかります。
従って、この場合はオーナーとは別に、サービス アカウント トークン作成者を付与する必要があります。
事例 2
BigQueryの料金改定に伴い、ストレージコストの試算をする際に、INFORMATION_SCHEMA.TABLE_STORAGEビューを使った時でした。
こちらは以下の権限が必要です。
1 2 3 4 5 6 7 8 9 | 必要な権限 bigquery.tables.get bigquery.tables.list この権限が含まれているロール BigQuery 管理者 BigQuery データ閲覧者 BigQuery データ編集者 BigQuery メタデータ閲覧者 |
オーナーに含まれる権限は以下でした。
※関連する部分だけ載せています。
1 2 3 4 5 6 7 8 | オーナー bigquery.tables.createIndex bigquery.tables.createSnapshot bigquery.tables.deleteIndex bigquery.tables.deleteSnapshot bigquery.tables.getIamPolicy bigquery.tables.restoreSnapshot bigquery.tables.setIamPolicy |
必要な権限がオーナーには含まれていないことがわかります。
従って、上記ロールや必要権限を満たすカスタムロールを別途付与する必要があります。
最後に
オーナーは全ての権限を持っているわけではないことがわかりました。
ただ、それでも非常に多くの権限を持っており、含まれていない権限を網羅することは難しいため、このことを認識しておくことが大切だと思います。
今回の事例以外にも、該当する場面は出てくると思いますので、発見でき次第また紹介したいと思います。