Utiliser les insights d'éléments

Cette rubrique vous explique comment utiliser les insights d'éléments pour détecter les risques potentiels dans vos configurations d'éléments et améliorer votre stratégie de sécurité.

Présentation

Cloud Asset Insights fournit des insights basés sur les stratégies IAM associées aux ressources de votre organisation. Il fait partie du service Recommender et est fourni en tant que type d'insight google.cloudasset.asset.Insight. Les insights sont des anomalies spécifiques qui nécessitent une analyse plus approfondie pour déterminer l'action appropriée. Ils sont générés quotidiennement, à partir d'un instantané des données stockées dans l'inventaire des éléments cloud.

Avant de commencer

Avant de commencer à utiliser les insights d'éléments, vous devez suivre la procédure ci-dessous.

  1. Activez l'API Recommender.

  2. Assurez-vous que votre compte dispose des autorisations suivantes.

    • recommender.cloudAssetInsights.get

    • recommender.cloudAssetInsights.list

    • recommender.cloudAssetInsights.update

    Vous pouvez accorder ces autorisations individuellement ou attribuer l'un des rôles suivants.

    • Lecteur d'insights d'éléments cloud (roles/recommender.cloudAssetInsightsViewer)

    • Administrateur d'insights d'éléments cloud (roles/recommender.cloudAssetInsightsAdmin)

Demander des insights sur les éléments

Pour demander des insights sur les éléments, le moyen le plus simple est de répertorier les insights comme indiqué dans les étapes suivantes. Pour les autres types d'interactions, consultez le guide sur les insights de l'API Recommender.

Demander des insights sur un projet

Pour demander des insights pour un projet, effectuez l'une des requêtes suivantes.

gcloud

Exécutez les commandes gcloud CLI suivantes pour obtenir la liste des insights concernant votre projet, votre dossier ou votre organisation.

Projets

gcloud recommender insights list \
    --project=PROJECT_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

Indiquez les valeurs suivantes :

  • PROJECT_ID: ID du projet pour lequel vous souhaitez obtenir des insights.

Autres indicateurs:

  • --filter : facultatif. Filtre les résultats par sous-type d'insight.

  • --format : facultatif. Format de sortie compatible avec gcloud CLI. Par exemple, pour répertorier le contenu des insights sous la forme d'une table aplatie:

    gcloud recommender insights list \
        --project=PROJECT_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

Dossiers

gcloud recommender insights list \
    --folder=FOLDER_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

Indiquez les valeurs suivantes :

  • FOLDER_ID: ID du dossier pour lequel vous souhaitez obtenir des insights.

    Trouver un ID de dossier Google Cloud

    Console

    Pour trouver un ID de dossier Google Cloud, procédez comme suit:

    1. Accédez à Google Cloud Console.

      Accéder à la console Google Cloud

    2. Cliquez sur le sélecteur dans la barre de menu.
    3. Cliquez sur le champ Sélectionner à partir de, puis sélectionnez votre organisation.
    4. Recherchez le nom de votre dossier. L'ID du dossier figure à côté du nom du dossier.

    gcloud CLI

    Vous pouvez récupérer un ID de dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

    gcloud resource-manager folders list \
        --organization=$(gcloud organizations describe ORGANIZATION_NAME \
          --format="value(name.segment(1))") \
        --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
        --format="value(ID)"

    TOP_LEVEL_FOLDER_NAME peut être une correspondance de chaîne complète ou partielle. Supprimez l'option --format pour afficher plus d'informations sur les dossiers trouvés.

    Pour obtenir l'ID d'un dossier dans un autre dossier, répertoriez les sous-dossiers:

    gcloud resource-manager folders list --folder=FOLDER_ID

Autres indicateurs:

  • --filter : facultatif. Filtre les résultats par sous-type d'insight.

  • --format : facultatif. Format de sortie compatible avec gcloud CLI. Par exemple, pour répertorier le contenu des insights sous la forme d'une table aplatie:

    gcloud recommender insights list \
        --folder=FOLDER_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

