Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
caOptics — CA Optics - Azure AD 条件付きアクセスのギャップ分析ツール | Kitploit
ツール/GitHubGitHub/jsa2/caoptics
防御ツール構成監査クラウドセキュリティアイデンティティ&アクセス管理 (IAM)認証設定ミスArchived
GitHubjsa2/caoptics

caOptics

CA Optics - Azure AD 条件付きアクセスのギャップ分析ツール

リポジトリを見る
3372642年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

注記

開発優先順位の変更と、コミュニティ活動を他の分野(PoC、他のツール、デモ/プレゼンテーション)に集中させるため、プロジェクトはアーカイブされ、読み取り専用に設定されました。


  • CA Optics - Azure AD 条件付きアクセス ギャップ アナライザー
    • 条件付きアクセスとは
    • 初期テスター向けの注意事項
  • リリースノート
  • ドキュメント
    • ギャップの例
    • 順列の生成
    • 前提条件
    • 重要
    • 説明 - Conditional Access ギャップ アナライザー
      • 既存ツールとの比較
    • スコープ
    • 主観的な設計
      • 設計上の決定
        • プラットフォームのルックアップ
        • ルックアップの違い
        • グループの入れ子
    • パラメーター
      • launch.json からパラメーターを指定する(VSCode でのデバッグ)?
    • ツールの実行
    • レポートの表示
    • トラブルシューティング
  • コントリビューション

CA Optics - Azure AD 条件付きアクセス ギャップ アナライザー

Azure AD Conditional Access Gap Analyzer は、複雑な Azure Active Directory 条件付きアクセス ポリシー構成内に存在する可能性のあるギャップをスキャンするためのソリューションです。

条件付きアクセスとは

条件付きアクセスに初めて触れる場合は、次の Microsoft の記事を確認することをお勧めします: https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview


初期テスター向けの注意事項


このツールを実行するためのワンライナー:(これだけを読む予定で、インストールが完了している場合)

node ./ca/main.js --mapping --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --clearTokenCache --clearMappingCache


前提条件を完了し、この README ファイルを読んだら、以下を検討してください:

  1. reportOnly ポリシーは終了条件として考慮されません: 参照: scope

  2. 各スキャンを --clearPolicyCache 付きで実行してください

  3. ポリシーに関連するグループ/ユーザーに変更を加えた場合は、各スキャンを --clearMappingCache 付きで実行してください

  4. ユーザーとアプリを対象とするポリシーのみがスコープに含まれます(これは最も一般的なスコープですが、たとえばセキュリティ登録ポリシーは評価されないことを意味します) 参照: scope

  5. まずテスト環境から始めて、ツールの仕組みについて経験を積み、期待値を設定できるようにしてください

  6. ポリシーから除外されている既知のグループまたはユーザーがいる場合は、除外を確認したい場合を除き、--skipObjectIds でスキャンから除外するオブジェクトを定義してください

  7. 複数の環境でスキャンを実行する場合は、新しいスキャンを実行する前にログインとキャッシュを削除してください

参照:parameters - AZ CLI をインストールしている場合は、az account clear で AZ CLI のキャッシュをクリアしてから、スキャン予定の環境に対して az login で新しいログインを実行してください

参照 その他の重要な注意事項


リリースノート

root@kitploit:~
Release notes: 0.7.1
- Updated depedencies and report text outputs 
Release notes: 0.7
- Uses beta endpoint now by default, --expand option now expands the results to report regardless of the use of --allTerminations
Release notes: 0.6.9
- using --expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016 and expand 10 group members to for separate inspection.
Release notes: 0.6.8
- When you update policy with any guest conditions in GUI that policy will be only available from the beta endpoint after the update (during preview). 
- This update brings normalization for policies that are transfered to beta endpoint due to this behavior. 
- The policy will be evaluated like the previous guest conditions, as long as the following conditions are included "internalGuest,b2bCollaborationGuest,b2bCollaborationMember" and no tenants are excluded from the policy. In order to evaluate transferred policies, 
- use '--allowPreviewPolicies' when running CaOptics to account for this behavior

