mcpField
I
iam-helper-for-privileged-access-management

iam-helper-for-privileged-access-management

github.com/googleセキュリティ21.6k4.1k 回インストール今日更新
リポジトリ

iam-helper-for-privileged-access-management について

Google Cloud Privileged Access Manager のエンタイトルメントとグラントのワークフローを計画・検証・実行するスキルです。一時的なアクセス昇格や承認設定を扱い、管理者、申請者、承認者を対象とします。

主な機能

  1. 01エンタイトルメントの作成・参照・更新・削除
  2. 02承認ワークフローと申請時間上限の設定
  3. 03一時的なアクセス昇格とグラント審査の案内
  4. 04変更や破壊的操作前の確認
  5. 05実行前の計画検証

活用シーン

  1. 01承認者を含む期限付きアクセスの設定
  2. 02保留中のグラント申請の審査や処理
  3. 03プロジェクト、フォルダー、組織スコープでのエンタイトルメント管理

MCP 対応

gcloud、REST API、MCP コマンドによる PAM 操作を案内します。ワークフローでは計画と検証を行い、変更操作の前に明示的な確認を求めます。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/google/skills --skill iam-helper-for-privileged-access-management

インストール後、Claude Code で/iam-helper-for-privileged-access-managementを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
entitlement_template.yaml
references/
approver.md
attribution.md
requester.md
scripts/
list_entitlements_hierarchy.sh
search_eligible_entitlements.sh

詳細

Privileged Access Manager (PAM)

このスキルでは、Privileged Access Manager(PAM)のエンタイトルメントに対する CRUD 操作、承認ワークフローの設定、アクセス昇格、および付与の承認/拒否ワークフローを計画、検証、実行するための手順を説明します。

使用状況の帰属

必ずお読みください:gcloud、REST API、または MCP コマンドを実行する前に、 使用状況の帰属の指示を必ず読み、従ってください。

目次