Organisations

gcloud recommender insights list \
    --organization=ORGANIZATION_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

Indiquez les valeurs suivantes :

  • ORGANIZATION_ID: ID de l'organisation pour laquelle vous souhaitez obtenir des insights.

    Trouver un ID d'organisation Google Cloud

    Console

    Pour trouver un ID d'organisation Google Cloud, procédez comme suit:

    1. Accédez à Google Cloud Console.

      Accéder à la console Google Cloud

    2. Cliquez sur le sélecteur dans la barre de menu.
    3. Cliquez sur le champ Sélectionner à partir de, puis sélectionnez votre organisation.
    4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

    gcloud CLI

    Vous pouvez récupérer un ID d'organisation Google Cloud à l'aide de la commande suivante:

    gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

Autres indicateurs:

  • --filter : facultatif. Filtre les résultats par sous-type d'insight.

  • --format : facultatif. Format de sortie compatible avec gcloud CLI. Par exemple, pour répertorier le contenu des insights sous la forme d'une table aplatie:

    gcloud recommender insights list \
        --organization=ORGANIZATION_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

REST

Exécutez la commande curl suivante pour répertorier les insights de votre projet, dossier ou organisation.

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
     https://recommender.googleapis.com/v1/SCOPE/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

Indiquez les valeurs suivantes :

  • SCOPE: un champ d'application peut être un projet, un dossier ou une organisation.

    Les valeurs autorisées sont les suivantes :

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

      Trouver un numéro de projet Google Cloud

      Console

      Pour trouver un numéro de projet Google Cloud, procédez comme suit:

      1. Accédez à la page Tableau de bord dans la console Google Cloud.

        Accéder à Google Dashboard

      2. Cliquez sur le sélecteur dans la barre de menu.
      3. Sélectionnez votre organisation dans la zone Sélectionner à partir de, puis recherchez le nom de votre projet.
      4. Cliquez sur le nom du projet pour passer à celui-ci. Le numéro du projet est indiqué sur la fiche Informations sur le projet.

      gcloud CLI

      Vous pouvez récupérer un numéro de projet Google Cloud à l'aide de la commande suivante:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      Trouver un ID de dossier Google Cloud

      Console

      Pour trouver un ID de dossier Google Cloud, procédez comme suit:

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur le sélecteur dans la barre de menu.
      3. Cliquez sur le champ Sélectionner à partir de, puis sélectionnez votre organisation.
      4. Recherchez le nom de votre dossier. L'ID du dossier figure à côté du nom du dossier.

      gcloud CLI

      Vous pouvez récupérer un ID de dossier Google Cloud situé au niveau de l'organisation à l'aide de la commande suivante:

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      TOP_LEVEL_FOLDER_NAME peut être une correspondance de chaîne complète ou partielle. Supprimez l'option --format pour afficher plus d'informations sur les dossiers trouvés.

      Pour obtenir l'ID d'un dossier dans un autre dossier, répertoriez les sous-dossiers:

      gcloud resource-manager folders list --folder=FOLDER_ID

    • organizations/ORGANIZATION_ID

      Trouver un ID d'organisation Google Cloud

      Console

      Pour trouver un ID d'organisation Google Cloud, procédez comme suit:

      1. Accédez à Google Cloud Console.

        Accéder à la console Google Cloud

      2. Cliquez sur le sélecteur dans la barre de menu.
      3. Cliquez sur le champ Sélectionner à partir de, puis sélectionnez votre organisation.
      4. Cliquez sur l'onglet Tous. L'ID de l'organisation s'affiche à côté de son nom.

      gcloud CLI

      Vous pouvez récupérer un ID d'organisation Google Cloud à l'aide de la commande suivante:

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

Interpréter les réponses des insights

En plus des attributs d'insights standards, Asset Insights fournit plusieurs sous-types et champs spécialisés.

Sous-types d'insight