Release notes: 0.6.6-7 beta
- Allow use of different login endpoints for login and graph with params: --altLogin --altGraph
- Allow use of custom filtering for policies (this only recommended, when the policies do not adhere to expected schema)

Release notes: 0.6.5 beta
- Added counter to reporting when high number of permutations is also added to report (default is to add only unterminated)
- Minor code fixes changing <var> to <let> 
- Report filename now includes day, month, year and tenantId e.g. report_day_4_month_9_year_2022-tenant_48f55450-183a-45d6-a9ce-68f3cbc68947.csv

Release notes: 0.6.4 beta
- Get more groups per single call (less batching)
- Fix race condition detected when generally using for await loops 
- Enclose values with "" between delimitters (CSV)

Release notes: 0.6.3 beta
- Optimizations to way the mapped objects are handled. 
  - Mapped objects are cached. You can recreate the object mapping by using parama 'clearMappingCache'
  - Lookup keys will start from 'user/group/role' conditions always first
  - Added possibility to populate usermap with random UUID's to test for performance impact (this just debug option, and not really something that would be in non-beta versions)

Release notes: 0.6.2 beta
- Separated cache params into separate functions -> (clearTokenCache and ClearPolicyCache)
- Added possibility of running pre-optimized algorithm on permutations with param --aggressive (High memory consumption, only here for A/B testing)
- merge completed.

Release notes: 0.6.1 beta 
- Basic version of CSV reporting added
- Streamlined permutation generation to ensure essential permutations are generated, and some permutations are are terminated earlier on the lookups

Release notes: 0.6 beta (first non "silent" release)
- App displayNames added to MD report. Object type added to the user type

Release notes: 0.5.2,0.5.1,0.5 beta  (see previous branches for release notes)


ドキュメント

ギャップの例

クロスポリシー検出の例

❌ 値が 0 の順列は、その特定の条件の組み合わせに対して終了したポリシーがないことを意味します。

ポリシー終了数ルックアップ
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:GuestsOrExternalUsers
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:Jane Doe

✅ 検出の詳細な説明は docs/example.md でお読みください


順列の生成

順列は getPol2.js によって生成されます

  • 仕組み: すべての条件に対して再帰的検索が実行され、その後、条件は一意の順列の下に配置されます

順列は JSON Crack サービスで視覚化できます:

