azure managed identity review_ja - tfsugjp/skills GitHub Wiki
azure-managed-identity-review プラグインを追加します。このスキルは、Azure のマネージド ID を、それを共有するすべてのリソース・アプリ設定・コード・フェデレーション資格情報(FIC)を横断してレビューします。Bicep、Terraform、実際のサブスクリプションから、各利用者の audience に対して不足している権限と、持つべきでない利用者に漏れている権限を報告します。レビューは読み取り専用で、修正は IaC の変更として提案します。
| 種別 | Issue |
|---|---|
| 親 | Issue #91 |
| サブ issue | Issue #92 |
| サブ issue | Issue #93 |
| サブ issue | Issue #94 |
| サブ issue | Issue #95 |
- ユーザー割り当て ID は、あるリソース用(たとえば Key Vault のキーを使うストレージのカスタマーマネージドキー)に作られたあと、ほかのリソース(Function App や、FIC 経由の GitHub Actions のワークフロー)でも使い回されがちです。
- 最初の用途で付けた権限は、ほかの利用者が使う audience(Service Bus、SQL、Cosmos DB データプレーン、独自の
api://アプリ)をカバーしません。また、ID に付いた権限は、すべての利用者と信頼された外部ワークロードが使えます。 - ローカル E2E は開発者本人の資格情報(
DefaultAzureCredential、__credentialのないlocal.settings.json)で動くため、権限の不足はデプロイ後にしか現れません。
- 配置: 新しいプラグイン
plugins/azure-managed-identity-review/に、スキル一つとスクリプトscripts/msi_review.py(Python 3.9 以上、標準ライブラリのみ)を置きます。 -
static <path>: Bicep のエントリファイルを Bicep CLI でコンパイルし、ARM JSON(入れ子のデプロイ、ARM 式、--parameters)を読み取り、Terraform(*.tf、または--tf-plan-jsonによるterraform show -json)を解析し、ソースコードとlocal.settings.jsonから資格情報・トークンのスコープ・サービスのホストを検索します(--map <dir>=<resource>)。 -
live --subscription <id>: 読み取り専用のaz呼び出しだけを使います(UTF-8 の本文ファイルを渡すaz restによる Resource Graph、Microsoft Graph を参照しないロール割り当て、FIC、マスクしたアプリ設定、Cosmos DB データプレーンの割り当て)。--static <path>でドリフトの指摘を追加し、--record/--replayでマスク済みの出力を保存・再利用します。 - モデル: ID、利用者(CMK、Key Vault 参照、イメージ取得、kubelet のスロットを含む)、実際に使われる ID つきのターゲット(接続の
__clientId、AZURE_CLIENT_ID、独自名のクライアント ID 設定、またはシステム割り当ての既定)、権限、FIC。ロールの ID と名前はaz role definition listで確認済みです。 - カバー判定: 権限はターゲットのリソースか、それを含むより広いスコープでターゲットをカバーします(リソースグループは分かる場合に比較し、解決できないスコープは無効。Key Vault のシークレットとキーの操作には別のロールが必要)。子リソース(コンテナー、キュー、シークレット、Foundry プロジェクト)に対する権限は、利用者のエンドポイントがその子を指す場合だけ有効です。ターゲット名はエンドポイント、Key Vault 参照、レジストリのログインサーバー、CMK の Key Vault URI から取得し、Event Hubs と Service Bus はリソースの種類で区別します。
- 規則: MIR000 解決できない参照、MIR001 共有された ID、MIR002 カバーする権限がないターゲット、MIR003 共有 ID の広い・特権の・一利用者だけの権限、MIR004 共有 ID の FIC または標準外の FIC、MIR005 クライアント ID の欠落・意図しない ID・どの ID とも一致しない ID、MIR006 確認が必要な RBAC 以外の権限、MIR007 ローカル開発が不足を隠す、MIR008 Azure と IaC のドリフト。
- 出力: ID ごとの Markdown レポート(利用者と用途、権限とそれを必要とする利用者、FIC、修正方法つきの指摘)または
--json。--resourceはそのリソースの ID と、その ID のほかのすべての利用者をレビューします。終了コードは 0、1(警告かエラー)、2(入力エラー)です。
- Bicep/ARM と Terraform の静的インベントリ(#92)。
- 記録と再生に対応した読み取り専用の live 収集器(#93)。
- 規則 MIR000-MIR008 とフィクスチャ、単体テスト(#94)。
- SKILL.md、参照資料、プラグインのマニフェスト、マーケットプレース、リポジトリの文書(#95)。
-
python3 scripts/validate_marketplaces.pyが成功します。 - 単体テストがローカルと既存の Ubuntu CI ジョブで成功します。コンパイル済み ARM、Terraform、コードつき Bicep での正規シナリオ、ID の選択、RBAC 以外のターゲット、クリーンな構成、解決できない参照、Terraform の plan JSON、ドリフトを含む記録済みの live 出力、すべての規則の検出例を検証します。
- 実際のサブスクリプションに対する読み取り専用の live 実行で、
azの引数、マスク処理、ID の推定を確認します。