Cloud Service
Cloud IAM
「誰が・どのリソースに・何をできるか」をリソース階層に沿って制御する Google Cloud の認証認可サービス。全サービスのアクセス制御の土台で、利用は無料。AWS IAM に相当。
- 1.誰がどのリソースに何をできるかを制御する認証認可の土台。
- 2.権限はロールにまとめ、組織→フォルダ→Pjへ継承。利用は無料。
- 3.基本ロールを避け事前定義/カスタムで最小権限に絞るのが鉄則。
解決する課題
組織全体に同じアクセス制御モデルを行き渡らせつつ、事故と漏洩を防ぎます。
- 全員がオーナー、では事故が起きる → 必要な人に必要なロールだけを、必要な階層で渡したい
- アプリにキーを埋め込みたくない → サービスアカウントやWorkload Identity 連携で鍵レスに
- 数百プロジェクトの権限を個別管理したくない → 組織・フォルダ単位で付与して継承させたい
- 監査で「誰が何をできるか/何をしたか」を説明したい
主要概念と用語
- プリンシパル(メンバー): アクセスする主体。Google アカウント(
user:)、Google グループ(group:)、サービスアカウント(serviceAccount:)、Google Workspace / Cloud Identity ドメイン(domain:)、allUsers/allAuthenticatedUsersなど - ロール: 権限(
service.resource.verb形式のパーミッション。例compute.instances.start)の集合。プリンシパルに「権限」を直接ではなくロール経由で付与する- 基本ロール(basic / primitive):
roles/owner・roles/editor・roles/viewer。広すぎるため本番では非推奨 - 事前定義ロール(predefined): サービスごとに用途別に用意された推奨ロール(例
roles/storage.objectViewer) - カスタムロール: 必要なパーミッションだけを束ねた独自ロール
- 基本ロール(basic / primitive):
- IAM 許可ポリシー(allow policy): リソースに紐づくバインディング(
role↔membersの対応)の集合 - リソース階層: 組織(Organization)→ フォルダ(Folder)→ プロジェクト(Project)→ リソース。上位で付与したロールは下位に継承される
- サービスアカウント: 人ではなくワークロード(VM・Cloud Run・GKE 等)に紐づく ID。AWS の IAM ロールに近い
- 条件(IAM Conditions / CEL): リソース名・時刻・属性などで付与を絞り込む条件付きアクセス
仕様・制限・クォータ
- グローバルサービス(リージョンに依存しない。プリンシパルとポリシーは全リージョン共通)
- 権限はプリンシパルに直接付与できない。必ずロールにまとめてバインドする(AWS のように JSON で個別の
Actionを列挙するモデルとは異なる) - ポリシーにはサイズ上限(1 リソースあたりのバインディング数・許可ポリシーの最大サイズ)があり、メンバーをグループ化することで上限と管理コストを抑えるのが定石
- IAM Deny ポリシーは許可ポリシーとは別建てで、組織 / フォルダ / プロジェクトにアタッチする
- 短期トークンは Security Token Service(STS)/ IAM Credentials API が発行(
signJwt/generateAccessToken等)。AWS の STS に相当
内部の仕組み
リクエストが来ると、IAM はそのリソースから上位階層へさかのぼって有効なポリシーを合成し、評価します。
- デフォルトは拒否(どのロールにも含まれなければアクセス不可)
- 対象リソース+継承された上位(プロジェクト/フォルダ/組織)のバインディングを集め、要求パーミッションを含むロールが付与されていれば許可
- ただし該当する IAM Deny ルールがあれば、許可より優先して拒否
許可ポリシーは**加算(allow のみ)**で、AWS の「明示的 Allow」を階層で積み上げるイメージです。さらに Deny ポリシーは許可を上書きします。下位で許可を「外す」ことはできず、上位の付与は下位に必ず継承される点に注意してください。
設計パターン / ベストプラクティス
- 最小権限の原則: 基本ロール(Owner/Editor/Viewer)を避け、事前定義ロール、足りなければカスタムロールで必要なパーミッションだけに絞る
- 付与は階層の適切な高さで: 全社共通は組織/フォルダ、個別はプロジェクト/リソースに。個人ではなくグループへ付与して入退社に強くする
- サービスアカウントキーを作らない: VM/Cloud Run/GKE にはアタッチしたサービスアカウントを使い、外部ワークロードには Workload Identity 連携(Workload Identity Federation)、GKE Pod には Workload Identity を使って鍵レスにする
- IAM Conditions で時間・リソース名・タグ(条件)により付与を限定する
- 組織ポリシー(Organization Policy) と併用し、IAM だけでは縛れないガードレール(外部公開の禁止等)を設定する
運用・監視
- IAM Recommender(ロール推奨) が直近の利用実績から過剰なロールの引き下げを提案
- Policy Analyzer で「このプリンシパルはどのリソースに何ができるか」を棚卸し、Policy Troubleshooter でアクセス可否の理由を逆引き
- Cloud Audit Logs(管理アクティビティ/データアクセス)で「誰がいつ何をしたか」を監査
- 権限エラー時は、有効ポリシー(継承込み)→ 条件 → Deny ポリシーの順で確認する
コスト
IAM 自体は無料で、ロール付与・ポリシー評価・STS によるトークン発行に料金はかかりません。ただし周辺の機能には課金されるものがあります。
| 項目 | 課金 | 備考 |
|---|---|---|
| IAM(ロール/ポリシー/評価) | 無料 | サービスアカウント・基本/事前定義/カスタムロールとも無料 |
| Cloud Audit Logs(監査ログ) | 一部有料 | 管理アクティビティは無料、データアクセスログは Logging の取り込み/保管料が発生 |
セキュリティ
- 基本ロールを本番で使わない(特に
roles/ownerの乱発を避ける) - サービスアカウントキー(JSON)を発行・配布しない。鍵レス(連携 / アタッチ)を優先する
- 特権操作には MFA(2 段階認証)を Cloud Identity / Workspace 側で必須化し、
allUsers/allAuthenticatedUsersの付与を監査する - IAM Conditions と Deny ポリシーで、想定外の経路・時間・リソースを塞ぐ
サービスアカウントのJSON キーを発行して VM やリポジトリに置くのは NG。漏洩すれば長期間悪用されます。VM/Cloud Run にはサービスアカウントをアタッチし、外部からは Workload Identity 連携を使えば、鍵の管理・漏洩リスクそのものを排除できます。
関連サービス・比較(AWS との対応)
| 観点 | Cloud IAM(GCP) | AWS IAM |
|---|---|---|
| 権限の付け方 | ロールをプリンシパルにバインド(権限の直接付与は不可) | ポリシー(JSON)で Action/Resource を記述 |
| スコープ/継承 | 組織→フォルダ→プロジェクト→リソースに継承 | アカウント単位(明示付与、継承なし) |
| ワークロードの権限 | サービスアカウント(アタッチ / 連携) | IAM ロール(インスタンスプロファイル等) |
| 拒否の仕組み | IAM Deny ポリシー(許可を上書き) | ポリシーの明示的 Deny |
| 短期トークン | STS / IAM Credentials API | STS(AssumeRole) |
| 権限分析 | Policy Analyzer / Troubleshooter / Recommender | IAM Access Analyzer |
ハンズオン / CLI例
# プロジェクトに対し、ユーザーにストレージ閲覧の事前定義ロールを付与
gcloud projects add-iam-policy-binding my-project \
--member="user:alice@example.com" \
--role="roles/storage.objectViewer"
# ワークロード用のサービスアカウントを作成し、必要なロールだけ付与
gcloud iam service-accounts create app-sa \
--display-name="App Service Account"
gcloud projects add-iam-policy-binding my-project \
--member="serviceAccount:app-sa@my-project.iam.gserviceaccount.com" \
--role="roles/pubsub.subscriber"
# 現在のプロジェクトの IAM 許可ポリシーを確認(誰に何のロールが付いているか)
gcloud projects get-iam-policy my-project --format=json
# 認証中の自分の権限主体を確認(トラブル時に便利)
gcloud auth list
Google Cloud Service
Cloud IAMを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュリティ・ID
比較で見る軸
クラウド: Google Cloud / カテゴリ: セキュリティ・ID / 難易度: intermediate
導入後に効く点
権限はロールにまとめ、組織→フォルダ→Pjへ継承。利用は無料。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- セキュリティ・ID
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「セキュリティ・ID / security」に近いか確認する。
- 強みである「誰がどのリソースに何をできるかを制御する認証認可の土台。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。