(視覚化: https://jsoncrack.com/)

前提条件

ランタイム

  • Node.JS 14 LTS (Linux) (Linux へのインストール)
  • Node.JS 16 LTS (Windows) (Windows へのインストール)

fire & forget バージョンを使用しない場合```bash nvm use 16 git clone https://github.com/jsa2/caOptics; cd caOptics; npm install;

root@kitploit:~
**Azure Cloud Shell (Bash) 用のファイア・アンド・フォーゲット実行セットアップ**```bash
curl -o- https://raw.githubusercontent.com/jsa2/caOptics/main/init.sh | bash;
# Force reload of NVM
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 
# This loads nvm

The input chunk is empty — no content was provided to translate. Please supply the Markdown text for chunk 5/19.```bash cd caOptics

Force fresh login (AZ CLI can't use the built-in token for the scope we are looking in here)

az login

root@kitploit:~
**Azure AD 関連**
- Azure AD Security Reader ロールが有効になっている 
- Azure CLI と既存の CLI セッションがある場合、このツールはその [セッション](https://github.com/jsa2/caoptics/blob/main/tokenHandler/getCode.js) を使用します。 
   - Azure CLI がインストールされていない場合は、Azure CLI の clientID だけが、Node.js http クライアントによって開始される device_code フローでトークンを取得するために使用されます。

      >![](https://assets.kitploit.com/production/public/readmes/47865/74e5e9fa7f505e20aecbe9ab86620b749fbecbd246cf233c4826991cda9a493b.png)  


**以下のオープンソースパッケージが使用されています**

コード量を減らすために、操作と美観のために以下の依存関係を使用しています(これらの素晴らしいパッケージのメンテナーの皆様に敬意を表します。各パッケージのライセンスリンクはライセンス列に記載されています)。
  
  パッケージ | 見た目|操作|ライセンス
  -|-|-|-
  [axios](https://www.npmjs.com/package/axios)||✅ | [MIT](https://github.com/axios/axios/blob/v1.x/LICENSE)
  [yargs](https://www.npmjs.com/package/yargs)||✅ | [MIT](https://github.com/yargs/yargs/blob/main/LICENSE)
  [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) | |✅|[MIT](https://github.com/auth0/node-jsonwebtoken/blob/master/LICENSE)
  [chalk](https://www.npmjs.com/package/chalk)| ✅ | |[MIT](https://github.com/chalk/chalk/blob/main/license)
   [js-beautify ](https://www.npmjs.com/package/js-beautify) | ✅ | |[MIT](https://github.com/beautify-web/js-beautify/blob/main/LICENSE)

**これを動作させるために必要なネットワークアクセスは?**

1. 動作には以下のホストが必要です  ```sh
  graph.microsoft.com
  login.microsoftonline.com
  1. 操作前に、依存関係をダウンロードするために github と npmjs へのアクセスが必要です。

    ネットワーク制限環境でこのツールを実行する予定がある場合は、パッケージのインストールと github.com へのアクセスが許可された環境で先に依存関係をダウンロードしてください。その後、インストールディレクトリ全体をzip化して、ネットワーク制限環境に転送できます。

以下は、Node.js アプリでサードパーティのパッケージを実行するときに行う一般的なトレースです。実行時に呼び出される URL を示しています。


重要

  1. ライセンスをお読みください

  2. ⚠️ 起動パラメータに対する入力サニタイズは行われません。これらのパラメータの入力は制御されていること、またこのツールが無制御環境(または無人環境)で実行されないことが常に前提とされているためです。すべての経路を確認したわけではありませんが、シェルコード実行を達成するのは簡単だと考えています。このツールは悪意のある入力を想定していないため、起動引数を事前に確認せずにコマンドラインに貼り付けないことをお勧めします。

  3. このツールは常に読み取り専用の権限でのみ実行することを推奨します(AZ CLI をインストールしている場合は、先に進む前に AZ CLI キャッシュを削除してください az account clear)

  4. 評価対象のポリシーにレガシ認証のみの条件が含まれている場合、レガシ認証は評価されません - 背景: Microsoft は Exchange の基本認証を廃止するプロセスにあり、レガシ認証評価の大部分はまもなく(2022年末までに)無関係になります。

    それでも --includeLegacyAuth パラメータを選択して、レガシ認証ポリシーのみを組み合わせに含めることができます。この場合、レガシ認証がすべてのアプリで対象となっていると見なされる(つまり、レガシ認証をサポートしていないアプリについても評価される)点に注意してください。EXO だけでなく。

  5. このツールはセッション永続化のために AZ CLI の更新トークンをローカルに保存します - トークンは(このツールを使用するかどうかに関係なく、Azure CLI が BASH でキャッシュするのと同様に)ローカルに平文でキャッシュされます。トークンキャッシュは暗号化できますが、現時点では PoC にとって利点はありません。トークンキャッシュを暗号化してもあまり役に立ちません。システム上で実行されている他の多くのツールやアプリが、不透明な更新トークンを平文形式で保存している可能性があるためです。

  6. レポートと順列について: 読みやすさと冗長性の最適なバランスをまだ模索中です。スコープ内のすべてのギャップは捕捉されていると信じていますが、そのような検出のアルゴリズムに多数の変更を加えてきたため、まだ考慮していないエッジケースが存在する可能性があります。


説明 - Conditional Access Gap analyzer

このツールは、サインインログにギャップが現れない場合でも、条件付きアクセスポリシーのギャップを見つける問題を解決します。

既存ツールとの比較

このツールは既存のツールと何が違うのでしょうか?

補足

¹ ベストプラクティスアナライザー

² ギャップを露呈する条件がサインインログに記録されたことがない場合、ギャップを特定できません

³ Cloud Shell は必須ではありませんが、Node.js がインストールされていない可能性があるこのツールのユーザーにとっては良い代替手段です

スコープ

バージョン0.5でカバーされる条件は以下のとおりです。

✅Users / Roles /Groups

✅Cloud apps (すべてのアプリ、または単一のアプリを定義するポリシーのみがスコープに含まれます)

✅Device platforms (例: ユーザーエージェント)

✅Locations

✅Client Apps (例: ブラウザ / デスクトップおよびモバイルアプリ) ¹

✅Access Controls (Grant / Block) (アクセスコントロールが有効なポリシーのみがスコープに含まれます ²)

  • これらの条件は出発点として選ばれました。典型的な攻撃者が悪用可能なギャップのほとんどはこれらのポリシーで発生するためです。このツールのテストからより多くの経験を得るにつれて、新しいギャップ検出を導入します。
  • (リストにないものは評価されません。例:リスクベースのポリシーはギャップをカバーしているとは見なされません。リスク検出は完璧ではないと考えられているため、リスクが関連する場合にのみ MFA を要求するのではなく、むしろ何かをブロックしたい状況で使用されるべきです)

¹ Microsoft がレガシ認証を廃止しているため、レガシ認証はレビューされません ² ポリシーの適用を有効にする必要があります(レポート専用ポリシーはデフォルトでは評価されませんが、特定のフラグで含めることができます)

意見を反映した設計

このツールがポリシー設計における作成者の意見を反映していることを理解することが重要です。

条件付きアクセス設計には2つの流派があります。

  1. インクルードベース: 組織の利用パターンの予測に一致する条件にのみ CA を適用します。

  2. エクスクルードベース: すべての条件に CA を適用し、その後、これらの例外を処理するための狭い除外を作成します。

⚠ このツールは CA 設計の後者の流派でのみ機能します。この設計の基本は、攻撃者がすべてのアクセスパターンを有効と見なすことです。たとえ組織が自社の利用には有効でないと考えるパターンであってもです。お使いの利用パターンがこのツールのアプローチに適合しない場合は、代わりに既存ツールの使用を検討することをお勧めします。


この考え方は、Microsoft のベストプラクティス 'すべてのアプリに条件付きアクセスポリシーを適用する' と似ていますが、次のステートメントと異なります。つまり、すべてのアプリに加えて、他のすべての設定済み条件もポリシーまたは特定のタイプの除外でカバーされるべきであるという点です ¹

すべてのアプリに少なくとも1つの条件付きアクセスポリシーが適用されていることを確認してください。セキュリティの観点からは、すべてのクラウドアプリを対象とするポリシーを作成し、ポリシーを適用したくないアプリケーションを除外する方が良いです。これにより、新しいアプリケーションをオンボードするたびに条件付きアクセスポリシーを更新する必要がなくなります。

¹ このツールは、信頼できる場所または信頼できるデバイスの除外が使用され、その結果として信頼できるデバイスまたは場所の使用によりポリシーが適用されない場合も、ギャップがカバーされていると見なします。信頼できる場所または信頼できるデバイスを MFA と組み合わせることを要求する管理者向けのベストプラクティスが存在することは言及する価値があります。


設計上の決定


プラットフォームの検索

現在の設計では、すべての条件が「すべて」のプラットフォームポリシーと一致する必要があります。これは、すべてのクライアントが明示的に選択され、そのためこの特定のポリシーでは「不明な」クライアントが選択されないというシナリオに基づいています。

そのような条件の例```json "platforms": { "includePlatforms": ["all"], "excludePlatforms": ["macOS"] },

root@kitploit:~
**参考** https://learn.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-conditions#device-platforms


> **重要** <br> *Microsoft では、サポートされていないデバイスプラットフォームに対して、条件付きアクセスポリシーを設定することを推奨しています。たとえば、Chrome OS やその他のサポートされていないクライアントから企業リソースへのアクセスをブロックする場合は、デバイスプラットフォーム条件として「任意のデバイス」を含め、サポートされているデバイスプラットフォームを除外し、[許可] コントロールを [アクセスをブロック] に設定したポリシーを構成してください。*

---

#### 参照の相違点


1. ロールの参照
> 条件としてロールが使用される場合、除外/包含の参照はロールのみによって決定されます。これにより、ポリシーがロールに対して正しく終了しても、結果ではそのロールに属するユーザーがポリシーから除外されたままになる可能性があります。結果では両方の条件が強調表示されます(マージされません)。これは、ユーザーまたはグループのコンテキストなしでロールの終了を個別に表示したいという設計上の決定によるものです。

 --- 

    Example:
    userID:0cd1b62d-5ff8-497b-9b56-9bb02bc0ab8c is included from All Apps policy

    There is admin policy, that covers role of Global administrator, but not the userId. 

    Both of following conditions would be shown in results:
    1. Role GA is excluded individually (1)
    2. UserId is not explicitly targeted by group or userId (0)

    All (cross-policy)	policies matched:1	users:Company Administrator
    All (cross-policy)	policies matched:0	users:joosua santasalo
    


---

2. グループの参照
> 逆に、グループが使用されている場合、ポリシーの終了はマージされ、ユーザーの除外はグループの包含によって終了したものとして表示されます。

    Example:
    userID:194383eb-6053-4d1e-bc72-f332be6ca2cb is included from All Apps policy

    There is policy which targets the user only by group

    Following conditions would be shown in results:
    1. User is excluded individually 
    2. User is targeted via group.

  
    All (cross-policy)	policies matched:1	users:Vihtori Santasalo (matched via group)


3. ゲストの参照
   
> このリリースでは、ユーザーはゲストとしてマップされません。この機能は後で導入される予定で、ゲスト userId の包含/除外を捕捉して ``GuestsOrExternalUsers`` プロパティに正しくマップできるようになります。
現在、ゲストユーザーは通常のユーザーと同じようにマップされます。
>

#### グループのネスト

  > パフォーマンス上の考慮により、グループのメンバーシップを解決するためのネスト深度は、グループが別のグループのグループである場合にのみ 1 回解決されます。そうしないと、サブグループがいずれかのルートグループを含む可能性があるため、メンバーシップが無期限に解決され、終わりのないループ状態になるリスクがあります。

    Membership:    
    Group1 -> all members resolved
    --> user is member of Group1
    --> Group2 is member of Group1 -> all members resolved to Group1
      --> Group3 is member of Group1 -> NOT RESOLVED

> もし挑戦するなら... コード内で直接ネストを増やすこともできます... [group.js](https://github.com/jsa2/caoptics/blob/main/ca/mainPlugins/userMappers/group.js)

![](https://assets.kitploit.com/production/public/readmes/47865/59681df621b6d006dbf9ae0a77045e5967665eb4000674c643fcc9a9e74ad856.png)  



## パラメータ

Param| Description 
-|-
``mapping`` | 既定では、ユーザーおよびグループベースの除外は、オブジェクトの正確な ID によって評価されます。たとえば、あるポリシーでオブジェクトが除外された場合、そのオブジェクトは別のポリシーで正確な ID によって見つかる必要があります。 <br> `` --mapping`` を使用すると、MS Graph を呼び出してオブジェクト間の関係を設定し、たとえば、あるポリシーで userId によってユーザーが除外されても、別のポリシーでは groupId によってそのユーザーが含まれていることを評価が検出できるようにします。 <br> 例: ``--mapping`` 
``clearMappingCache`` | 以前の実行で取得したユーザー/グループマッピングをクリアします <br> 例: ``--clearMappingCache`` 
``skipObjectId `` | 順列から ObjectId を削除します。結果から緊急用アカウント(break-glass account)を除外したい場合に便利です。 <br> 例: ``--skipObjectId=bcd27e9b-8974-42ec-a2a1-ba2498b45674,c7a4a639-00e7-47e0-aa9d-ea502bbbd382`` 
``skip `` | 順列カテゴリ全体を削除します。 <br> 例: ``--skip=users`` 
``includeReportOnly `` | reportOnly ポリシーを有効なポリシーと混在させることができます。実行前に、ルートにある policies.json ファイルを削除して既存のポリシーを削除するか、``clearPolicyCache`` オプションを使用してください。 <br> 例: ``--includeReportOnly`` 
``includeLegacyAuth `` | 既定では、レガシ認証条件のみを持つポリシーは評価されません。このフラグを使用すると、分析にレガシ認証を含めることができます。 <br> レガシ認証を含めると、サポートされているワークロード(AAD、SPO、EXO)だけでなく、すべてのアプリに対してレビューされることに注意してください。 <br> 例: ``--includeLegacyAuth`` 
``clearPolicyCache `` | ポリシーキャッシュを削除します <br> 例: ``--clearPolicyCache`` 
``clearTokenCache `` | トークンキャッシュを削除します <br> 例: ``--clearTokenCache`` 
``allTerminations`` | ポリシーで終了した結果も含めます <br> ``--allTerminations``
``debug`` | メモリ使用量と進捗の見積もりを表示します <br> 例: ``--debug``
``altLogin `` | 代替ログインエンドポイントの FQDN を定義できます <br> 例: ``--altLogin=login.microsoft.com.alt``
``altGraph `` | 代替 Graph エンドポイントの FQDN を定義できます <br> 例: ``--altGraph=graph.microsoft.com.alt`` 
``customPolicyFilter `` | ポリシーにカスタムフィルタリングを使用できます(ポリシーが期待されるスキーマに準拠していない場合にのみ推奨されます) <br> 例: ``--customPolicyFilter`` <br> フィルターは [``customPolicyFilter.js``](https://github.com/jsa2/caoptics/blob/main/ca/mainPlugins/customPolicyFilter.js) を選択して変更できます。 
``expand `` | 結果内で展開するグループを定義できます。既定では、グループは最初の 10 項目まで展開されます。展開する項目数は、``--expandCount=30`` オプションと組み合わせて増やすことができます。 <br> 例: ``--expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016`` <br> 注: このオプションを使用するには、マッピングキャッシュをクリアする必要があります ``--clearMappingCache`` 

### launch.json からパラメータを供給するには?(VSCode でのデバッグ)


現在の json スキーマをコピーして、``.vscode/launch.json`` フォルダー内に launch.json という名前のファイルを作成してください。```json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "skipFiles": [
                "<node_internals>/**"
            ],
"program": "${workspaceFolder}/ca/main.js",
//"program": "${file}",
            "args":  [
                "--skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f",
               "--mapping",
              "--clearMappingCache",
               "--clearPolicyCache",
               "--clearTokenCache",
               "--customPolicyFilter",
               "--allowPreviewPolicies=beta",
             //  "--altGraph=graph.microsoft.com",
              // "--allPlatforms",
             //   "--includeReportOnly",
                //"--inject",
            //"--clearPolicyCache",
              // "--skipCleaning",
             // "--allTerminations",
             // "--aggressive",
             "--debug",
            ],
            "runtimeArgs": [
                "--max-old-space-size=4096"
            ]
        }
    ]
  }

