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