Google Cloud Privileged Access Manager (PAM)を使用したアカウント管理

Kanako Takeda

2025.4.15

はじめに

Google Cloud Privileged Access Manager (PAM)は、Google Cloud における特権アクセス管理のためのフルマネージドサービスです。
2024年5月にプレビュー版が提供され、2024年9月にGAとなった比較的新しいサービスとなります。

そこで今回は、PAMについて基本的な機能や特徴とユースケース、設定手順について紹介していきます。

PAMの主な機能とメリット

  • 最小権限の原則の徹底
    • 普段は必要最小限の権限のみを付与し、必要な時にのみ特権を付与することで、攻撃対象を最小限に抑えることができます。
  • ジャストインタイムアクセス
    • ユーザーが必要な時にのみ一時的に特権を付与することで、特権アカウントの常時利用を避け、リスクを低減します。
  • ワークフローによる承認
    • 特権アクセスの申請と承認をワークフローを構築することで、監査証跡を残すことができ、運用フローの効率化を行うことができます。
  • 監査ログの記録
    • 特権アクセスの利用状況を監査ログとして記録することで、セキュリティとコンプライアンスを確保します。

ユースケース

1. 緊急時対応:

  • 緊急時には、承認プロセスを待つことなく、担当者が迅速に問題解決に必要な権限を取得できます。アクセス理由の記録も義務付けられるので、後から監査も可能です。
    • 例:
      • システム障害発生時に、管理者がすぐに復旧作業を行う必要がある場合。

2. 機密情報へのアクセス制御:

  • 普段はアクセスできない機密情報に、必要な時だけ、必要な人だけがアクセスできるようになります。アクセス履歴は全て記録されるため、不正利用を抑止できます。
    • 例:
      • 開発者がトラブルシューティングのために、一時的に本番環境へアクセスする。
      • サポート担当者が、顧客対応のために、特定の顧客データへのアクセス権限を一時的に得る。
      • データベース管理者が、メンテナンス作業のために、データベースへの高度な権限を一時的に得る。

3. サービスアカウントのセキュリティ強化:

  • サービスアカウントに常に強力な権限を与えるのではなく、必要なタスクを実行する時だけ権限を昇格させることで、セキュリティリスクを低減できます。
    • 例:
      • 定期的に実行されるバッチ処理のためのサービスアカウントに、処理実行時のみ必要な権限を付与する。

4. 外部委託先/契約社員のアクセス管理:

  • 外部委託先や契約社員に必要な権限を、必要な期間だけ付与できます。契約終了後も権限が残ってしまうリスクを回避できます。
    • 例:
      • 期間限定のプロジェクトに携わる外部委託先に、プロジェクト期間中のみシステムへのアクセス権限を付与する。

5. 日常業務におけるリスク軽減:

  • 通常業務では読み取り専用権限とし、データ変更が必要な時だけ一時的に編集権限を付与することで、誤操作や意図しないデータ変更のリスクを減らせます。

6. 業務効率化:

  • ネットワーク管理、セキュリティ管理など、運用に必要な複数の権限セットをあらかじめ用意しておき、必要に応じて適切な権限を付与することで、作業ミスを減らし、効率的な運用を実現できます。

PAMの設定手順

PAMの有効化(コンソールから実施)

Google Cloudコンソール でPAMを有効にします。

利用資格(Entitlement)の作成

利用資格(Entitlement)の作成を Terraformで実施します。
利用資格は、特定のロールや権限を含む、特権アクセスを管理するための設定です。

特定の組織、フォルダ、プロジェクトに対して適用することができます。

# PAM設定
resource "google_privileged_access_manager_entitlement" "tfentitlement" {
  entitlement_id       = "entitlement-3-shake"
  location             = "global"
  max_request_duration = "43200s" #最大24時間
  parent               = "projects/${var.project_id}"
  requester_justification_config {
    unstructured {}
  }
  eligible_users {
    principals = ["user:xxxxxxxx@xxxxx.com","user:xxxxxxxx@xxxxx.com"]
  }
  privileged_access {
    gcp_iam_access {
      resource      = "//cloudresourcemanager.googleapis.com/projects/${var.project_id}"
      resource_type = "cloudresourcemanager.googleapis.com/Project"
      dynamic "role_bindings" {
        for_each = ["roles/compute.networkAdmin", "roles/compute.securityAdmin", "roles/monitoring.admin", "roles/secretmanager.admin", "roles/storage.admin"]
        content {
          role                 = role_bindings.value
          condition_expression = role_bindings.value != "roles/storage.admin" ? "" : "resource.name != \"projects/_/buckets/バケット名\""
        }
      }
    }
  }
  # approval_workflow句がなければ、自動承認となる
  approval_workflow {
    manual_approvals {
      require_approver_justification = true
      steps {
        approvals_needed = 1
        approvers {
          principals = ["user:xxxxxxxx@xxxxx.com","user:xxxxxxxx@xxxxx.com"]
        }
      }
    }
  }
}

Terraformコードの解説

eligible_usersapproversで指定するプリンシパルは以下のタイプが設定できます。

  • プリンシパル タイプ
    • Google アカウント
    • Google グループ
    • Google Workspace のドメイン
    • Workforce プールID

基本ロール・allUsers・allAuthenticatedUsersは設定できません。

IAM 条件(IAM Conditions)を使用して権限付与することもできます。

下記はCloud Storageの特定のバケットへのアクセス権限を与えないようにしています。

content {
  role = role_bindings.value
  condition_expression = role_bindings.value != "roles/storage.admin" ? "" : "resource.name != \"projects/_/buckets/バケット名\""
}