ツールの実行

ツールを初めて実行する前に```sh #Navigate to the cloned folder cd caOptics; #Install depedencies npm install

root@kitploit:~
セッションが保存されていない場合、各実行でログインが開始されます。Azure CLI にセッションがあり、別のセッションを使用したい場合は、Azure CLI で ``Az Account Clear`` を実行してください 

1. 静的実行([マッピング](#parameters) なし)
>``node ./ca/main.js `` 
2. 静的実行([マッピング](#parameters) あり)
>``node ./ca/main.js --mapping`` 
3. ``skipObjectId=yourID`` を指定して Break glass グループを除外する
>``node ./ca/main.js --mapping  --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f`` 

また、このツールを試している場合は、``--clearPolicyCache --clearTokencache``  パラメータを含めることをお勧めします。これにより、既存のセッショントークンと policy.json(キャッシュ)が削除されます

>キャッシュからセッションを削除したくないが、ポリシーだけを削除したい場合は、プロジェクトフォルダから policies.json を削除してください

**期待される出力(サンプルデータに基づく)**

ポリシー | 順列 | 終了数 | ルックアップ 
 -|-|-|- 
All (cross-policy)| 33a51ecbcc58466a90b6bea66b239c74|  0| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS -> clientAppTypes:mobileAppsAndDesktopClients -> users:All 
All (cross-policy)| 4194a5e64e054764bd8774d4992887b9|  0| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS -> clientAppTypes:mobileAppsAndDesktopClients 
All (cross-policy)| 24f38821ea8e4331aeae7c078a727236|  1| Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> Platforms:macOS 


## レポートの表示
正常に実行されたすべての実行は、``crosstable.md``(Markdown テーブル)と CSV ``report.csv`` を出力します 
- ツールを実行するたびに、以前のレポートは消去されます

**.csv レポートの例**```
users                 Applications clientAppTypes              Platforms locations terminations  
-----                 ------------ --------------              --------- --------- ----------
GuestsOrExternalUsers All          browser                     macOS     finland   0
user-Joosua Santasalo All          browser                     macOS     finland   0
user-Joosua Santasalo All          mobileAppsAndDesktopClients macOS     finland   0
All                   All          browser                     macOS     finland   0