基本概念 {#core-concepts}

Privileged Access Manager(PAM)は、恒久的または常時有効な IAM ロールの割り当てを、オンデマンドで有効期間が限定され、監査可能なアクセス昇格に置き換えます。恒久的な IAM ポリシーバインディングを追加する代わりに、PAM では次を使用します。

  • エンタイトルメント: アクセス範囲、リクエスト可能なユーザー、および承認者を定義する設定です。
  • グラント: エンタイトルメントの IAM ロールを有効にするために、エンタイトルメントに対して作成される短期間のリクエストです。
特権アクセス(privilegedAccess)

エンタイトルメント内の privilegedAccess ブロックでは、付与するアクセス範囲を正確に定義します。アクセス範囲は、次の 3 つの重要な要素で構成されます。

  • リソース: アクセスを付与する対象の Google Cloud リソース(プロジェクト、フォルダ、または組織)です。
  • ロールの設定: 割り当てる IAM ロール(roleBindings.role)です。
  • 条件: (任意)ロールが適用される時間や場所を制限する IAM 条件式(roleBindings.conditionExpression)です。
基本的なワークフロー
  1. 管理者がエンタイトルメントを作成します。
  2. リクエストするユーザーは、これらのエンタイトルメントに対してグラントをリクエストできます。
  3. エンタイトルメントに承認が設定されている場合、承認者がリクエストされたグラントを承認する必要があります。
  4. 必要な承認手順がすべて完了すると、リクエストされた期間、グラントが有効になります。
  5. リクエストされた期間が経過すると、グラントは自動的に終了し、昇格されたアクセス権が削除されます。

承認ワークフローと最大リクエスト期間 {#approval-workflows}

承認ワークフロー(approvalWorkflow)

機密性の高い環境で、一時的なアクセスを有効にする前に人による承認が必要な場合は、エンタイトルメントの YAML マニフェスト(entitlement.yaml)で approvalWorkflow ブロックを設定します。

approvalWorkflow:
  manualApprovals:
    # Optional: requires approver to supply a justification string
    requireApproverJustification: true
    steps:
    - approvalsNeeded: 1
      approverEmailRecipients:
      - [email protected]
      approvers:
      - principals:
        - user:[email protected]  # or group:[email protected]
  • 含める場合: ユーザーのプロンプトで手動承認または承認者(ユーザーまたはグループ)が必要と指定されている場合は、必ず approvalWorkflow を含めます。
  • 結果: approvalWorkflow を含むエンタイトルメントに対してユーザーがグラントをリクエストすると、グラントは APPROVAL_AWAITED に遷移します。リクエストしたユーザーは、承認者の判断を待つ必要があります(Mode 3)。
最大リクエスト期間(maxRequestDuration)

maxRequestDuration は、グラントをリクエストする際に、リクエストするユーザーが指定できるアクセス昇格の最長期間を定義します。

  • 柔軟な設定: ユーザーの具体的なリクエストに合わせて maxRequestDuration を設定します(例:8 hours / 28800s、1 hour / 3600s、24 hours / 86400s)。
  • デフォルト値: ユーザーが最大リクエスト期間を指定しない場合は、デフォルトで 4 hours(14400s)を使用します。
  • YAML 構文: エンタイトルメントの YAML では、maxRequestDuration を必ず秒数の文字列として指定します(例:"14400s"、"28800s")。

安全性と確認の方針 {#safety-confirmation}

以下のワークフロー上のガードを厳守してください。

  • 変更/破壊的な実行(作成、更新、削除、承認、拒否、取り消し): 必ず予定している変更内容をプレーンテキストで要約し、ユーザーに明示的な確認(Yes/No)を求めてください。
  • 読み取り専用の調査(一覧表示、説明、検索): 確認を求めずに自律的に実行してください。
  • Bash コマンドのバッチ処理(ユーザーの確認を減らす): ホスト環境では、シェルツールを呼び出すたびにユーザーの承認が必要です。確認のポップアップを最小限に抑えるため、連続する読み取り専用コマンドと検索コマンドを、1 回のツール呼び出し内の複合 Bash スクリプトにまとめてください(例:プロジェクト、フォルダー、組織の階層監査を 1 つの複数行の実行にまとめます)。
  • 無限ループ防止策: コマンドが明確で対処可能なエラーで失敗した場合は、原因を自力で調査して再試行してもかまいません。エラーの原因が不明瞭な場合は、直ちに停止し、stderr の出力を提示して、ユーザーの指示を待ってください。

計画・検証・実行パターン {#plan-validate-execute}

すべての変更操作(Mode 1 Step 3、Mode 2 Create、Update、Delete、Mode 3 Approve、Deny)では、次の手順に従ってください。

  1. 計画: 提案するパラメーターを組み立てるか、エンタイトルメントのサンプル構造を読み取ります。(エンタイトルメントを作成する場合は、テンプレートを読み込んで使用します: assets/entitlement_template.yaml)。
  2. 検証: 対象となる構成パラメーター(リソース名、ロールのバインディング、期間の上限)が社内ルールに準拠しているか確認します。
  3. 実行: 検証済みの計画を提示し、ユーザーから明示的な確認を得てから、gcloud コマンドを実行します。

モード 1:対話型アクセス権限の昇格 {#mode-1}

ユーザーがリクエスターとして一時的なアクセス権限の昇格を求めた場合は、 references/requester.md の詳細な手順を読み込み、それに従ってください。


モード 2:単独のエンタイトルメント CRUD {#mode-2}

エンタイトルメントの構成では、次の手順に従ってください。

エンタイトルメント管理者に必要な権限
  • roles/privilegedaccessmanager.admin:エンタイトルメントの構成を作成、更新、削除するために必要です(Mode 1 Step 3 および Mode 2 CRUD)。
  • スコープの IAM 管理者権限: 対象の階層スコープで必要です。エンタイトルメントを作成すると、そのスコープに対する今後のロール評価とバインディングが許可されるためです。
    • 組織: roles/iam.securityAdmin
    • フォルダー: roles/resourcemanager.folderAdmin
    • プロジェクト: roles/resourcemanager.projectIamAdmin
  • roles/privilegedaccessmanager.viewer:スコープをまたいでエンタイトルメントを一覧表示および説明するために必要です。

(規則:以下のすべての単独のエンタイトルメント CRUD コマンドでは、エンタイトルメントが定義されている場所に対応するフラグを使用してください。--project=PROJECT_ID、--folder=FOLDER_ID、または --organization=ORGANIZATION_ID を渡します。)

1. エンタイトルメントの作成
  1. ENTITLEMENT_ID が存在するか確認します。
gcloud pam entitlements describe ENTITLEMENT_ID \
    --location=global \
    --project=PROJECT_ID
  • 存在する場合: 停止します。次のように尋ねます。「指定された PAM エンタイトルメント ENTITLEMENT_ID はすでに存在します。詳細を表示するか、代わりに更新しますか? (表示/更新/終了)」
  • NOT_FOUND の場合: テンプレート assets/entitlement_template.yaml を読み込みます。 ロール名に基づき、小文字とハイフン区切りで ID を生成します (例:roles/compute.admin の場合は compute-admin)。注:
    • roleBindings には複数の IAM ロールを指定できます。
    • 各ロールバインディングには、任意で IAM の conditionExpression を含めることもできます。
    • レガシーの基本ロール(例:roles/viewer、roles/editor、roles/owner)はサポートされていません。代わりに、v2 の基本ロール相当(例:roles/basic.viewer、roles/basic.editor、roles/basic.owner)を使用してください。有効な事前定義ロール、カスタムロール、または v2 の基本ロールを選択してください。
  • ユーザーの指定に基づいて maxRequestDuration を設定します(例:8 時間の場合は "28800s"、1 時間の場合は "3600s")。ユーザーから指定がない場合は、 "14400s"(4 時間)をデフォルトにします。ポリシーで手動承認が指定されている場合、またはユーザーから要求された場合は、 entitlement.yaml に approvalWorkflow ブロックを設定します。 requesterJustificationConfig: {unstructured: {}} はそのまま維持します。
  • 次のように尋ねます。「PAM エンタイトルメント ENTITLEMENT_ID を作成しようとしています。 この作成を承認しますか?(はい/いいえ)」
  • デプロイします。
gcloud pam entitlements create ENTITLEMENT_ID \
    --location=global \
    --entitlement-file=entitlement.yaml \
    --project=PROJECT_ID
2. エンタイトルメントの読み取り

次の読み取り操作は自律的に実行します。

単一のスコープにあるすべてのエンタイトルメントを一覧表示します。

gcloud pam entitlements list \
    --location=global \
    --project=PROJECT_ID

リソース階層全体(プロジェクト、親フォルダ、組織)で定義されているすべてのエンタイトルメントを一覧表示するには、階層一覧表示スクリプトを使用します。

bash scripts/list_entitlements_hierarchy.sh --project=PROJECT_ID

(または、--folder=FOLDER_ID か --organization=ORGANIZATION_ID を指定します。)

対象のエンタイトルメントの詳細を表示します。

gcloud pam entitlements describe ENTITLEMENT_ID \
    --location=global \
    --project=PROJECT_ID
3. エンタイトルメントの更新
  1. export コマンドを実行して、現在の設定(etag を含む)を生成します。

    gcloud pam entitlements export ENTITLEMENT_ID \
        --location=global \
        --project=PROJECT_ID > {scratch}/updated_entitlement.yaml
    

    見つからない場合は、list の実行または終了を提案します。

  2. エクスポートした {scratch}/updated_entitlement.yaml ファイルを編集し、要求された変更(例: maxRequestDuration、approvalWorkflow、eligibleUsers の更新)を適用します。etag は変更しないでください。

  3. 次のように尋ねます。「PAM エンタイトルメント ENTITLEMENT_ID を更新しようとしています。 この更新を承認しますか?(はい/いいえ)」

  4. 実行します。

gcloud pam entitlements update ENTITLEMENT_ID \
    --location=global \
    --entitlement-file={scratch}/updated_entitlement.yaml \
    --project=PROJECT_ID
4. エンタイトルメントの削除
  1. describe を使用して存在を確認します。見つからない場合は、一覧表示または終了を提案します。

  2. 安全性の確認: オープン状態のグラントがあるエンタイトルメントは削除できません。 削除する前に、ACTIVE または SCHEDULED のグラントを検索します。

    gcloud pam grants list \
        --entitlement=ENTITLEMENT_ID \
        --location=global \
        --project=PROJECT_ID \
        --filter="state:(ACTIVE, SCHEDULED)"
    

    オープン状態のグラントが見つかった場合は、取り消しの許可をユーザーに求めます。「このエンタイトルメントにはアクティブまたは予定済みのグラントがあります。エンタイトルメントを削除できるよう、これらを取り消すことを許可しますか?(はい/いいえ)」

    「はい」の場合は、取り消します。

    gcloud pam grants revoke GRANT_ID \
        --entitlement=ENTITLEMENT_ID \
        --location=global \
        --project=PROJECT_ID \
        --reason="Revoking to delete entitlement"
    
  3. 次のように尋ねます。「PAM エンタイトルメント ENTITLEMENT_ID を完全に削除しようとしています。この削除を承認しますか?(はい/いいえ)」

  4. 実行します。

gcloud pam entitlements delete ENTITLEMENT_ID \
    --location=global \
    --project=PROJECT_ID

モード 3:承認者ワークフロー {#mode-3}

承認者が保留中のグラントリクエストを確認、承認、または拒否する必要がある場合は、 詳細な手順を記載した references/approver.md を読み込み、それに従ってください。


関連リンクとリソース {#supporting-links}

Privileged Access Manager の使用方法について詳しくは、以下を参照してください。

コメント