
Azure Privileged Identity Management (PIM) ロールアクティベーションをターミナルから直接管理するためのコマンドラインインターフェースツールです。
ターミナルから直接Azure Privileged Identity Management (PIM) ロールのアクティベーションを管理するためのコマンドラインインターフェースツールです。
azpimを使用する前に、次のものが揃っていることを確認してください。
# Azure CLIのインストール(未インストールの場合)
# 参照: https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli
# Azureにログイン
az login
# ログイン状態を確認
az account show
# npmを使用
npm install -g azpim
# pnpmを使用
pnpm add -g azpim
# yarnを使用
yarn global add azpim
インストール後、azpimコマンドがグローバルで使用可能になります。
以前にazp-cliを使用していた場合、プリセットは~/.config/azp-cli/(Windowsの場合は%APPDATA%\azp-cli\)に保存されています。移行するには:
presets.jsonを新しい場所(~/.config/azpim/、Windowsの場合は%APPDATA%\azpim\)にコピーします。npm uninstall -g azp-cli# リポジトリのクローン
git clone https://github.com/tapanmeena/azpim.git
cd azpim
# 依存関係のインストール
pnpm install
# プロジェクトのビルド
pnpm build
# 開発用にグローバルリンク
npm link
# グローバルインストール後
azpim
# 特定のコマンドを指定
azpim activate
azpim deactivate
azpim preset list
azpim update
# 開発モード(ソースから)
pnpm dev
グローバルフラグ:
--debug - デバッグログを有効にする--version - バージョン番号を表示新しいバージョンが利用可能かどうかを確認できます。
azpim update
# エイリアス
azpim upgrade
注意事項:
azpim updateは、最新の場合は終了コード0、更新可能な場合は2、エラーの場合は1を返します。--check-only - アップグレード手順を表示せず、ステータスのみをチェックして表示します。--output jsonは、スクリプトで使用可能な構造化レスポンスを返します。azpim activateとazpim deactivateは、1日に1回まで「更新可能」という短いヒント(テキストモードのみ)を表示します。AZPIM_NO_UPDATE_NOTIFIER=1(またはAZPIM_DISABLE_UPDATE_CHECK=1)を設定します。アップデート確認のキャッシュは、プリセットと同じ設定ディレクトリに保存されます。
~/.config/azpim/update-check.json(または$XDG_CONFIG_HOME/azpim/update-check.json)%APPDATA%\azpim\update-check.jsonフラグを使用して、インタラクティブメニューを経由せずにPIMロールを直接アクティベートまたは非アクティブ化できます。スクリプトやCI/CDワークフローに最適です。
# 単一のロールを名前でアクティベート(非対話)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--duration-hours 2 \
--justification "インシデント対応のための緊急アクセス" \
--output json
# 複数のロールをアクティベート(--role-nameを繰り返す)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--role-name "User Access Administrator"
# ロール名が複数の対象ロールに一致する場合(異なるスコープ)、
# --non-interactive はエラーになります。明示的にすべての一致を許可する必要があります。
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--allow-multiple
# リクエストを送信せずに何が起こるかをプレビュー
azpim activate --non-interactive --dry-run \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--output json
# 特定のロールを非アクティブ化
azpim deactivate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--justification "タスク完了"
# すべてのサブスクリプションにわたって非アクティブ化(subscription-idを省略)
azpim deactivate --non-interactive --yes \
--role-name "Contributor" \
--allow-multiple
共通フラグ(activate/deactivate):
--non-interactive - インタラクティブプロンプトを無効化-y, --yes - 確認プロンプトをスキップ--subscription-id <id> - ターゲットサブスクリプション(deactivateでは省略可能)--role-name <name> - ターゲットとするロール名(繰り返し指定可能)--allow-multiple - 複数のロール一致を許可--dry-run - 送信せずにプレビュー--output <text|json> - 出力形式(デフォルト: text)--quiet - 重要でない出力を抑制アクティベーション固有:
--duration-hours <n> - 期間(1~8時間、デフォルトはロールによって異なる)--justification <text> - アクティベーションの理由非アクティブ化固有:
--justification <text> - 非アクティブ化の理由(省略可能)プリセットを使用すると、日常的なアクティベーション/非アクティブ化ルーチン(サブスクリプション+ロール名+期間+理由)を保存し、--preset <name> で再利用できます。
デフォルトでは、プリセットはユーザーごとの設定ファイルに保存されます。
~/.config/azpim/presets.json(または$XDG_CONFIG_HOME/azpim/presets.json)%APPDATA%\azpim\presets.json場所を上書きするには:
AZPIM_PRESETS_PATH=/path/to/presets.jsonプリセットには、以下の一方または両方のブロックを定義できます。
activate: subscriptionId、roleNames[]、durationHours、justification、allowMultipledeactivate: subscriptionId(省略可能)、roleNames[]、justification、allowMultiplejustificationでは単純なテンプレートが使用可能:
${date} → YYYY-MM-DD${datetime} → ISOタイムスタンプ${userPrincipalName} → Microsoft Graph /me から解決# プリセットを作成(インタラクティブウィザード)
azpim preset add daily-ops
# Azure統合でプリセットを作成(サブスクリプション/ロールを取得)
azpim preset add daily-ops --from-azure
# プリセットを編集(インタラクティブウィザード)
azpim preset edit daily-ops
# すべてのプリセットを一覧表示
azpim preset list
# 1つのプリセットの詳細を表示
azpim preset show daily-ops
# プリセットを削除
azpim preset remove daily-ops
# プリセットを使用(フラグはプリセット値を上書き)
azpim activate --preset daily-ops --yes
# プリセットを使用した非対話実行
azpim activate --preset daily-ops --non-interactive --yes --output json
# プリセットを使用して非アクティブ化
azpim deactivate --preset daily-ops --non-interactive --yes
azpim preset addでプリセットを作成する際、activateやdeactivateのデフォルトとして設定することもできます。
azpim activate --non-interactive --yes は --subscription-idや--role-nameを指定しなくても動作できます。╔════════════════════════════════════════════════════╗
║ Azure PIM CLI - Role Activation Manager ║
╚════════════════════════════════════════════════════╝
✔ 認証成功
┌─ ユーザー情報 ──────────────────────────────────
│ 名前: 山田 太郎
│ メール: [email protected]
└──────────────────────────────────────────────────────
✔ 3件のサブスクリプションが見つかりました
? 何をしますか?
❯ ▶ ロールのアクティベート
◼ ロールの非アクティブ化
✕ 終了
お気に入りを使用すると、特定のサブスクリプションにマークを付けて素早くアクセスできます。お気に入りのサブスクリプションは、インタラクティブメニューのサブスクリプションリストの先頭に表示されます。
デフォルトでは、お気に入りはユーザーごとに保存されます。
~/.config/azpim/users/<userId>/favorites.json%APPDATA%\azpim\users\<userId>\favorites.json場所を上書きするには:
AZPIM_FAVORITES_PATH=/path/to/favorites.json# すべてのお気に入りを一覧表示
azpim favorites list
azpim fav list
# サブスクリプションをお気に入りに追加
azpim favorites add <subscription-id>
# キャッシュにない場合でも追加
azpim favorites add <subscription-id> --force
# お気に入りからサブスクリプションを削除
azpim favorites remove <subscription-id>
# すべてのお気に入りをクリア
azpim favorites clear
# お気に入りをファイルにエクスポート
azpim favorites export ./my-favorites.json
# お気に入りをファイルからインポート(既存のものを置き換え)
azpim favorites import ./my-favorites.json
# お気に入りをインポートして既存のものとマージ
azpim favorites import ./my-favorites.json --merge
# サブスクリプションキャッシュをリフレッシュ
azpim favorites refresh
azpimは、起動時間を改善するためにサブスクリプション情報を自動的にキャッシュします。キャッシュのTTL(有効期間)は6時間で、期限切れになると自動的にリフレッシュされます。
キャッシュファイルはユーザーごとに保存されます。
~/.config/azpim/users/<userId>/subscriptions-cache.json%APPDATA%\azpim\users\<userId>\subscriptions-cache.json# サブスクリプションキャッシュを強制リフレッシュ
azpim favorites refresh
# 開発モードでホットリロード実行
pnpm dev
# TypeScriptプロジェクトをビルド
pnpm build
# ビルド済みアプリケーションを実行
pnpm start
# コードベースのリント
pnpm lint
このリポジトリでは、CHANGELOG.mdに Keep a Changelog 形式を使用しています。
最良の結果を得るには、Conventional Commits を使用してください。
feat: ...(新機能)→ マイナーバンプfix: ...(バグ修正)→ パッチバンプchore: ...、docs: ...、refactor: ...(破壊的変更がない限りバンプなし)CHANGELOG.md の Unreleased セクションに最新のエントリがあることを確認します。
以下のいずれかを実行します。
# コミットから次のバージョンを自動決定、CHANGELOG.mdを更新し、
# package.jsonをバンプし、gitタグを作成します。
pnpm release
# 何が変更されるかをプレビュー
pnpm release:dry
# 必要に応じて特定のバンプを強制
pnpm release -- --release-as patch
pnpm release -- --release-as minor
pnpm release -- --release-as major
git push --follow-tags
npm publish
# または
pnpm publish
azpim/
├── src/
│ ├── index.ts # CLIエントリポイントとコマンド定義
│ ├── core/ # 基本ユーティリティ(ドメインロジックなし)
│ │ ├── constants.ts # 共有マジック値とデフォルト
│ │ ├── errors.ts # 統一エラーハンドリングユーティリティ
│ │ ├── json-store.ts # 汎用JSONファイル永続化
│ │ ├── paths.ts # 設定/データファイルパスの解決
│ │ └── ui.ts # ターミナルUI(スピナー、書式設定、色)
│ ├── azure/ # Azure SDKラッパー
│ │ ├── auth.ts # Azure CLI資格情報 + Graph /me ルックアップ
│ │ └── azure-pim.ts # PIMロールアクティベーション/非アクティブ化API
│ ├── data/ # ローカルデータ永続化
│ │ ├── favorites.ts # お気に入り管理
│ │ ├── presets.ts # プリセット設定と検証
│ │ ├── subscription-cache.ts # サブスクリプションキャッシュ(TTL 6時間)
│ │ └── update-check.ts # 更新通知システム
│ └── cli/ # インタラクティブフローとコマンドスキャフォールディング
│ ├── cli.ts # メインメニューループと共有ヘルパー
│ ├── command-handler.ts # 再利用可能なコマンドラッパー(認証、UI、エラー)
│ ├── activate-flow.ts # ロールアクティベーション(ワンショット+インタラクティブ)
│ ├── deactivate-flow.ts # ロール非アクティブ化(ワンショット+インタラクティブ)
│ ├── subscription-selector.ts # お気に入りによるサブスクリプション検索/選択
│ ├── favorites-manager.ts # インタラクティブお気に入り管理メニュー
│ └── presets-cli.ts # プリセット追加/編集/管理ウィザード
├── package.json
├── tsconfig.json
├── CHANGELOG.md
└── README.md
コードベースは階層化されたモジュール構造に従っています。
core/ — プロジェクト全体で共有される依存関係のないユーティリティ。json-store.tsは、すべてのデータ永続化ファイルで使用される汎用のロード/セーブパターンを提供します。errors.tsはエラー抽出とコマンドレベルのエラーハンドリングを一元化します。constants.tsはマジック値を排除します。azure/ — Azure SDK(@azure/identity、@azure/arm-authorization)と、ネイティブfetchを使用した軽量なMicrosoft Graph /me呼び出しの薄いラッパー。UIロジックは含まれません。data/ — ローカルファイル永続化(お気に入り、プリセット、サブスクリプションキャッシュ、更新状態)。すべてjson-storeを使用して一貫したファイルI/Oを行います。cli/ — ユーザー向けインタラクティブフローとコマンドスキャフォールディング。command-handler.tsは、すべてのCommanderコマンドにわたって定型コード(認証、UI設定、エラーハンドリング)を排除するラッパーを提供します。アクティベーションと非アクティブ化フローは、の関数を共有します。| 変数 | 説明 |
|---|
Azure CLIがインストールされ、PATHからアクセス可能であることを確認してください。
az --version
Azure CLIにログインしていることを確認します。
az login
アカウントにPIM対象ロールがあることを確認します。
az account show
Azure ADで必要な権限があるかどうかを確認します。
az login --refreshこのプロジェクトはISCライセンスの下でライセンスされています。
Tapan Meena - [email protected]
コントリビューションを歓迎します!プルリクエストを遠慮なく送信してください。
git checkout -b feature/amazing-feature)git commit -m '素晴らしい機能を追加')git push origin feature/amazing-feature)| コマンド | エイリアス | 説明 |
|---|
activate | a | Azure PIMでロールをアクティベート(デフォルト) |
deactivate | d | Azure PIMでロールを非アクティブ化 |
preset | - | 再利用可能なプリセットを管理 |
favorites | fav | お気に入りのサブスクリプションを管理 |
check-update | update, upgrade | 新しいバージョンの確認 |
help | - | ヘルプ情報を表示 |
| コマンド | 説明 |
|---|
preset list | 利用可能なすべてのプリセットを一覧表示 |
preset show | 特定のプリセットの詳細を表示 |
preset add | 新しいプリセットを追加(インタラクティブウィザード) |
preset edit | 既存のプリセットを編集(インタラクティブウィザード) |
preset remove | プリセットを削除 |
| コマンド | 説明 |
|---|
favorites list | すべてのお気に入りサブスクリプションを一覧表示 |
favorites add | サブスクリプションをお気に入りに追加 |
favorites remove | お気に入りからサブスクリプションを削除 |
favorites clear | すべてのお気に入りをクリア |
favorites export | お気に入りをファイルにエクスポート |
favorites import | お気に入りをファイルからインポート |
favorites refresh | サブスクリプションキャッシュをリフレッシュ |
withCommandHandlersubscription-selector.tsselectSubscriptionInteractiveAZPIM_PRESETS_PATH | プリセットファイルのパスを上書き |
AZPIM_FAVORITES_PATH | お気に入りファイルのパスを上書き |
AZPIM_NO_UPDATE_NOTIFIER | 1に設定すると自動更新チェックを無効化 |
AZPIM_DISABLE_UPDATE_CHECK | AZPIM_NO_UPDATE_NOTIFIERのエイリアス |