.json ダンプの例```json [ { "policy": "all", "lineage": "Platforms:macOS -> clientAppTypes:browser -> users:All -> Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> ", "lookup": "Locations:10a25087-9bf6-479b-a2a1-37e814310c90", "terminated": [] }, { "policy": "all", "lineage": "Platforms:macOS -> clientAppTypes:browser -> users:GuestsOrExternalUsers -> Locations:10a25087-9bf6-479b-a2a1-37e814310c90 -> ", "lookup": "Locations:10a25087-9bf6-479b-a2a1-37e814310c90", "terminated": [] } ]

root@kitploit:~
## トラブルシューティング

- セッションログインにAZ CLIを使用している場合は、``az account clear`` から始めてください
- ツールを実行する際は、``--clearPolicyCache --clearTokencache`` を追加してキャッシュ(トークン、ポリシー、場所)をクリアしてください
- 既存の policies.json と namedLocations.json をプロジェクトルートから手動で削除してください(``--clearPolicyCache --clearTokencache`` オプションを使用しない場合)
- グループの include が機能しない場合は、``--mapping`` が選択されていることを確認し、グループの入れ子が2レベルを超えていないことを確認してください

--- 

**Azure Cloud Shell でのテスト**

より大規模な環境でこのソリューションをテストする場合は、パラメータで ``--debug`` を有効にし、可能であれば Node.js のヒープサイズを `` --max-old-space-size=4096 `` に増やしてください。
  - テスト経験から、大規模な環境では順列の数が非常に多くなることがわかっています。デバッグモードで実行すると、問題が発生する箇所を特定するのに役立ちます。そのようなシナリオでは、Cloud Shell の使用は現実的でない可能性があります(順列アルゴリズムはメモリ使用量を大幅に削減しましたが、大規模な環境で Cloud Shell が機能することを確認できていません)。

> 現在の順列生成アルゴリズムは元のものより大幅に削減されているため、Cloud Shell でも動作するはずですが、たとえば競合状態やその他のメモリリークがまだどこかに潜んでおり、大規模な環境で顕在化して、現在のアルゴリズムの利点を損なう可能性があります。

``node --max-old-space-size=4096 ./ca/main.js --mapping  --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --debug`` 


---

- CAポリシーに空の参照がある可能性があり、その場合ルックアップは未終了の状態を示します

  >![](https://assets.kitploit.com/production/public/readmes/47865/7820044fc6c547017bca097b6a0306b341e689241ceea64b245f8a204c3269b4.png)  


# 貢献

リクエストの範囲に応じて、プルリクエストを開くか、イシューを提出してください。
ツールをダウンロード
All0Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:John Doe
ツールBPA ¹ギャップ分析追加要件
Microsoft Azure AD Assessment✅- BPAに関連する場合のみ新しいアプリ登録
Conditional access gap analyzer workbook -² ギャップがサインインイベントに起因する場合のみログは Log Analytics ワークスペースにエクスポートされます
CA Optics-✅³ Azure Cloud Shell へのアクセスと、MS Graph API を介して CA ポリシーを読み取る権限