これは何?
Gemini, ChatGPT, ClaudeCodeを突然比較してみたくなった。
分析したいとかじゃなく、ただやってみたかっただけ。いつかまた衝動的にやるつもり。
記録日: 2025/08/15
※ 様々な人、お題、そしてその時の先頭集団にいるAIモデルでこういう比較が溢れる世の中にな〜れ〜。
お題(プロンプト)
mermaidでgoogle cloudのIAM設定周りのアーキテクチャを表現して
表側
- Gemini, 2. ChatGPT, 3. Claude Codeとしています。それぞれのタイトルの後は回答をコピペしています。
※ Claude Codeのみ補足があります。
1. Gemini 2.5 Pro
はい、承知いたしました。Mermaid.jsを使用してGoogle Cloud (GCP) のIAM設定に関するアーキテクチャ図を作成します。
GCPのIAMは階層構造になっており、リソース(組織、フォルダ、プロジェクト、個別のリソース)に対して、誰(メンバー)が、どの権限(ロール)を持つかを定義(ポリシー)します。
以下に、一般的なシナリオを表すいくつかのMermaidのコードサンプルを示します。これらのコードをコピーして、Mermaidをサポートするエディタ(例えば、VS Codeの拡張機能やオンラインエディタなど)に貼り付けると、図として表示できます。
基本的なIAMの概念図
ユーザー、グループ、ロール、そしてリソースへの割り当てという基本的な関係性を表現した図です。
解説:
-
メンバー:
user@example.comはteam-a@example.comグループに所属しています。 -
IAMポリシー: このグループに対して
ストレージのオブジェクト閲覧者 (roles/storage.objectViewer)ロールを割り当てるポリシーが作成されます。 -
リソース: このポリシーが
my-projectプロジェクトにアタッチされます。 -
継承: プロジェクトに設定された権限は、その下の階層にあるGCSバケット
my-bucketにも自動的に継承されます。
サービスアカウント利用のアーキテクチャ図
Compute EngineのVMにサービスアカウントをアタッチし、そのサービスアカウントにGCSへのアクセス権を付与する、よくある構成です。
解説:
- Compute Engine VM: このVMは、特定のタスク(例: データ処理)を実行します。
-
サービスアカウント: VMには、
data-processor-saという専用のサービスアカウントがアタッチされています。アプリケーションはこのサービスアカウントの権限でGCP APIを呼び出します。 -
IAMポリシー: このサービスアカウントに対して、
ストレージのオブジェクト管理者 (roles/storage.objectAdmin)ロールがraw-data-bucketバケットに直接アタッチされています。これにより、VMは他のリソースに過剰な権限を持つことなく、必要なバケット操作だけを実行できます(最小権限の原則)。
フォルダと組織を含む階層構造の図
より大きな組織で、フォルダを使って権限を管理する場合の例です。
解説:
- 組織: 全てのGCPリソースのトップレベルの器です。組織全体に適用されるIAMポリシー(例: 監査ログの閲覧者)を設定できます。
-
フォルダ:
DevelopmentとProductionのように環境ごとや部門ごとにプロジェクトをまとめ、フォルダ単位で権限を管理できます。 -
権限の委任:
dev-folder-adminsグループにDevelopmentフォルダの管理者権限を付与することで、そのフォルダ内のプロジェクト管理を委任できます。Productionフォルダには触れないため、環境間の分離が保たれます。
これらのサンプルを、ご自身の環境に合わせてカスタマイズしてご活用ください。
2. ChatGPT GPT-5
OK、Google CloudのIAM設定をMermaidで可視化する例を作りますね。
IAMは「誰(プリンシパル)が、何のリソースに、どの権限を持っているか」を決める仕組みなので、構成要素を以下に分けます。
- プリンシパル(Principals): ユーザー、サービスアカウント、グループ
- ロール(Roles): 権限のセット(事前定義ロール / カスタムロール)
- ポリシー(Policy Bindings): プリンシパルとロールを紐付ける設定
- リソース階層(Resource Hierarchy): Organization → Folder → Project → Resource
例として、Organization配下のProjectに特定のユーザーがViewer権限を持つ図をMermaidで書くとこうなります。
この図では:
- 左側がGCPのリソース階層
- 右側がIAMの主体(プリンシパル)とロール
- 破線矢印で「ロールが適用されるリソース範囲」を示し、
実線矢印で「プリンシパルがロールを持っている」ことを示しています。
このままでも概要は掴めますが、もっと詳細に継承の仕組みや条件付きポリシーまで盛り込むことも可能です。
条件付きIAMや継承パターンも含めたバージョンを作りますか?
そうすれば「どの階層に設定すると、下位にどう効くのか」まで分かる図になります。
3. Claude Code Claude Sonnet 4
Google CloudのIAM設定周りのアーキテクチャをMermaid図で表現します。Google CloudのIAM設定周りのアーキテクチャを包括的に表現した図を作成しました。
この図は以下の要素を含んでいます:
Identity Sources(アイデンティティソース)
- Googleアカウント、サービスアカウント、Workload Identity Federation、Google Workspaceなど
IAM Core(IAMコア)
- ポリシー、ロール、権限、ポリシーバインディングの関係性
Role Types(ロールタイプ)
- 基本ロール、定義済みロール、カスタムロールの分類
Resource Hierarchy(リソース階層)
- 組織 → フォルダ → プロジェクト → リソースの階層構造とポリシー継承
Access Control(アクセス制御)
- アクセスリクエストから評価、決定、監査までのフロー
IAM Services(IAMサービス)
- 関連するGoogle Cloudサービスとの連携
点線は継承関係を、実線は直接的な関係を示しています。色分けにより各コンポーネントの役割を視覚的に区別しています。
3.1 エラーについて補足: qiitaではうまくレンダリングができなかったようですが、実際には下記のコードを出力し、レンダリングもされます。
graph TB
%% Identity Sources
subgraph "Identity Sources"
GM[Google Account]
GSA[Google Service Account]
WIF[Workload Identity Federation]
GSUITE[Google Workspace]
end
%% IAM Core Components
subgraph "IAM Core"
POLICY[IAM Policy]
ROLES[IAM Roles]
PERMS[Permissions]
BINDINGS[Policy Bindings]
end
%% Role Types
subgraph "Role Types"
BASIC[Basic Roles<br/>Owner/Editor/Viewer]
PREDEFINED[Predefined Roles<br/>Service-specific]
CUSTOM[Custom Roles<br/>User-defined]
end
%% Resource Hierarchy
subgraph "Resource Hierarchy"
ORG[Organization]
FOLDER[Folders]
PROJECT[Projects]
RESOURCES[Resources<br/>VM, Storage, etc.]
end
%% IAM Services
subgraph "IAM Services"
CAM[Cloud Asset Management]
CIAM[Cloud Identity & Access Management]
CRM[Cloud Resource Manager]
IAA[IAM Audit]
end
%% Access Control Flow
subgraph "Access Control"
REQUEST[Access Request]
EVAL[Policy Evaluation]
DECISION[Allow/Deny Decision]
AUDIT[Audit Logging]
end
%% Connections - Identity to IAM
GM --> BINDINGS
GSA --> BINDINGS
WIF --> BINDINGS
GSUITE --> BINDINGS
%% Connections - IAM Internal
BINDINGS --> POLICY
POLICY --> ROLES
ROLES --> PERMS
%% Role Type Connections
BASIC --> ROLES
PREDEFINED --> ROLES
CUSTOM --> ROLES
%% Resource Hierarchy Connections
ORG --> FOLDER
FOLDER --> PROJECT
PROJECT --> RESOURCES
%% Policy Inheritance
ORG -.->|Policy Inheritance| FOLDER
FOLDER -.->|Policy Inheritance| PROJECT
PROJECT -.->|Policy Inheritance| RESOURCES
%% Access Control Flow
REQUEST --> EVAL
EVAL --> POLICY
EVAL --> DECISION
DECISION --> AUDIT
%% IAM Services Connections
CIAM --> POLICY
CRM --> ORG
CAM --> RESOURCES
IAA --> AUDIT
%% Styling
classDef identityClass fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef iamClass fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef roleClass fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef resourceClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef serviceClass fill:#fce4ec,stroke:#880e4f,stroke-width:2px
classDef accessClass fill:#f1f8e9,stroke:#33691e,stroke-width:2px
class GM,GSA,WIF,GSUITE identityClass
class POLICY,ROLES,PERMS,BINDINGS iamClass
class BASIC,PREDEFINED,CUSTOM roleClass
class ORG,FOLDER,PROJECT,RESOURCES resourceClass
class CAM,CIAM,CRM,IAA serviceClass
class REQUEST,EVAL,DECISION,AUDIT accessClass
