iam-recommendations-fetcher
google/skills
Récupère les recommandations IAM et les informations de sécurité fournies par Google Cloud pour une organisation, un dossier ou un projet donné, à l'aide des outils MCP, de l'interface de ligne de commande gcloud ou d'appels API directs.
...Développer toutRécupération des recommandations IAM
Cette compétence fournit des instructions pour récupérer des recommandations et des analyses IAM à partir de Google Cloud. Elle couvre la validation de la portée cible d’entrée, la récupération des recommandations à l’aide des outils MCP, des commandes gcloud ou d’appels API directs, ainsi que la gestion des erreurs API courantes.
Procédures
1. Valider la cible d’entrée
Vérifiez la portée cible saisie.
Vérification du format: vérifiez si la cible correspond à l'un des formats suivants :
organizations/{org_id}dossiers/{id_dossier}projets/{project_id}
Gestion des cibles ambiguës/brutes: si l'utilisateur fournit uniquement un identifiant brut (sans préfixe) :
- Alphanumérique (commençant par une lettre): considérer qu’il s’agit d’un identifiant de projet.
Le reformater sous la forme
projects/{project_id}et continuer. - Purement numérique: c'est ambigu (il peut s'agir d'un numéro d'organisation, de dossier ou de
projet).
- Demandez à l’utilisateur de préciser le type de ressource : > « L’ID de cible '{provided_id}' correspond-il à une organisation, un dossier ou un projet ? »
- Une fois que l’utilisateur a précisé, formatez la portée cible en conséquence (par exemple,
ajoutez
organisations/,dossiers/ouprojets/au début) et continuez. - Si la réponse de l’utilisateur n’est pas valide ou s’il ne peut pas préciser, considérez cela comme une erreur et passez à la section « Gestion des erreurs (cible incorrecte) ».
- Alphanumérique (commençant par une lettre): considérer qu’il s’agit d’un identifiant de projet.
Le reformater sous la forme
Gestion des numéros de projet: si la cible est un projet mais utilise un identifiant purement numérique (numéro de projet) au lieu d’un identifiant de projet (par exemple,
projects/123456789) :- les commandes
gcloudrecommender nécessitent un identifiant de projet. Tentez de résoudre le numéro de projet en un identifiant de projet à l’aide de :gcloud projects list --filter="projectNumber={project_number}" --format="value(projectId)" - Si cette conversion renvoie un résultat vide ou échoue en raison d’une erreur d’autorisation, ne tentez pas de décrire le projet, de rechercher dans la base de code ou de rechercher des données factices. Renvoyez immédiatement le JSON d’erreur standardisé spécifié dans la section « Gestion des erreurs » et arrêtez l’exécution (n’appelez plus aucun autre outil).
- les commandes
Validation de l’enregistrement: Indiquez explicitement la portée cible validée et formatée (par exemple,
projects/123456789ouorganizations/123456789012) dans votre raisonnement avant de passer à l’étape de récupération.
2. Récupération des recommandations et des analyses (flux de secours)
Essayez les méthodes de récupération suivantes dans l’ordre. Arrêtez-vous dès la première réussite.
CRITIQUE : échouez rapidement en cas d’erreur (pour éviter les appels API redondants qui échoueront
pour les mêmes raisons d’autorisation/de permission) : si une méthode tentée (option
A ou option B) échoue avec une erreur au niveau de l’API (telle que PERMISSION_DENIED,
UNAUTHENTICATED, ou si la ressource est NOT_FOUND / n’existe pas) ou une erreur de validation CLI
(telle qu’un numéro de projet non autorisé), n’essayez PAS d’autres
options (y compris l’option C ou les appels API/curl directs). Arrêtez immédiatement,
n’appelez plus aucun outil et renvoyez le JSON d’erreur standardisé comme spécifié dans
la section « Gestion des erreurs ».
Option A : outil MCP (recommandé)
Utilisez l’outil MCP s’il est disponible. Les outils MCP sont conçus pour une exécution efficace et sécurisée au sein des environnements internes de Google, offrant souvent une authentification simplifiée et une meilleure intégration par rapport aux commandes CLI à usage général.
Si un outil MCP IAM Recommender est disponible dans votre contexte :
- Appelez l’outil avec le paramètre «
target».
Option B : CLI gcloud (première solution de secours)
Si MCP n’est pas disponible, utilisez run_command pour exécuter ce qui suit (remplacez les
variables en conséquence) :
| Cible | Indicateur |
|---|---|
projects/{project_id} |
--project={project_id} |
folders/{folder_id} |
--dossier={id_dossier} |
organisations/{id_organisation} |
--organisation={id_organisation} |
Commandes à exécuter:
GCLOUD_COMMON_FLAGS="--format=json --location=global \
--filter=stateInfo.state=ACTIVE"
# 1. Récupérer les recommandations
gcloud recommender recommendations list \
--recommender=google.iam.policy.Recommender $GCLOUD_COMMON_FLAGS {mapped_flag}
# 2. Récupérer les analyses
gcloud recommender insights list --insight-type=google.iam.policy.Insight
$GCLOUD_COMMON_FLAGS {mapped_flag}
Option C : API Google Cloud (solution de secours finale)
N’utilisez cette option que si gcloud est physiquement indisponible dans l’
environnement (par exemple, « gcloud : commande introuvable »). Les bibliothèques clientes d’API nécessitent
davantage de configuration et de ressources d’exécution ; elles ne sont donc utilisées qu’en dernier recours si les outils CLI
font défaut. N’utilisez PAS cette option si gcloud est disponible mais a échoué
en raison d’une erreur API.
Utilisez les bibliothèques clientes de l’API Google Cloud Recommender via un script d’aide (ou des appels API directs si les bibliothèques ne sont pas disponibles) pour :
- Appeler
list_recommendations(ourecommendations.list) pourgoogle.iam.policy.Recommender(filtre :stateInfo.state=ACTIVE). - Appeler
list_insights(ouinsights.list) pourgoogle.iam.policy.Insight(filtre :stateInfo.state=ACTIVE).
3. Déterminer le format de sortie et effectuer la livraison
IMPORTANT: ne passez à cette étape que si la récupération de l’étape 2 a réussi. Si la récupération a échoué, ignorez cette étape et passez directement à la section Gestion des erreurs.
Avant de présenter les résultats, déterminez le format de sortie souhaité.
CRITIQUE: si la requête initiale de l’utilisateur spécifie déjà le format de sortie (par exemple, « renvoyer les résultats bruts au format JSON » ou « les afficher dans un tableau »), ne posez pas de question et passez directement à ce format.
Sinon, demandez à l’utilisateur de choisir dans un menu déroulant, parmi les options suivantes :
- Fichier JSON
- Tableau Markdown dans le chat
En fonction du choix (prédéfinis ou sélectionné par l'utilisateur), générez la sortie :
Option A : Fichier JSON
- Enregistrez les résultats bruts dans un fichier nommé
iam_recommendations_(où_ .json est l’identifiant de ressource nettoyé etest au formatAAAAMMJJ_HHMMSS) dans le répertoire de travail actuel. - Le contenu du fichier doit correspondre à la structure indiquée dans l’ exemple d’exécution.
- Renvoyez le chemin d’accès au fichier à l’utilisateur.
Option B : Tableau de discussion
- Trier les recommandations: triez les recommandations récupérées en plaçant les recommandations des agents de service en dernier dans la liste.
- Mise en forme du tableau: présentez les recommandations triées sous la forme d’un tableau au format Markdown.
Le tableau doit contenir les champs clés suivants :
- Sous-type: le sous-type de recommandation ou d’analyse (par exemple, indiquant s’il s’agit de rôles au niveau des ressources).
- Action recommandée: résumé de la recommandation.
- Justification: justification.
- Informations associées: les identifiants de toutes les informations liées (provenant de
associatedInsights).
- Limiter l’affichage dans le chat: afficher uniquement les 10 meilleures recommandations dans le tableau du chat .
- Fournir la liste complète: enregistrer la liste complète des recommandations et des
informations dans un fichier Markdown (par exemple,
iam_recommendations_, où_ .md est l’ identifiant de ressource anonymisé etest au formatAAAAMMJJ_HHMMSS) et fournir un lien permettant à l’utilisateur de le télécharger. - Mise en forme du tableau des informations: si des informations sont disponibles, mettez-les en forme dans un
tableau distinct au sein du fichier Markdown (et affichez éventuellement un résumé dans le chat
si cela est pertinent, mais veillez à ce que le chat reste clair). Le tableau doit contenir les champs clés
suivants :
- ID de l'analyse: l'identifiant de l'analyse (
INSIGHT_ID). - État: l’état de l’analyse (
INSIGHT_STATE). - Sous-type: le sous-type de l’analyse (
INSIGHT_SUBTYPE). - Description: description de l’analyse (
DESCRIPTION).
- ID de l'analyse: l'identifiant de l'analyse (
- NE FOURNISSEZPAS de fichier JSON contenant les résultats bruts si cette option est sélectionnée.
4. Exemple d'exécution
Cible d'entrée: projects/my-test-project
Indicateur mappé: --project=my-test-project
Action (option B): Exécutez la commande `
gcloud recommender recommendations list --recommender=google.iam.policy.Recommender --format=json --location=global --filter=stateInfo.state=ACTIVE --project=my-test-projectStructure de sortie attendue:
{ "raw_results": { "recommendations": [ { "name": "projects/my-test-project/locations/global/recommenders/ \ google.iam.policy.Recommender/recommendations/123", "content": { ... } } ], "insights": [] }, "error": null }
5. Gestion des erreurs
CRITIQUE: si vous rencontrez l’une des conditions d’erreur ci-dessous (lors de la validation ou de la récupération), arrêtez-vous immédiatement. N’essayez pas de déboguer, de changer de compte, d’effectuer une recherche dans le code source ou de vérifier l’existence de la ressource. Renvoyez immédiatement la structure JSON spécifiée comme réponse finale et n’appelez aucun autre outil.
Si toutes les méthodes échouent, renvoyez :
- En cas de cible incorrecte :
{"raw_results": null, "error": "La ressource cible spécifiée est incorrecte ou n'existe pas."} - En cas de problèmes d’authentification :
{"raw_results": null, "error": "L’utilisateur n’est pas authentifié. Veuillez vous authentifier (par exemple, en exécutant 'gcloud auth login')."} - En cas de problèmes d’autorisations :
{"raw_results": null, "error": "Autorisations insuffisantes. Assurez-vous de disposer du rôle 'roles/recommender.iamViewer' dans la portée cible."} - Autres :
{"raw_results" : null, "error" : "Échec de la récupération : {error_details}"}(Ne mentionnez pas les échecs de l’outil MCP à l’utilisateur).
Points à surveiller
- Filtre d’état: assurez-vous toujours de filtrer les recommandations
ACTIVES. - Emplacement: l’emplacement d’IAM Recommender est toujours global.
---
name: iam-recommendations-fetcher
description: Fetches IAM recommendations and security insights from Google Cloud for a specified organization, folder, or project, using MCP tools, gcloud CLI, or direct API calls.
---
# IAM Recommendations Retrieval
This skill provides instructions for fetching IAM recommendations and insights
from Google Cloud. It covers validating the input target scope, retrieving
recommendations using MCP tools, gcloud commands, or direct API calls, and
handling common API errors.
## Procedures
### 1. Validate Input Target
Verify the input target scope.
1. **Check Format**: Check if the target matches one of these formats:
* `organizations/{org_id}`
* `folders/{folder_id}`
* `projects/{project_id}`
2. **Handle Ambiguous/Raw Target**: If the user provides only a raw ID (without
the prefix):
* **Alphanumeric (starts with a letter)**: Assume it is a Project ID.
Format it as `projects/{project_id}` and proceed.
* **Purely Numeric**: It is ambiguous (could be Organization, Folder, or
Project Number).
* Ask the user to clarify the resource type: > "Is the target ID
'{provided_id}' an Organization, a Folder, or a Project?"
* Once the user specifies, format the target scope accordingly (e.g.,
prepend `organizations/`, `folders/`, or `projects/`) and proceed.
* If the user's response is invalid or they cannot clarify, treat it
as an error and proceed to [Handle Errors](#5-handle-errors)
(incorrect target).
3. **Handle Project Numbers**: If the target is a project but uses a purely
numeric ID (Project Number) instead of a Project ID (e.g.,
`projects/123456789`):
* `gcloud` recommender commands require a Project ID. Attempt to resolve
the Project Number to a Project ID using: `gcloud projects list
--filter="projectNumber={project_number}" --format="value(projectId)"`
* If this resolution returns empty or fails with a permission error, do
not attempt to describe the project, search the codebase, or search for
mock data. Immediately return the standardized error JSON specified in
[Handle Errors](#5-handle-errors) and stop execution (do not call any
more tools).
4. **Record Validation**: Explicitly state the validated and formatted target
scope (e.g., `projects/123456789` or `organizations/123456789012`) in your
thought/reasoning before proceeding to the fetch step.
### 2. Fetch Recommendations and Insights (Fallback Flow)
Attempt the following retrieval methods in order. Stop at the first success.
**CRITICAL: Fail Fast on Errors** (To avoid redundant API calls that will fail
for the same authorization/permission reasons): If any attempted method (Option
A or Option B) fails with an API-level error (such as `PERMISSION_DENIED`,
`UNAUTHENTICATED`, or resource `NOT_FOUND` / does not exist) or a CLI validation
error (such as project number not allowed), **do NOT attempt any further
options** (including Option C or direct API/curl calls). Stop immediately, do
not call any more tools, and return the standardized error JSON as specified in
the "Handle Errors" section.
#### Option A: MCP Tool (Preferred)
Use the MCP tool if available. MCP tools are designed for efficient, secure
execution within Google's internal environments, often providing streamlined
authentication and better integration compared to general-purpose CLI commands.
If an IAM Recommender MCP tool is available in your context:
* Call the tool with the `target` parameter.
#### Option B: gcloud CLI (First Fallback)
If MCP is unavailable, use `run_command` to execute the following (replace
variables accordingly):
Target | Flag
:-------------------------------- | :---------------------------------
`projects/{project_id}` | `--project={project_id}`
`folders/{folder_id}` | `--folder={folder_id}`
`organizations/{organization_id}` | `--organization={organization_id}`
**Commands to run**:
```bash
GCLOUD_COMMON_FLAGS="--format=json --location=global \
--filter=stateInfo.state=ACTIVE"
# 1. Fetch Recommendations
gcloud recommender recommendations list \
--recommender=google.iam.policy.Recommender $GCLOUD_COMMON_FLAGS {mapped_flag}
# 2. Fetch Insights
gcloud recommender insights list --insight-type=google.iam.policy.Insight
$GCLOUD_COMMON_FLAGS {mapped_flag}
```
#### Option C: Google Cloud API (Final Fallback)
Only attempt this option if `gcloud` is physically unavailable in the
environment (e.g., `gcloud: command not found`). API client libraries require
more setup and execution overhead, so they are only used as a last resort if CLI
tools are missing. Do NOT use this option if `gcloud` is available but failed
with an API error.
Use Google Cloud Recommender API client libraries via a helper script (or direct
API calls if libraries are unavailable) to:
1. Call `list_recommendations` (or `recommendations.list`) for
`google.iam.policy.Recommender` (filter: `stateInfo.state=ACTIVE`).
2. Call `list_insights` (or `insights.list`) for `google.iam.policy.Insight`
(filter: `stateInfo.state=ACTIVE`).
### 3. Determine Output Format and Deliver
**CRITICAL**: Only proceed to this step if the retrieval in Step 2 was
successful. If the retrieval failed, skip this step and go directly to
[Handle Errors](#5-handle-errors).
Before presenting the results, determine the desired output format.
**CRITICAL**: If the user's initial prompt already specifies the output format
(e.g., "return the raw results in JSON" or "show it in a table"), bypass asking
and proceed directly to that format.
Otherwise, ask the user in a dropdown menu, with the options being:
1. JSON file
2. Markdown table in chat
Based on the choice (either pre-specified or chosen by the user), deliver the
output:
#### Option A: JSON File
1. Write the raw results to a file named
`iam_recommendations_<target_id>_<timestamp>.json` (where `<target_id>` is
the sanitized resource identifier and `<timestamp>` is formatted as
`YYYYMMDD_HHMMSS`) in the current working directory.
2. The file content must match the structure shown in
[Example Execution](#4-example-execution).
3. Respond to the user with the file path.
#### Option B: Chat Table
1. **Sort Recommendations**: Sort the retrieved recommendations, placing
service agent recommendations last in the list.
2. **Format Table**: Format the sorted recommendations into a markdown table.
The table should contain key fields:
- **Subtype**: The recommender subtype or insight subtype (e.g.,
indicating if it's for resource-level roles).
- **Recommended Action**: Summary of the recommendation.
- **Rationale**: Rationale/justification.
- **Associated Insights**: The IDs of any linked insights (from
`associatedInsights`).
3. **Limit Chat Display**: Display only the top 10 recommendations in the chat
table.
4. **Provide Full List**: Save the complete list of recommendations and
insights to a markdown file (e.g.,
`iam_recommendations_<target_id>_<timestamp>.md`, where `<target_id>` is the
sanitized resource identifier and `<timestamp>` is formatted as
`YYYYMMDD_HHMMSS`) and provide a link for the user to download it.
5. **Format Insights Table**: If insights are present, format them in a
separate table in the markdown file (and optionally show a summary in chat
if appropriate, but keep the chat clean). The table should contain key
fields:
- **Insight ID**: The insight identifier (`INSIGHT_ID`).
- **State**: The insight state (`INSIGHT_STATE`).
- **Subtype**: The insight subtype (`INSIGHT_SUBTYPE`).
- **Description**: Description of the insight (`DESCRIPTION`).
6. **DO NOT** provide a JSON file with the raw results if this option is
chosen.
### 4. Example Execution
* **Input Target**: projects/my-test-project
* **Mapped Flag**: --project=my-test-project
* **Action (Option B)**: Run `gcloud recommender recommendations list
--recommender=google.iam.policy.Recommender --format=json --location=global
--filter=stateInfo.state=ACTIVE --project=my-test-project`
* **Expected Output Structure**:
```json
{
"raw_results": {
"recommendations": [
{
"name": "projects/my-test-project/locations/global/recommenders/ \
google.iam.policy.Recommender/recommendations/123",
"content": { ... }
}
],
"insights": []
},
"error": null
}
```
### 5. Handle Errors
**CRITICAL**: If you encounter any of the error conditions below (during
validation or fetch), **stop immediately**. Do not attempt to debug, switch
accounts, search the codebase, or verify resource existence. Immediately output
the specified JSON structure as your final response and call no further tools.
If all methods fail, return:
* For incorrect target: `{"raw_results": null, "error": "The specified target
resource is incorrect or does not exist."}`
* For authentication issues: `{"raw_results": null, "error": "User is
unauthenticated. Please authenticate (e.g., run 'gcloud auth login')."}`
* For permissions: `{"raw_results": null, "error": "Insufficient permissions.
Please ensure you have 'roles/recommender.iamViewer' on the target scope."}`
* Other: `{"raw_results": null, "error": "Failed to fetch: {error_details}"}`
(Do not mention MCP tool failures to the user).
## Gotchas
* **State Filter**: Always ensure you are filtering for `ACTIVE`
recommendations.
* **Location**: The location for IAM Recommender is always global.
Tous les fichiers
0 fichiersInstaller iam-recommendations-fetcher
Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.
Télécharger le ZIPClonez le dépôt et copiez les fichiers de compétence dans votre projet.
git clone https://github.com/google/skills/tree/main/skills/cloud/iam-recommendations-fetcher # Copy SKILL.md to your .claude/skills/ directory
Copier





Maison
