
CA Optics - Analyseur d'écarts de l'accès conditionnel Azure AD
Projet archivé en raison de l'évolution des priorités de développement et du recentrage de mes efforts communautaires vers d'autres domaines (PoC, autres outils et démos/présentations), le projet est passé en lecture seule.
L'Analyseur d'écarts d'accès conditionnel Azure AD est une solution pour détecter les écarts qui peuvent exister au sein de configurations complexes de politiques d'accès conditionnel Azure Active Directory.
Si vous débutez avec l'accès conditionnel, nous vous recommandons de consulter l'article Microsoft suivant : https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview
Commande unique pour exécuter cet outil : (si c'est la seule partie que vous prévoyez de lire et que vous avez terminé l'installation)
node ./ca/main.js --mapping --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --clearTokenCache --clearMappingCache
Après avoir satisfait aux prérequis et lu ce fichier README, tenez compte des points suivants :
les politiques reportOnly ne sont pas considérées comme terminales :
Lisez : scope
exécutez chaque analyse avec --clearPolicyCache
exécutez chaque analyse avec --clearMappingCache si vous apportez des modifications aux groupes / utilisateurs liés aux politiques
seules les politiques ciblant les utilisateurs et les applications sont dans le périmètre (c'est le périmètre le plus courant, mais cela signifie par exemple que la politique d'enregistrement de sécurité n'est pas évaluée)
Lisez : scope
Commencez par un environnement de test pour acquérir de l'expérience et définir des attentes concernant le fonctionnement de l'outil
si vous savez que des groupes ou des utilisateurs sont exclus des politiques, définissez avec --skipObjectIds les objets à exclure de l'analyse, sauf si vous cherchez à confirmer les exclusions
Si vous exécutez des analyses dans plusieurs environnements, assurez-vous que les connexions et les caches sont supprimés avant de lancer de nouvelles analyses
Lisez : paramètres
az account clear puis effectuez une nouvelle connexion à l'environnement que vous prévoyez d'analyser avec az loginLisez autres notes importantes
Notes de version : 0.7.1
- Dépendances mises à jour et sorties texte des rapports actualisées
Notes de version : 0.7
- Utilise désormais le point de terminaison bêta par défaut ; l'option --expand étend désormais les résultats du rapport, indépendamment de l'utilisation de --allTerminations
Notes de version : 0.6.9
- Utilisation de --expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016 et extension de 10 membres de groupe pour une inspection séparée.
Notes de version : 0.6.8
- Lorsque vous mettez à jour une politique avec des conditions d'invité dans l'interface graphique, cette politique ne sera disponible qu'à partir du point de terminaison bêta après la mise à jour (pendant l'aperçu).
- Cette mise à jour apporte une normalisation pour les politiques transférées vers le point de terminaison bêta en raison de ce comportement.
- La politique sera évaluée comme les conditions d'invité précédentes, tant que les conditions suivantes sont incluses "internalGuest,b2bCollaborationGuest,b2bCollaborationMember" et qu'aucun locataire n'est exclu de la politique. Pour évaluer les politiques transférées,
- utilisez '--allowPreviewPolicies' lors de l'exécution de CaOptics pour tenir compte de ce comportement
Notes de version : 0.6.6-7 bêta
- Permet d'utiliser différents points de terminaison de connexion pour la connexion et le graphe avec les paramètres : --altLogin --altGraph
- Permet d'utiliser un filtrage personnalisé pour les politiques (recommandé uniquement lorsque les politiques ne correspondent pas au schéma attendu)
Notes de version : 0.6.5 bêta
- Ajout d'un compteur au rapport lorsqu'un grand nombre de permutations est également ajouté au rapport (par défaut, seules les permutations non terminées sont ajoutées)
- Corrections mineures de code remplaçant <var> par <let>
- Le nom du fichier de rapport inclut désormais le jour, le mois, l'année et l'ID de locataire, par ex. report_day_4_month_9_year_2022-tenant_48f55450-183a-45d6-a9ce-68f3cbc68947.csv
Notes de version : 0.6.4 bêta
- Récupère plus de groupes par appel unique (moins de regroupements par lots)
- Correction d'une condition de concurrence détectée lors de l'utilisation générale des boucles for await
- Encadre les valeurs avec "" entre les délimiteurs (CSV)
Notes de version : 0.6.3 bêta
- Optimisations de la gestion des objets mappés.
- Les objets mappés sont mis en cache. Vous pouvez recréer le mappage d'objets à l'aide du paramètre 'clearMappingCache'
- Les clés de recherche commencent toujours par les conditions 'user/group/role' en premier
- Ajout de la possibilité de remplir l'usermap avec des UUID aléatoires pour tester l'impact sur les performances (il s'agit uniquement d'une option de débogage, et pas vraiment quelque chose qui serait dans les versions non bêta)
Notes de version : 0.6.2 bêta
- Séparation des paramètres de cache en fonctions distinctes -> (clearTokenCache et ClearPolicyCache)
- Ajout de la possibilité d'exécuter un algorithme pré-optimisé sur les permutations avec le paramètre --aggressive (consommation mémoire élevée, présent uniquement ici pour les tests A/B)
- fusion terminée.
Notes de version : 0.6.1 bêta
- Ajout d'une version de base du rapport CSV
- Génération de permutations simplifiée pour garantir que les permutations essentielles sont générées, et certaines permutations sont terminées plus tôt lors des recherches
Notes de version : 0.6 bêta (première version non « silencieuse »)
- Ajout des noms d'affichage des applications au rapport MD. Type d'objet ajouté au type d'utilisateur
Notes de version : 0.5.2,0.5.1,0.5 bêta (voir les branches précédentes pour les notes de version)

