IAMの基本ロールがアップデート

記事タイトルとURLをコピーする

G-gen の武井です。当記事では、IAM における基本ロールのアップデートについて解説します。

概要

変更の内容

IAM の基本ロール(Basic roles)が刷新され、新しくなります。

  1. 従来からある3つの基本ロールは Legacy basic roles という呼称に変更
    • Owner(roles/owner
    • Editor(roles/editor
    • Viewer(roles/viewer
  2. 新しく3つのロールが Basic roles として追加
    • Admin(roles/admin
    • Writer(roles/writer
    • Reader(roles/reader

なお、新しい3つの基本ロールは、当記事を執筆した2025年4月1日現在でプレビュー段階です。また執筆時点でリリースノートによる公表はありません。

基本ロールとは

基本ロールは、強い権限を持つロール群です。Google アカウントや Google グループといった操作の実行主体(プリンシパル)に対し、Google Cloud リソースに対する広範なアクセス権を付与できます。

従来の基本ロールは、IAM の導入前から存在していた、オーナー(Owner)、編集者(Editor)、閲覧者(Viewer)の3つです。

新しい基本ロールは、管理者(Admin)、書き込み(Writer)、読み取り(Reader)の3つです。

基本ロールは広範な権限を持つため、できるだけ使用せず、最小権限の原則に従って事前定義ロールもしくはカスタムロールを利用することが望ましいとされています。この観点は、従来の基本ロールでも、新しい基本ロールでも同様です。

違いの解説

概要

新旧基本ロールが持つ権限の違いは、以下の通りです。

# 旧基本ロール 新基本ロール 差分
1 Owner(roles/owner) Admin(roles/admin) 後者には以下プロダクトの権限が追加
・BigQuery
・Cloud Storage
・Resource Manager
2 Editor(roles/editor) Writer(roles/writer) 同上
3 Viewer(roles/viewer) Reader(roles/reader) 同上

BigQuery に関する権限の差

旧基本ロールには、BigQuery の bigquery.tables.getData などいくつかの権限が含まれていませんが、実質的には BigQuery へのアクセス権限はありました。旧基本ロールに対しては、IAM と少し違う仕組みで、追加で権限が付与されています。詳細は以下の記事を参照してください。

新基本ロールでは、これらの BigQuery に関するいくつかの権限が明示的に含まれています。

Cloud Storage に関する権限の差

Cloud Storage の storage.objects.* などいくつかの権限についても BigQuery と同様、従来の基本ロールには明示的に権限が含まれていません。IAM とは違う仕組みにより、基本ロールがアタッチされているアカウントに、バケットやオブジェクトに対する権限が追加で付与される仕様でした。

新基本ロールでは、これらの Cloud Storage バケットやオブジェクトに関するいくつかの権限が明示的に含まれています。

従来の基本ロールにはバケットに対する権限が追加で付与される仕様

組織管理に関する権限の差

従来の Owner(roles/owner)ロールには組織レベルの IAM の編集権限や、フォルダの管理権限などが含まれていません。そのため Google Cloud 環境の管理者には、別途「組織の管理者」「フォルダ管理者」ロールなどを付与する必要がありました。

一方で新しい Admin(roles/admin)ロールでは、組織レベルの IAM の編集権限や、フォルダの作成、削除権限など、組織管理に関するいくつかの権限が含まれています。

まとめ

まとめると、以下のようなことがいえます。

  • 今回のアップデートは、従来の基本ロールが IAM 導入以前からのレガシーな仕組みを前提としており、どの権限を持っているかの見通しが悪かったり、包括的でなかったという問題点を解消するためのものである
  • 新基本ロールには、従来の基本ロールが暗黙的に持っていた権限を明示的に持っている
  • 新基本ロールには、組織の管理に関する一部の権限を持っている

diff

※いずれも当記事を執筆した2025年4月1日現在のもの

Owner ロールと Admin ロールの差

# 差分のみ抜粋
$ gcloud iam roles describe roles/owner > owner.txt
$ gcloud iam roles describe roles/admin > admin.txt
$ diff owner.txt admin.txt
---
> - bigquery.tables.create
> - bigquery.tables.delete
> - bigquery.tables.export
> - bigquery.tables.get
> - bigquery.tables.getData
> - bigquery.tables.list
> - bigquery.tables.setCategory
> - bigquery.tables.setColumnDataPolicy
> - bigquery.tables.update
> - bigquery.tables.updateData
> - bigquery.tables.updateTag
> - resourcemanager.folders.create
> - resourcemanager.folders.delete
> - resourcemanager.folders.get
> - resourcemanager.folders.getIamPolicy
> - resourcemanager.folders.list
> - resourcemanager.folders.move
> - resourcemanager.folders.setIamPolicy
> - resourcemanager.folders.undelete
> - resourcemanager.folders.update
> - resourcemanager.organizations.get
> - resourcemanager.organizations.getIamPolicy
> - resourcemanager.organizations.setIamPolicy
> - storage.anywhereCaches.create
> - storage.anywhereCaches.disable
> - storage.anywhereCaches.get
> - storage.anywhereCaches.list
> - storage.anywhereCaches.pause
> - storage.anywhereCaches.resume
> - storage.anywhereCaches.update
> - storage.bucketOperations.cancel
> - storage.bucketOperations.get
> - storage.bucketOperations.list
> - storage.buckets.get
> - storage.buckets.getIamPolicy
> - storage.buckets.getIpFilter
> - storage.buckets.relocate
> - storage.buckets.setIamPolicy
> - storage.buckets.setIpFilter
> - storage.buckets.update
> - storage.managedFolders.create
> - storage.managedFolders.delete
> - storage.managedFolders.get
> - storage.managedFolders.getIamPolicy
> - storage.managedFolders.list
> - storage.managedFolders.setIamPolicy
> - storage.multipartUploads.abort
> - storage.multipartUploads.create
> - storage.multipartUploads.list
> - storage.multipartUploads.listParts
> - storage.objects.create
> - storage.objects.delete
> - storage.objects.get
> - storage.objects.getIamPolicy
> - storage.objects.list
> - storage.objects.move
> - storage.objects.overrideUnlockedRetention
> - storage.objects.restore
> - storage.objects.setIamPolicy
> - storage.objects.setRetention
> - storage.objects.update
< name: roles/owner
< stage: GA
< title: Owner
---
> name: roles/admin
> stage: ALPHA
> title: Admin

Editor ロールと Writer ロールの差

# 差分のみ抜粋
$ gcloud iam roles describe roles/editor > editor.txt
$ gcloud iam roles describe roles/writer > writer.txt
$ diff editor.txt writer.txt
---
> - bigquery.tables.create
> - bigquery.tables.delete
> - bigquery.tables.export
> - bigquery.tables.get
> - bigquery.tables.getData
> - bigquery.tables.list
> - bigquery.tables.update
> - bigquery.tables.updateData
> - bigquery.tables.updateTag
> - resourcemanager.folders.create
> - resourcemanager.folders.delete
> - resourcemanager.folders.get
> - resourcemanager.folders.getIamPolicy
> - resourcemanager.folders.list
> - resourcemanager.folders.undelete
> - resourcemanager.folders.update
> - resourcemanager.organizations.get
> - resourcemanager.organizations.getIamPolicy
> - storage.buckets.get
> - storage.buckets.getIamPolicy
> - storage.buckets.getIpFilter
> - storage.buckets.update
< - storage.hmacKeys.create
< - storage.hmacKeys.delete
< - storage.hmacKeys.update
> - storage.managedFolders.create
> - storage.managedFolders.delete
> - storage.managedFolders.get
> - storage.managedFolders.getIamPolicy
> - storage.managedFolders.list
> - storage.multipartUploads.abort
> - storage.multipartUploads.create
> - storage.multipartUploads.listParts
> - storage.objects.create
> - storage.objects.delete
> - storage.objects.get
> - storage.objects.getIamPolicy
> - storage.objects.list
> - storage.objects.move
> - storage.objects.overrideUnlockedRetention
> - storage.objects.restore
> - storage.objects.setRetention
> - storage.objects.update
< name: roles/editor
< stage: GA
< title: Editor
---
> name: roles/writer
> stage: ALPHA
> title: Writer

Viewer ロールと Reader ロールの差

# 差分のみ抜粋
$ gcloud iam roles describe roles/viewer > viewer.txt
$ gcloud iam roles describe roles/reader > reader.txt
$ diff viewer.txt reader.txt
---
> - bigquery.tables.export
> - bigquery.tables.get
> - bigquery.tables.getData
> - bigquery.tables.list
> - resourcemanager.folders.get
> - resourcemanager.folders.getIamPolicy
> - resourcemanager.folders.list
> - resourcemanager.organizations.get
> - resourcemanager.organizations.getIamPolicy
> - storage.buckets.get
> - storage.buckets.getIamPolicy
> - storage.buckets.getIpFilter
> - storage.managedFolders.get
> - storage.managedFolders.getIamPolicy
> - storage.managedFolders.list
> - storage.multipartUploads.listParts
> - storage.objects.get
> - storage.objects.getIamPolicy
> - storage.objects.list
< name: roles/viewer
< stage: GA
< title: Viewer
---
> name: roles/reader
> stage: ALPHA
> title: Reader

IAM Policy の設定

Google Cloud コンソール

当記事を執筆した2025年4月1日現在では、Google Cloud コンソールからのロール紐づけはできませんでした。

gcloud コマンド

当記事を執筆した2025年4月1日現在では、gcloud コマンドによるロール紐づけが可能でした。

# プロジェクトレベルでroles/adminを付与
$ gcloud projects add-iam-policy-binding yutakei \
--member=user:yutakei@dev.g-gen.co.jp \
--role=roles/admin \
--condition=None
# プロジェクトレベルでroles/writerを付与
$ gcloud projects add-iam-policy-binding yutakei \
--member=user:yutakei@dev.g-gen.co.jp \
--role=roles/writer \
--condition=None
# プロジェクトレベルでroles/readerを付与
$ gcloud projects add-iam-policy-binding yutakei \
--member=user:yutakei@dev.g-gen.co.jp \
--role=roles/reader \
--condition=None

gcloud alpha コマンドでの設定後の画面

Privileged Access Manager(PAM)での利用

Privileged Access Manager(PAM) では、従来の基本ロールを付与することはできませんでしたが、新しい基本ロールは使用可能です。

新基本ロールであれば PAM で利用可能

Privileged Access Manager(PAM) の詳細については、以下の記事をご参照ください。

blog.g-gen.co.jp

現時点ではどちらも利用可能

当記事を執筆した2025年4月1日時点では、新・旧の基本ロールは、両方が使用可能です。

今回のアップデートによって、今すぐに旧基本ロールが使えなくなるということはありません。しかし今後、新基本ロールが GA(一般公開)になった際にどのような扱いになるのか、注意が必要です。

武井 祐介 (記事一覧)

クラウドソリューション部クラウドエンジニアリング課。

Google Cloud Partner Top Engineer 2025 選出。

趣味はロードレースやサッカー観戦、あとはゴルフと筋トレ。