Il existe sept sous-types d'Insights associés aux éléments.

  • EXTERNAL_MEMBER : détecte les stratégies IAM contenant des utilisateurs ou des groupes appartenant à un domaine extérieur aux domaines de votre organisation.

  • EXTERNAL_POLICY_EDITOR : détecte les stratégies IAM contenant des utilisateurs ou des groupes en dehors des domaines de votre organisation autorisés à modifier les stratégies IAM.

  • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER : détecte les stratégies IAM contenant des utilisateurs ou des groupes en dehors des domaines de votre organisation autorisés à obtenir ou à répertorier des objets de stockage (storage.objects.list ou storage.objects.get permission).

  • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR : détecte les stratégies IAM contenant des utilisateurs ou des groupes en dehors des domaines de votre organisation autorisés à emprunter l'identité des comptes de service.

  • TERMINATED_MEMBER: détecte les stratégies IAM contenant des utilisateurs ou des groupes avec des comptes désactivés, supprimés ou effacés définitivement.

  • PUBLIC_IAM_POLICY : détecte les stratégies IAM contenant tous les utilisateurs ou tous les utilisateurs authentifiés.

  • OWNER_TERMINATED_PROJECT: détecte les projets qui ne contiennent aucun utilisateur ni groupe actif dans la stratégie IAM du projet.

Champs de contenu supplémentaires

En plus des champs standards de la réponse, Asset Insights fournit plusieurs champs spécialisés dans le champ content.

  • user: adresse e-mail de l'utilisateur spécifique détectée dans les membres des liaisons de stratégie pour cet insight spécifique. Ce champ est inclus dans le sous-type TERMINATED_MEMBER.

  • domain: domaine spécifique détecté dans les membres des liaisons de stratégie de cet insight particulier. Ce champ est inclus dans les sous-types EXTERNAL_MEMBER, EXTERNAL_POLICY_EDITOR, EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER et EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR.

  • assetName : nom de l'élément pour lequel l'accès a été détecté pour cet insight. Ce champ est inclus dans les sous-types OWNER_TERMINATED_PROJECT et PUBLIC_IAM_POLICY.

  • policyCount : nombre total de stratégies Cloud IAM distinctes dans lesquelles des membres correspondants ont été détectés pour cet insight particulier. Ce champ est inclus pour tous les sous-types d'Insights sur les éléments.

  • matchedPolicies : échantillon de stratégies IAM correspondant à l'insight détecté. Les règles de correspondance n'incluent que le sous-ensemble de liaisons et de membres de liaison qui correspondent à l'insight détecté. Ce champ est inclus pour tous les sous-types des insights sur les éléments.

  • policySearchQuery: requête pouvant être utilisée avec l'API de recherche de stratégies IAM de l'inventaire des éléments cloud afin de récupérer toutes les stratégies pertinentes en temps réel.

Exemple de réponse

L'extrait de code suivant montre le format d'un exemple de réponse.

{
   "name": "organizations/1234567/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/0ab35ae7-afa8-42a3-a173-92da8771a489",
   "description": "Domain example.com detected in 1 IAM policies",
   "content": {
      "domain": "example.com",
      "policyCount": 1,
      "policySearchQuery": "policy: example.com",
      "matchedPolicies" :[
         {
            "resource" :"//cloudresourcemanager.googleapis.com/projects/5678910",
            "project" :"projects/5678910",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2020-12-04T06:59:04Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/1234567"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2020-12-01T06:58:03Z"
}

Limites

  • Ces insights ne prennent pas en compte les membres de groupes dans leurs résultats et ne doivent pas être considérés comme une liste exhaustive des failles correspondantes.

  • Les insights individuels incluent un échantillonnage des stratégies IAM correspondantes, limitées à 100 stratégies distinctes. Toutes les règles correspondantes peuvent être récupérées en appelant la recherche de règles Cloud Asset Inventory.

  • Les insights sur les éléments ne prennent pas en compte les comptes de service à des fins de génération d'insights.