Exemple de détection inter-politiques
❌ Toute permutation avec la valeur 0 signifie qu'aucune politique n'a été terminée pour cette combinaison particulière de conditions.
| Policy | Terminations | lookup |
|---|---|---|
| All | 0 | Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:GuestsOrExternalUsers |
| All | 0 | Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:Jane Doe |
| All | 0 | Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:John Doe |
✅ Lisez la description détaillée de la détection dans docs/example.md
Les permutations sont générées par getPol2.js
(Visualisation par https://jsoncrack.com/)
Environnement d'exécution
Si vous préférez ne pas utiliser la version « fire & forget »```bash nvm use 16 git clone https://github.com/jsa2/caOptics; cd caOptics; npm install;
**Configuration d'exécution « fire and forget » pour 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
I notice the translation request arrived without any actual content in the INPUT section. Please provide the text you'd like translated so I can proceed with translating it into French.```bash cd caOptics
az login
**Lié à Azure AD**
- Rôle Azure AD Security Reader activé
- Si vous avez Azure CLI et une session CLI existante, cet outil utilisera cette [session](https://github.com/jsa2/caoptics/blob/main/tokenHandler/getCode.js).
- Si vous n'avez pas Azure CLI installé, le clientID Azure CLI est simplement utilisé pour obtenir des jetons avec le flux device_code initié par le client http Node.js
>
**Les paquets open source suivants sont utilisés**
Pour réduire la quantité de code, nous utilisons les dépendances suivantes pour l'opération et l'esthétique (Merci aux mainteneurs de ces formidables paquets. Le lien de licence de chaque paquet est fourni dans la colonne licence)
paquet | esthétique|opération|licence
-|-|-|-
[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)
**Quel accès réseau est nécessaire pour que cela fonctionne ?**
1. Les hôtes suivants sont nécessaires pour le fonctionnement ```sh
graph.microsoft.com
login.microsoftonline.com
Si vous prévoyez d'exécuter cet outil dans un environnement au réseau restreint, téléchargez d'abord les dépendances dans un environnement qui autorise l'accès aux installations de paquets et à github.com. Vous pouvez ensuite transférer l'intégralité du répertoire d'installation compressé vers l'environnement au réseau restreint
Voici une trace typique que j'effectue lorsque j'exécute des paquets tiers sur mes applications Node.js. Elle montre les URL appelées au moment de l'exécution

Lisez la Licence
⚠️ Aucun assainissement des entrées n'est effectué sur les paramètres de lancement, car il est toujours supposé que l'entrée de ces paramètres est contrôlée, et que cet outil ne s'exécute pas dans un environnement non contrôlé (ou sans surveillance). Bien que je n'aie pas examiné tous les chemins, je pense qu'atteindre l'exécution de shellcode est trivial. Cet outil ne suppose pas d'entrée hostile, c'est pourquoi il est recommandé de ne pas coller les arguments de lancement dans la ligne de commande sans les avoir examinés au préalable.
Nous recommandons que cet outil soit toujours exécuté uniquement avec des autorisations en lecture seule (si vous avez AZ CLI installé, supprimez le cache AZ CLI avant de continuer az account clear)
L'authentification héritée n'est pas évaluée lorsque la politique évaluée inclut uniquement des conditions d'authentification héritée - Contexte : Microsoft est en train d'abandonner l'authentification de base pour Exchange, une grande partie de l'évaluation de l'authentification héritée deviendra donc bientôt (fin 2022) sans objet.
Vous pouvez toujours opter pour le paramètre
--includeLegacyAuthafin d'inclure uniquement les politiques d'authentification héritée dans le mélange. Gardez à l'esprit que cela supposera alors que l'authentification héritée est couverte pour toutes les applications (et l'évaluera donc aussi pour les applications ne prenant pas en charge l'authentification héritée), et pas seulement EXO
L'outil stocke localement le jeton d'actualisation AZ CLI pour conserver la persistance de session - Les jetons sont mis en cache localement en texte brut (tout comme ils sont mis en cache avec Azure CLI dans BASH, que vous utilisiez ou non cet outil). Bien que le cache de jetons puisse être chiffré, cela n'offre aucun avantage pour le PoC pour le moment. Chiffrer le cache de jetons n'aiderait pas beaucoup non plus, car de nombreux autres outils/applications exécutés sur le système stockent probablement des jetons d'actualisation opaques dans leur format en texte brut.
Concernant les rapports et les permutations : je cherche toujours le meilleur équilibre entre lisibilité et verbosité. Je crois que toutes les lacunes du périmètre sont identifiées, mais j'ai apporté de nombreux changements à l'algorithme de ces détections, et il pourrait donc encore y avoir quelques cas limites que je n'ai pas pris en compte.
Cet outil résout le problème de la détection des lacunes dans les politiques d'accès conditionnel, même lorsque la lacune n'apparaît pas dans les journaux de connexion.
En quoi cet outil se distingue-t-il des outils existants ?
| Outil | BPA ¹ | Analyse des lacunes | Exigences supplémentaires |
|---|---|---|---|
Microsoft Azure AD Assessment | ✅ | - Uniquement en relation avec le BPA | nouvel enregistrement d'application |
Conditional access gap analyzer workbook | - | ² Uniquement lorsque la lacune peut être attribuée à un événement de connexion | les journaux sont exportés vers l'espace de travail Log Analytics |
CA Optics | - | ✅ | ³ Accès à Azure Cloud Shell et autorisations de lire les politiques d'AC via l'API MS Graph |
Informations supplémentaires
¹ Analyseur de bonnes pratiques
² La lacune ne peut pas être identifiée si les conditions qui l'exposent n'ont jamais été enregistrées dans le journal de connexion
³ Cloud Shell n'est pas une exigence stricte, mais une bonne alternative pour les utilisateurs de cet outil qui n'auraient pas Node.js installé
À la version 0.5, les conditions couvertes sont les suivantes :
✅Users / Roles /Groups
✅Cloud apps (seules les politiques qui définissent toutes les applications, ou des applications individuelles, sont dans le périmètre)
✅Device platforms (par ex. user-agents)
✅Locations
✅Client Apps (par ex. applications navigateur / bureau et mobiles) ¹
✅Access Controls (Grant / Block) (Seules les politiques qui ont les contrôles d'accès activés sont dans le périmètre ²)
(Tout ce qui ne figure pas sur la liste n'est pas évalué. Par exemple, les politiques basées sur le risque ne sont pas considérées comme couvrant les lacunes, car la détection des risques n'est pas considérée comme parfaite ; elles devraient être utilisées plutôt dans les situations où vous souhaitez bloquer quelque chose, plutôt que d'exiger une MFA uniquement en cas de risque associé)
¹ Étant donné que Microsoft abandonne l'authentification héritée (Legacy Auth), l'authentification héritée n'est pas examinée ² L'application de la politique doit être activée (les politiques en mode rapport seul ne sont pas évaluées par défaut, mais peuvent être incluses avec un certain indicateur)
Il est important de comprendre que l'outil reflète les opinions de ses créateurs en matière de conception de politiques :
Il existe deux écoles de conception d'accès conditionnel
Approche par inclusion : n'appliquer l'AC qu'aux conditions qui correspondent aux schémas d'utilisation prévus par l'organisation.
Approche par exclusion : appliquer l'AC dans toutes les conditions, puis créer des exclusions étroites pour gérer ces exceptions.
⚠ Cet outil ne fonctionne que pour la seconde école de conception d'AC. Le fondement de cette conception est que l'attaquant considère tous les modèles d'accès comme valides, y compris ceux que l'organisation pourrait ne pas considérer comme valides pour son propre usage. Si vos schémas d'utilisation ne correspondent pas à l'approche adoptée par cet outil, nous vous recommandons d'envisager plutôt l'utilisation des outils existants
Cette école de pensée est similaire à la bonne pratique de Microsoft 'Appliquer des politiques d'accès conditionnel à chaque application' avec la distinction suivante : outre toutes les applications, toutes les autres conditions configurées devraient être couvertes par une politique, ou une exclusion d'un certain type ¹
Assurez-vous que chaque application dispose d'au moins une politique d'accès conditionnel appliquée. D'un point de vue sécuritaire, il est préférable de créer une politique qui englobe toutes les applications cloud, puis d'exclure les applications auxquelles vous ne souhaitez pas que la politique s'applique. Cela garantit que vous n'avez pas besoin de mettre à jour les politiques d'accès conditionnel à chaque fois que vous intégrez une nouvelle application.
¹ Cet outil considère qu'une lacune est couverte également lorsqu'une exclusion de localisation approuvée ou d'appareil approuvé est utilisée, et que la politique n'est donc pas appliquée en raison de l'utilisation d'un appareil ou d'une localisation approuvés. Il convient de mentionner qu'il existe des bonnes pratiques d'utilisation administrative qui devraient exiger que la localisation approuvée ou l'appareil approuvé soit combiné(e) avec une MFA.
La conception actuelle exige que toutes les conditions correspondent à la politique « toutes les plateformes ». Cela repose sur le scénario où tous les clients sont sélectionnés explicitement, et ainsi aucun client « inconnu » n'est sélectionné dans cette politique particulière
Exemple d'une telle condition```json "platforms": { "includePlatforms": ["all"], "excludePlatforms": ["macOS"] },
**Référence** https://learn.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-conditions#device-platforms
> **Important** <br> *Microsoft recommande de disposer d’une stratégie d’accès conditionnel pour les plateformes d’appareils non prises en charge. Par exemple, si vous souhaitez bloquer l’accès à vos ressources d’entreprise depuis Chrome OS ou tout autre client non pris en charge, vous devez configurer une stratégie avec une condition de plateformes d’appareils qui inclut tout appareil et exclut les plateformes d’appareils prises en charge, et un contrôle d’octroi défini sur Bloquer l’accès.*
---
#### Différences de recherche
1. Recherche par rôle
> Lorsque les rôles sont utilisés comme conditions, la recherche des exclusions/inclusions est dictée uniquement par le rôle. Cela peut aboutir à une situation où la stratégie se termine correctement sur un rôle, mais où l’utilisateur appartenant à ce rôle peut encore être exclu de la stratégie dans les résultats. Dans les résultats, les deux conditions sont mises en évidence (non fusionnées). Il s’agit purement d’une décision de conception, car nous voulons afficher les terminaisons de rôle séparément, sans contexte utilisateur ou groupe.
---
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. Recherche par groupe
> À l’inverse, si des groupes sont utilisés, la terminaison de la stratégie est fusionnée, et l’exclusion de l’utilisateur serait alors affichée comme terminée par l’inclusion du groupe.
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. Recherche des invités
>Les utilisateurs ne sont pas mappés en tant qu’invités dans cette version. Cette fonctionnalité sera introduite plus tard, permettant de détecter les inclusions/exclusions des userId d’invités pour les mapper correctement à la propriété ``GuestsOrExternalUsers``.
Actuellement, les utilisateurs invités sont mappés comme des utilisateurs normaux.
>
#### Imbrication de groupes
>En raison de considérations de performances, la profondeur d’imbrication pour la résolution des appartenances aux groupes n’est résolue qu’une seule fois si le groupe est un groupe d’un autre groupe. Sinon, il existe un risque de résoudre les appartenances indéfiniment, car un sous-groupe pourrait inclure l’un des groupes racines, ce qui entraînerait une boucle sans fin.
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
> Si vous osez... vous pouvez augmenter l’imbrication directement dans le code... [group.js](https://github.com/jsa2/caoptics/blob/main/ca/mainPlugins/userMappers/group.js)

## Paramètres
Param| Description
-|-
``mapping`` | Par défaut, les exclusions basées sur l’utilisateur et le groupe sont évaluées par l’ID exact des objets. Par exemple, si un objet est exclu par une stratégie, l’objet doit être trouvé dans une autre stratégie par son ID exact. <br> L’utilisation de ``--mapping`` appelle MS Graph pour renseigner les relations entre les objets de manière à garantir, par exemple, qu’un utilisateur peut être exclu par userId dans une stratégie, tandis que l’évaluation détecte que l’utilisateur est inclus dans une autre stratégie par un groupId. <br> p. ex. ``--mapping``
``clearMappingCache`` | Efface les mappages utilisateur/groupe récupérés lors d’une exécution précédente <br> p. ex ``--clearMappingCache``
``skipObjectId `` | Supprime l’ObjectId des permutations. Cela peut être utile si vous souhaitez exclure le compte break-glass des résultats <br> p. ex. ``--skipObjectId=bcd27e9b-8974-42ec-a2a1-ba2498b45674,c7a4a639-00e7-47e0-aa9d-ea502bbbd382``
``skip `` | Supprime la catégorie complète de permutations. <br> p. ex. ``--skip=users``
``includeReportOnly `` | Permet de mélanger les stratégies reportOnly avec les stratégies activées. Supprimez les stratégies existantes avant d’exécuter cette option en supprimant le fichier policies.json à la racine, ou utilisez l’option ``clearPolicyCache`` <br> p. ex. ``--includeReportOnly``
``includeLegacyAuth `` | Par défaut, les stratégies qui ont uniquement des conditions d’authentification héritée ne sont pas évaluées. Utilisez cet indicateur si vous souhaitez inclure l’authentification héritée dans l’analyse <br> veuillez noter que l’inclusion de l’authentification héritée l’examinera par rapport à toutes les applications, pas uniquement aux charges de travail prises en charge (AAD, SPO, EXO) <br> p. ex. ``--includeLegacyAuth``
``clearPolicyCache `` | Supprime les caches de stratégies <br> p. ex. ``--clearPolicyCache``
``clearTokenCache `` | Supprime les caches de jetons <br> p. ex. ``--clearTokenCache``
``allTerminations`` | Inclut également les résultats qui se sont terminés sur une stratégie <br> ``--allTerminations``
``debug`` | Affiche l’utilisation de la mémoire et l’estimation de la progression <br> p. ex. ``--debug``
``altLogin `` | Permet de définir un point de terminaison de connexion alternatif (FQDN) <br> p. ex. ``--altLogin=login.microsoft.com.alt``
``altGraph `` | Permet de définir un point de terminaison graphique alternatif (FQDN) <br> p. ex. ``--altGraph=graph.microsoft.com.alt``
``customPolicyFilter `` | Permet d’utiliser un filtrage personnalisé pour les stratégies (ceci n’est recommandé que lorsque les stratégies ne respectent pas le schéma attendu) <br> p. ex. ``--customPolicyFilter`` <br> Vous pouvez modifier le filtre en sélectionnant [``customPolicyFilter.js``](https://github.com/jsa2/caoptics/blob/main/ca/mainPlugins/customPolicyFilter.js)
``expand `` | Permet de définir un groupe à développer dans les résultats. Par défaut, le groupe est développé pour les 10 premiers éléments. Le nombre d’éléments développés peut être augmenté en utilisant conjointement l’option ``--expandCount=30``<br> p. ex. ``--expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016`` <br> Remarque : L’utilisation de cette option nécessite que le cache de mappage soit effacé ``--clearMappingCache``
### Fournir des paramètres depuis launch.json (débogage dans VSCode) ?
copiez le schéma json actuel et créez un fichier nommé launch.json dans le dossier ``.vscode/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"
]
}
]
}
Avant d'exécuter l'outil pour la première fois```sh #Navigate to the cloned folder cd caOptics; #Install depedencies npm install
Chaque exécution initiera une connexion si aucune session n'est stockée. Si vous avez une session sur Azure CLI et que vous souhaitez utiliser une autre session, exécutez ``Az Account Clear``
1. Exécution statique (sans [mapping](#parameters) )
>``node ./ca/main.js ``
2. Exécution statique (avec [mapping](#parameters) )
>``node ./ca/main.js --mapping``
3. Fournir ``skipObjectId=yourID`` pour exclure le groupe Break glass
>``node ./ca/main.js --mapping --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f``
De plus, si vous expérimentez avec l'outil, il est recommandé d'inclure ``--clearPolicyCache --clearTokencache`` en paramètre. Cela supprimera les jetons de session existants, ainsi que le policy.json (cache)
>supprimez policies.json du dossier du projet, si vous ne voulez pas supprimer la session du cache, mais souhaitez simplement que les politiques soient supprimées
**Résultat attendu (sur la base des données d'exemple)**
Stratégie | Permutation | Terminaisons | recherche
-|-|-|-
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
## Affichage des rapports
Toutes les exécutions réussies génèrent ``crosstable.md`` (un tableau markdown) et le CSV ``report.csv``
- Chaque nouvelle exécution de l'outil effacera le rapport précédent
**Exemple de rapport .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
Exemple de dump .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": [] } ]
## Dépannage
- Si vous utilisez AZ CLI pour la connexion de session, commencez par ``az account clear``
- Lors de l'exécution de l'outil, ajoutez ``--clearPolicyCache --clearTokencache`` pour vider les caches (jetons, stratégies et emplacements)
- supprimez manuellement les fichiers policies.json et namedLocations.json existants à la racine du projet (si vous n'utilisez pas l'option ``--clearPolicyCache --clearTokencache`` )
- Si les inclusions de groupe ne semblent pas fonctionner, assurez-vous que ``--mapping`` est sélectionné et que vous n'avez pas d'imbrication au-delà de deux groupes
---
**Tests dans Azure Cloud Shell**
Si vous testez cette solution dans un environnement plus vaste. Activez ``--debug`` dans les paramètres et, si possible, augmentez la taille du tas de Node.js `` --max-old-space-size=4096 ``
- L'expérience des tests a montré que le nombre de permutations peut atteindre des valeurs très élevées avec de grands environnements. L'exécution en mode débogage peut aider à identifier où le problème peut survenir. Dans de tels scénarios, l'utilisation de Cloud Shell peut ne pas être viable (bien que l'algorithme de permutation ait désormais considérablement réduit l'utilisation de la mémoire, je n'ai pas pu confirmer que Cloud Shell fonctionnerait dans de grands environnements)
> Étant donné que l'algorithme actuel de génération de permutations est fortement réduit par rapport à l'original, même Cloud Shell devrait fonctionner, mais par exemple des conditions de course ou d'autres fuites de mémoire peuvent encore se cacher quelque part et se manifester dans des environnements plus grands, atténuant les avantages de l'algorithme actuel.
``node --max-old-space-size=4096 ./ca/main.js --mapping --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --debug``
---
- Vous pouvez avoir des références vides dans les stratégies CA et la recherche affichera ainsi une condition non terminée
>
# Contribution
Ouvrez une pull request, ou soumettez un problème selon la portée de la demande.