Azure経験者のためのGCP入門:組織・プロジェクト・ロールの考え方を完全解説
はじめに
「Azureは使いこなしているが、GCPに触れる機会が来た」という方は多いのではないでしょうか。
GCPはAzureと似ている部分もありますが、リソース階層の考え方とIAMの設計思想が独特です。ここを正確に理解しないと、「なぜかアクセスできない」「権限を付与したのに反映されない」といったトラブルに悩まされます。
本記事では、Azureとの対応付けを軸に、GCPの組織・フォルダ・プロジェクト・ロールの考え方を具体例つきで解説します。
1. まず全体像を把握する:AzureとGCPの対応表
読者がAzureに慣れているため、まず概念の対応関係を整理します。
| Azure | GCP | 役割 |
|---|---|---|
| Azure AD テナント / Entra ID テナント | 組織(Organization) | 企業全体の管理単位 |
| 管理グループ(Management Group) | フォルダ(Folder) | 部門・環境ごとのグループ化 |
| サブスクリプション(Subscription) | プロジェクト(Project) | リソース・課金の単位 |
| リソースグループ(Resource Group) | (プロジェクト内で直接管理) | ※GCPにリソースグループ相当はない |
| Azure RBAC | Cloud IAM | 権限管理 |
| ロール(Role) | ロール(Role) | 権限のまとまり |
| セキュリティプリンシパル | プリンシパル(Principal) | 権限を付与する対象 |
ポイント: Azureではサブスクリプションとリソースグループの2段階でリソースを管理しますが、GCPではプロジェクトが最小単位でリソースグループ相当の概念はありません。
2. GCPのリソース階層
GCPのリソースは以下の4階層で管理されます。
各階層の役割
組織(Organization)
- 企業全体の最上位ルート
- Google Workspace または Cloud Identity のドメインに紐づく
- Azureの「Entra IDテナント」に相当
- 組織レベルで設定したポリシーは全フォルダ・プロジェクトに継承される
フォルダ(Folder)
- 部門・環境・チームごとのグループ化に使う
- Azureの「管理グループ」に相当
- フォルダは最大10階層まで入れ子にできる
- フォルダへの権限付与は配下のプロジェクトすべてに継承される
プロジェクト(Project)
- GCPにおける最も重要な概念
- すべてのリソースはプロジェクトに属する(プロジェクト外にリソースは存在しない)
- 課金はプロジェクト単位で管理される
- Azureの「サブスクリプション」に相当するが、より細かく分割する運用が一般的
リソース
- VM(Compute Engine)、Cloud Storage、BigQuery など
- 必ずプロジェクト配下に存在する
3. プロジェクトの理解が最重要
GCPを使い始めて最初につまずくのがプロジェクトの概念です。
プロジェクトの3つの識別子
プロジェクトには3種類の識別子があります。
| 識別子 | 例 | 特徴 |
|---|---|---|
| プロジェクト名(Name) | My App Dev | 表示用の名前。変更可能、重複OK |
| プロジェクトID(Project ID) | my-app-dev-12345 | グローバルで一意。作成後変更不可 |
| プロジェクト番号(Project Number) | 123456789012 | Googleが自動採番。変更不可 |
注意: APIやCLIでプロジェクトを指定する際は「プロジェクトID」を使います。プロジェクト名ではないので注意が必要です。
AzureのサブスクリプションとGCPのプロジェクトの違い
GCPではプロジェクトを細かく分割するのが一般的です。例えば:
my-app-prod→ 本番環境my-app-dev→ 開発環境my-app-shared→ 共有ネットワーク(Shared VPC)my-app-logs→ ログ集約専用
Azureで1つのサブスクリプション内でリソースグループを分ける感覚ではなく、プロジェクト自体を環境・用途ごとに作るイメージです。
4. Cloud IAM(権限管理)の仕組み
IAMの基本構造
GCPのIAMは「誰が(Who)、どのリソースに(On What)、何をできるか(What)」を定義します。
プリンシパル(Principal)の種類
Azureの「セキュリティプリンシパル」に相当します。
| 種類 | 説明 | Azure対応 |
|---|---|---|
| Googleアカウント | 個人ユーザー(@gmail.com など) | ユーザー |
| サービスアカウント(SA) | アプリ・VM用の非人間アカウント | サービスプリンシパル / マネージドID |
| Google グループ | ユーザーのグループ | セキュリティグループ |
| Google Workspace ドメイン | ドメイン全体のユーザー | ディレクトリ全体への適用 |
| allAuthenticatedUsers | Googleアカウントを持つ全ユーザー | ※Azureに直接対応なし(注意が必要) |
| allUsers | 認証なし全ユーザー(公開) | ※Azureに直接対応なし(公開設定) |
重要:
allUsersやallAuthenticatedUsersを本番環境で使うのは危険です。誤って公開設定にしないよう注意してください。
ロールの3種類
GCPのロールはAzureのRBACと似た構造ですが、3種類に分類されます。
① 基本ロール(Basic Roles)
旧称:プリミティブロール。非常に強力な権限を持つため、本番環境では使用非推奨。
| ロール | 説明 | Azure対応 |
|---|---|---|
roles/owner | 全権限 + IAM管理 | 所有者(Owner) |
roles/editor | 読み書き(IAM管理なし) | 共同作成者(Contributor) |
roles/viewer | 読み取りのみ | 閲覧者(Reader) |
Azureの「所有者」がGCPの
roles/ownerに相当しますが、GCPではより細かいロールを使うことが強く推奨されます。
② 事前定義ロール(Predefined Roles)
Googleが用意した用途別ロール。実務では基本的にこれを使う。
roles/compute.instanceAdmin.v1 → Compute Engineの管理
roles/storage.objectAdmin → Cloud Storageオブジェクトの管理
roles/bigquery.dataViewer → BigQueryデータの参照
roles/container.developer → GKEの開発者向け
roles/logging.viewer → ログの閲覧
Azureの組み込みロール(Virtual Machine Contributor など)に相当しますが、GCPはさらに細かく分かれています。
③ カスタムロール(Custom Roles)
必要な権限だけを組み合わせた独自ロール。最小権限の原則を徹底したい場合に使用。
Azureの「カスタムロール」に相当します。
5. IAMポリシーの継承
これがGCPで最も重要な概念の一つです。
継承の仕組み
上位階層で付与した権限は、配下のすべてのリソースに自動的に継承されます。
継承の重要ルール
- 継承は一方向:上から下へのみ。子から親への継承はない
- 権限の剥奪はできない:上位で付与した権限を下位で削除することは原則できない
- Deny ポリシーは例外:IAM Deny(別機能)を使えば明示的な拒否が可能(ただし設計に注意)
Azureとの重要な違い: AzureのRBACでは
Deny割り当てで継承された権限を否定できますが、GCPの通常のIAMにはこの仕組みがありません。GCPのIAM Denyは別途設定が必要です。
6. サービスアカウント(Service Account)の使い方
GCPで特徴的なのが**サービスアカウント(SA)**の使い方です。
Azureのマネージドエンティティとの比較
サービスアカウントの2つの使われ方
1. リソースのアイデンティティとして
VMやCloud RunなどのリソースにSAを割り当て、そのリソースが他のGCPサービスにアクセスする際のID。
例:Cloud Run(SA: [email protected])
→ Cloud Storage に読み書き権限を付与
→ Cloud Run のコードから認証なしで GCS にアクセス可能
2. アプリケーションからの認証として
キーファイル(JSON)を使って外部アプリがGCPにアクセスする。ただしキーの管理が難しいため非推奨。代わりにWorkload Identity Federationを使うのが現代的な方法。
サービスアカウントへの権限付与
SAは2つの視点で権限管理します。
- SAそのものへの権限:ユーザーがSAを「使う」ための権限(
roles/iam.serviceAccountUser) - SAがリソースに持つ権限:SAが実際に操作できるリソースへの権限
7. よくある設計パターン
エンタープライズ向け組織構造
推奨されるロール付与の原則
| 原則 | 内容 |
|---|---|
| 最小権限 | 必要最小限のロールのみ付与 |
| 事前定義ロール優先 | 基本ロール(owner/editor)は使わない |
| グループ経由での付与 | 個人ではなくグループにロールを付与 |
| 定期的な棚卸し | 不要な権限の削除・レビュー |
| SA鍵の廃止 | キーファイルの代わりにWorkload Identityを使用 |
8. 実際によく使うコマンド
プロジェクトの操作
| |
IAMポリシーの確認・付与
| |
使用可能なロール一覧
| |
9. つまずきやすいポイントまとめ
ポイント① プロジェクトIDは変更不可
プロジェクト作成時に決めるプロジェクトIDは後から変更できません。-dev や -prod のサフィックスを最初から含めて命名規則を決めておきましょう。
ポイント② 組織がないと一部機能が使えない
個人のGmailアカウントで試す場合、「組織」が存在しません。フォルダの作成、組織レベルのポリシー、Shared VPCなど、一部機能は組織が必要です。業務利用ではGoogle Workspaceかクラウドアイデンティティを使いましょう。
ポイント③ 権限の反映に少し時間がかかる
IAMポリシーを変更してから実際に反映されるまで、最大数分かかることがあります。変更直後にアクセスエラーが出ても、少し待ってから再試行してみましょう。
ポイント④ サービスアカウントのなりすまし
あるSAが別のSAにroles/iam.serviceAccountTokenCreatorを持つと、そのSAになりすますことができます。これを意図せず付与しないよう注意が必要です。
ポイント⑤ プロジェクトの削除は30日後
プロジェクトを削除してもすぐには消えません。**30日間は「削除予約中」**の状態になり、その間に誤削除を取り消すことができます。ただし30日経過後は復元不可になります。
まとめ
| 概念 | Azure対応 | GCPのポイント |
|---|---|---|
| 組織 | Entra ID テナント | Google Workspace/Cloud Identityドメインに紐づく |
| フォルダ | 管理グループ | 最大10階層の入れ子が可能 |
| プロジェクト | サブスクリプション | 課金・リソースの最小単位。細かく分割が基本 |
| IAMロール | Azure RBAC ロール | 基本/事前定義/カスタムの3種類 |
| サービスアカウント | マネージドID | アプリ・VMのアイデンティティ。キーファイルは非推奨 |
| 権限継承 | 管理グループ→サブスクリプション継承 | 上位から下位へ一方向。否定はIAM Deny(別設定) |
GCPの設計は「プロジェクトを小さく分けて、IAMは上位で一元管理する」という思想が根本にあります。Azureで言う「サブスクリプションを細かく切る」感覚に近いですが、さらに積極的な分割が推奨されます。
最初は戸惑うかもしれませんが、階層構造と権限継承のルールさえ押さえれば、Azureの経験者なら比較的スムーズに理解できるはずです。