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
必要な権限がオーナーには含まれていないことがわかります。
従って、上記ロールや必要権限を満たすカスタムロールを別途付与する必要があります。
最後に
オーナーは全ての権限を持っているわけではないことがわかりました。
ただ、それでも非常に多くの権限を持っており、含まれていない権限を網羅することは難しいため、このことを認識しておくことが大切だと思います。
今回の事例以外にも、該当する場面は出てくると思いますので、発見でき次第また紹介したいと思います。