requester_justification_config 句で not_mandatory を指定すると申請者の申請理由が不要となります。

リクエスト者のコメントが必須な場合

requester_justification_config {    
    unstructured {}
}

リクエスト者のコメントが不要な場合

requester_justification_config {    
    not_mandatory {}
}

approval_workflow句がない場合、自動承認となります。

PAMの利用手順(申請・承認・監査ワークフロー)

特権アクセスのリクエスト

利用者がコンソールなど(APIリクエストも可)から特権アクセスをリクエストします。

コンソールからリクエストする場合

1.コンソールからPAMにアクセスする

2.「利用資格」タブから「自分の資格」をクリックする

3.対象の利用資格行の「権限付与をリクエスト」をクリックする

4.表示されたフォームの必須事項を選択・入力し「権限付与をリクエスト」をクリックする

APIでリクエストする場合

1.利用資格一覧を取得する

gcloud beta pam entitlements search --caller-access-type=grant-requester --location=global --project=$PROJECT_ID

2.次に1. で取得したデータを使ってリクエストを組み立てる

  • ENTITLEMENT_ID
    • name: projects/$PROJECT_ID/locations/global/entitlements/ENTITLEMENT_ID の値
    • ENTITLEMENT_ID=entitlement-3-shake
  • GRANT_DURATION
    • 時間
    • GRANT_DURATION=1800
  • JUSTIFICATION
    • 理由
    • JUSTIFICATION=テストのため

3.gcloud を実行して、権限付与をリクエストする

gcloud beta pam grants create --entitlement=$ENTITLEMENT_ID --requested-duration="${GRANT_DURATION}s" --justification=$JUSTIFICATION --location=global --project=$PROJECT_ID

リクエストを確認・承認

承認者がコンソールなど(APIリクエストも可)からリクエストを確認・承認を行います。

コンソールからリクエストする場合

1.コンソールからPAMにアクセスする

2.権限付与を承認タブから承認待ちをクリックする

3.対象の利用資格行の「承認/拒否」をクリックする

4.表示されたフォームの内容を確認し「承認」をクリックする

APIでリクエストする場合

1.自分が承認者になっている利用資格を検索します。

gcloud beta pam entitlements search --caller-access-type=grant-approver --location=global --project=$PROJECT_ID

2.次に1. で取得したデータを使って、承認または拒否できる権限付与リクエストを検索します。

  • ENTITLEMENT_ID
    • name: rojects/$PROJECT_ID/locations/global/entitlements/ENTITLEMENT_ID の値
    • ENTITLEMENT_ID=entitlement-3-shake
gcloud beta pam grants search --entitlement=$ENTITLEMENT_ID --caller-relationship=can-approve --location=global --project=$PROJECT_ID

3.取得したデータを使って、権限付与を承認します。

  • GRANT_ID
    • name: projects/$PROJECT_ID/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_IDの値
    • GRANT_ID=8999e44e-bc0f-4112-b220-8043edc015e7
  • ENTITLEMENT_ID
    • name: projects/$PROJECT_ID/locations/global/entitlements/ENTITLEMENT_ID の値
    • ENTITLEMENT_ID=entitlement-3-shake
  • APPROVAL_REASON
    • 権限付与を承認する理由
    • APPROVAL_REASON="テストのため"
gcloud beta pam grants approve $GRANT_ID --entitlement=$ENTITLEMENT_ID --reason="$APPROVAL_REASON" --location=global --project=$PROJECT_ID

4.取得したデータを使って、権限付与を拒否します。

  • DENIAL_REASON
    • 権限付与を拒否する理由
    • DENIAL_REASON="不要になったため"
gcloud beta pam grants deny $GRANT_ID --entitlement=$ENTITLEMENT_ID --reason="$DENIAL_REASON" --location=global --project=$PROJECT_ID

一時的な権限の付与

承認後、一時的に権限が付与されます。アクセス期間終了後、自動的に権限が剥奪されます。
なお、全てのアクティビティが監査ログに記録されます。

通知

  • メール通知
    • 申請者と承認者には、必ず通知メールが送信されます。
    • 通知メールは以下のようなメールが届きます。
      • 権限付与リクエスト者
        • title: You have been granted access to the resource projects/project_name
      • 権限付与承認者
        • title:Approve or deny 権限付与リクエスト者’s grant for the resource projects/project_name
  • Pub/Sub通知
    • Pub/Sub を介してすべての権限付与の変更に関する通知を受け取ることができます。

監査ログの確認方法

監査ログの表示はコンソールから行うことができます。

上記ではPrivileged Access Manager によって、付与が有効期限切れとなったことが確認できます。

アクションをクリックすると、監査ログの詳細で理由などの詳細を確認することができます。

まとめ

PAMについて基本的な機能や特徴とユースケース、設定手順について紹介しました。

PAMは、最小権限の原則、ジャストインタイムアクセス、承認ワークフロー、監査ログといった重要なセキュリティ機能を提供し、特権アクセス管理を強化します。
シンプルな設定で運用効率を高めつつ、セキュリティリスク軽減とコンプライアンス準拠を実現します。PAMのユースケースを参考に導入することで、組織のクラウド環境におけるセキュリティ体制を強化し、よりセキュアな運用が可能になります。

ブログ一覧へ戻る

お気軽にお問い合わせください

SREの設計・技術支援から、
SRE運用内で使用する
ツールの導入など、
SRE全般についてご支援しています。

資料請求・お問い合わせ