Écrire l'analyse des stratégies dans BigQuery

Cette page explique comment analyser les stratégies IAM (Identity and Access Management) de manière asynchrone et écrire les résultats dans BigQuery. Le processus est similaire à en analysant les stratégies IAM, à l'exception le résultat de l'analyse est écrit dans les tables BigQuery.

Avant de commencer

Activez Cloud Asset API.

Activer l'API

Vous devez activer l'API dans le projet ou l'organisation que vous utiliserez pour envoyer le requête. Il ne doit pas nécessairement s'agir de la même ressource que celle sur laquelle vous limitez votre requête.

Rôles et autorisations requis

Les rôles et autorisations suivants sont requis pour exécuter une analyse des stratégies exporter les résultats vers BigQuery.

Rôles IAM requis

Pour obtenir les autorisations nécessaires pour analyser une stratégie et exporter les résultats vers BigQuery, demandez à votre administrateur de vous accorder le les rôles IAM suivants sur le projet, le dossier ou l'organisation auxquels vous souhaitez appliquer le champ d'application votre requête pour:

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ces rôles prédéfinis contiennent les autorisations requises pour analyser une stratégie et exporter les résultats vers dans BigQuery. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour analyser une stratégie et exporter les résultats vers BigQuery:

  • bigquery.datasets.create
  • bigquery.jobs.create
  • bigquery.tables.create
  • bigquery.tables.get
  • bigquery.tables.updateData
  • bigquery.tables.update
  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • Pour analyser les stratégies avec des rôles IAM personnalisés: iam.roles.get
  • Pour analyser les stratégies à l'aide de la Google Cloud CLI, procédez comme suit: serviceusage.services.use

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Autorisations Google Workspace requises

Pour savoir si un compte principal dispose de certains rôles ou autorisations de son abonnement à un groupe Google Workspace, vous avez besoin du groups.read Autorisation Google Workspace. Cette autorisation est contenue dans le lecteur de groupes Administrateur, ainsi que des rôles plus puissants tels que celui d'administrateur ou de super-administrateur des groupes de rôles. Pour en savoir plus, consultez Attribuer des rôles d'administrateur spécifiques. des informations.

Analyser les stratégies et exporter les résultats

Console

  1. Dans la console Google Cloud, accédez à la page Policy Analyzer.

    Accéder à Policy Analyzer

  2. Dans la section Analyser les règles, recherchez le modèle de requête que vous souhaitez utiliser. puis cliquez sur Créer une requête. Pour créer une requête personnalisée, cliquez sur Créer une requête personnalisée

  3. Dans le champ Sélectionner le champ d'application de la requête, sélectionnez le projet, le dossier ou l'organisation auquel vous souhaitez appliquer la requête. Policy  Analyzer analyse l'accès pour ce projet, ce dossier ou cette organisation, ainsi que toutes les ressources de ce projet, ce dossier ou cette organisation.

  4. Assurez-vous que vos paramètres de requête sont définis:

    • Si vous utilisez un modèle de requête, vérifiez les paramètres de requête préremplis.
    • Si vous créez une requête personnalisée, définissez les ressources, les comptes principaux, les rôles et les autorisations à interroger.

    Pour en savoir plus sur les types de requêtes que vous pouvez créer, consultez Analyser les stratégies IAM

  5. Dans le volet étiqueté avec le nom de la requête, cliquez sur Analyser > Exporter les résultats uniquement. L'outil Exportation résultats s'ouvre.

  6. Dans la section Définir la destination de l'exportation, saisissez les informations suivantes:

    • Projet: projet contenant votre ensemble de données BigQuery localisés.
    • Ensemble de données: ensemble de données BigQuery que vous souhaitez exporter les résultats.
    • Table: préfixe des tables BigQuery sur lesquelles les résultats de l'analyse sont générés est écrit. Si aucune table n'existe avec le préfixe spécifié, BigQuery crée une table.
  7. Cliquez sur Continuer.

  8. Facultatif: Dans la section Configurer des paramètres supplémentaires, sélectionnez le les options souhaitées:

    • Partitionnement: indique si la table doit être partitionnée. Pour en savoir plus sur tables partitionnées, consultez Présentation de données.
    • Write preference (Préférence d'écriture) : spécifie l'action qui se produit si la destination table ou partition existe déjà. Par défaut, si la table ou la partition existe déjà, BigQuery ajoute les données à la table la dernière partition.
  9. Cliquez sur Exporter.

Policy Analyzer exécute votre requête et exporte les résultats vers table spécifiée.

gcloud

La méthode AnalyzeIamPolicyLongrunning vous permet d'émettre une requête d'analyse et d'obtenir des résultats dans les Destination BigQuery.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • RESOURCE_TYPE: type de la ressource à laquelle vous souhaitez limiter votre recherche. Stratégies d'autorisation IAM uniquement associés à cette ressource et à ses descendants sont analysés. Utiliser la valeur project, folder ou organization.
  • RESOURCE_ID: ID du Projet, dossier ou organisation Google Cloud auxquels vous souhaitez limiter votre recherche. Uniquement Les stratégies d'autorisation IAM associées à cette ressource et à ses descendants seront analysées. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • PRINCIPAL: compte principal dont l'accès à analyser, sous la forme PRINCIPAL_TYPE:ID, par exemple user:my-user@example.com Pour obtenir la liste complète des types de comptes principaux, consultez Identifiants principaux.
  • PERMISSIONS: A séparées par une virgule des autorisations à vérifier, par exemple compute.instances.get,compute.instances.start Si vous indiquez plusieurs autorisations, Policy Analyzer recherche toutes les autorisations listées.
  • DATASET: ensemble de données BigQuery au format projects/PROJECT_ID/datasets/DATASET_ID, où PROJECT_ID est l'ID alphanumérique de votre projet Google Cloud. DATASET_ID est l'ID de votre ensemble de données.
  • TABLE_PREFIX: préfixe du Tables BigQuery dans lesquelles les résultats d'analyse seront écrits. Si un tableau avec le n'existe pas, BigQuery crée une table.
  • PARTITION_KEY : facultatif. La clé de partitionnement pour les tables partitionnées BigQuery. Policy Analyzer n'est compatible qu'avec les clés de partitionnement REQUEST_TIME.
  • WRITE_DISPOSITION : facultatif. Spécifie l'action qui se produit si la table ou la partition de destination existe déjà. Pour obtenir une liste des , consultez writeDisposition. Par défaut, si la table ou la partition existe déjà, BigQuery ajoute les données à la table ou la dernière partition.

Exécutez la gcloud asset analyze-iam-policy-longrunning :

Linux, macOS ou Cloud Shell

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID \
    --full-resource-name=FULL_RESOURCE_NAME \
    --identity=PRINCIPAL \
    --permissions='PERMISSIONS' \
    --bigquery-dataset=DATASET \
    --bigquery-table-prefix=TABLE_PREFIX \
    --bigquery-partition-key=PARTITION_KEY \
    --bigquery-write-disposition=WRITE_DISPOSITION

Windows (PowerShell)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID `
    --full-resource-name=FULL_RESOURCE_NAME `
    --identity=PRINCIPAL `
    --permissions='PERMISSIONS' `
    --bigquery-dataset=DATASET `
    --bigquery-table-prefix=TABLE_PREFIX `
    --bigquery-partition-key=PARTITION_KEY `
    --bigquery-write-disposition=WRITE_DISPOSITION

Windows (cmd.exe)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ^
    --full-resource-name=FULL_RESOURCE_NAME ^
    --identity=PRINCIPAL ^
    --permissions='PERMISSIONS' ^
    --bigquery-dataset=DATASET ^
    --bigquery-table-prefix=TABLE_PREFIX ^
    --bigquery-partition-key=PARTITION_KEY ^
    --bigquery-write-disposition=WRITE_DISPOSITION

Vous devriez obtenir un résultat semblable à celui-ci :

Analyze IAM Policy in progress.
Use [gcloud asset operations describe projects/my-project/operations/AnalyzeIamPolicyLongrunning/1195028485971902504711950280359719028666] to check the status of the operation.

REST

La méthode AnalyzeIamPolicyLongrunning vous permet d'émettre une requête d'analyse et d'obtenir des résultats dans les Destination BigQuery.

Pour analyser une stratégie d'autorisation IAM et exporter les résultats vers utilisez l'API Cloud Asset Inventory analyzeIamPolicyLongrunning .

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • RESOURCE_TYPE: type de la ressource à laquelle vous souhaitez limiter votre recherche. Stratégies d'autorisation IAM uniquement associés à cette ressource et à ses descendants sont analysés. Utiliser la valeur projects, folders ou organizations.
  • RESOURCE_ID: ID du Projet, dossier ou organisation Google Cloud auxquels vous souhaitez limiter votre recherche. Uniquement Les stratégies d'autorisation IAM associées à cette ressource et à ses descendants seront analysées. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • FULL_RESOURCE_NAME : facultatif. Le nom complet de la ressource pour lesquels vous souhaitez analyser l'accès. Pour obtenir la liste des formats de nom de ressource complet, consultez Format du nom de ressource.
  • PRINCIPAL : facultatif. Le compte principal dont vous souhaitez analyser l'accès, au format PRINCIPAL_TYPE:ID, par exemple user:my-user@example.com Pour obtenir la liste complète des types de comptes principaux, consultez Identifiants principaux.
  • PERMISSION_1, PERMISSION_2... PERMISSION_N: facultatif. La les autorisations que vous souhaitez vérifier, par exemple compute.instances.get. Si vous plusieurs autorisations, Policy Analyzer recherche celles listées.
  • DATASET: ensemble de données BigQuery au format projects/PROJECT_ID/datasets/DATASET_ID, où PROJECT_ID est l'ID alphanumérique de votre projet Google Cloud. DATASET_ID est l'ID de votre ensemble de données.
  • TABLE_PREFIX: préfixe du Tables BigQuery dans lesquelles les résultats d'analyse seront écrits. Si un tableau avec le n'existe pas, BigQuery crée une table.
  • PARTITION_KEY : facultatif. La clé de partitionnement pour les tables partitionnées BigQuery. Policy Analyzer n'est compatible qu'avec les clés de partitionnement REQUEST_TIME.
  • WRITE_DISPOSITION : facultatif. Spécifie l'action qui se produit si la table ou la partition de destination existe déjà. Pour obtenir une liste des , consultez writeDisposition. Par défaut, si la table ou la partition existe déjà, BigQuery ajoute les données à la table ou la dernière partition.

Méthode HTTP et URL :

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicyLongrunning

Corps JSON de la requête :

{
  "analysisQuery": {
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "identitySelector": {
      "identity": "PRINCIPAL"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  },
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "DATASET",
      "tablePrefix": "TABLE_PREFIX",
      "partitionKey": "PARTITION_KEY",
      "writeDisposition": "WRITE_DISPOSITION"
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/my-project/operations/AnalyzeIamPolicyLongrunning/1206385342502762515812063858425027606003",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.asset.v1.AnalyzeIamPolicyLongrunningMetadata",
    "createTime": "2022-04-12T21:31:10.753173929Z"
  }
}

Afficher les résultats de l'analyse des stratégies IAM

Pour afficher votre analyse de stratégie IAM, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Pour afficher les tables et les vues de l'ensemble de données, ouvrez le panneau de navigation. Dans la section Explorateur, sélectionnez votre projet pour le développer, puis sélectionnez un jeu de données.

  3. Dans la liste, sélectionnez les tables avec votre préfixe. Le tableau avec un Le suffixe analysis contient la requête et les métadonnées (par exemple, l'opération le nom, l'heure de la demande et les erreurs non critiques). Le tableau avec Le suffixe analysis_result correspond aux tuples de liste de résultats de {identity, role(s)/permission(s), resource} avec stratégies IAM qui génèrent ces tuples.

  4. Pour afficher un exemple d'ensemble de données, sélectionnez l'onglet Aperçu.

API

Pour parcourir les données d'une table, appelez tabledata.list. Dans le paramètre tableId, spécifiez le nom de la table.

Vous pouvez configurer les paramètres facultatifs suivants pour contrôler la sortie.

  • maxResults est le nombre maximal de résultats à renvoyer.
  • selectedFields est une liste de colonnes à renvoyer, séparées par une virgule. Si ce paramètre n'est pas spécifié, toutes les colonnes sont renvoyées.
  • startIndex est l'index basé sur zéro de la première ligne à lire.

Les valeurs renvoyées sont encapsulées dans un objet JSON que vous devez analyser, comme décrit dans la documentation de référence de tabledata.list.

Interroger BigQuery

Cette section fournit des exemples de requêtes SQL pour vous montrer comment utiliser Tables BigQuery écrites par AnalyzeIamPolicyLongrunning. Pour plus sur la syntaxe BigQuery, consultez Syntaxe des requêtes en SQL standard

OP_ID est nécessaire pour la plupart des requêtes, vous pouvez l'obtenir à partir de la réponse AnalyzeIamPolicyLongrunning. Par exemple, dans gcloud, vous trouverez OP_ID dans 123456 sous "Utiliser [gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456] pour vérifier l'état de l'opération".

Répertorier les opérations

La table peut stocker les résultats de plusieurs opérations AnalyzeIamPolicyLongrunning. Vous pouvez utiliser la requête suivante pour les répertorier :

SELECT DISTINCT
  requestTime,
  opName
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
ORDER BY 1 DESC
;

Répertorier les analyses dans une opération

Dans une opération AnalyzeIamPolicyLongrunning, plusieurs enregistrements d'analyse peuvent être générés. Par exemple, lorsque vous activez l'option analyze_service_account_impersonation dans votre requête, le résultat peut contenir une analyse principale (avec analysisId 0) et plusieurs analyses d'usurpation d'identité du compte de service.

Vous pouvez utiliser la requête suivante pour rechercher toutes les analyses en leur attribuant un nom d'opération.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisId,
  requestTime,
  TO_JSON_STRING(analysis.analysisQuery, true) as analysisQuery,
  analysis.fullyExplored,
  TO_JSON_STRING(analysis.nonCriticalErrors, true) as nonCriticalErrors
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
WHERE opName=_opName
ORDER BY 1
;

Répertorier les ACE (entrées de contrôle des accès) dans une analyse

Une ACE est une entrée de contrôle d'accès {identity, role(s)/permission(s), resource}. Vous pouvez utiliser la requête suivante pour afficher une entrée ACE dans une analyse.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName
AND analysisId = 0
ORDER BY 1,2,3,4
;

Répertorier les ACE (entrées de contrôle des accès) avec une liaison de stratégie IAM dans une analyse

Dans cette requête, nous répertorions à la fois l'entrée ACE et la liaison de stratégie IAM qui génère cette ACE pour une analyse.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission,
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2,3,4
;

Répertorier les liaisons de stratégie IAM dans une analyse

Dans cette requête, nous répertorions les liaisons de stratégie IAM dans une analyse.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`
WHERE opName=_opName AND analysisId = 0
ORDER BY 1, 2
;

Répertorier les liaisons de stratégie IAM avec ACE (entrées de contrôle des accès) dans une analyse

Dans cette requête, nous répertorions les liaisons de stratégies IAM avec leurs entrées ACE dérivées dans une seule analyse.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding,
  TO_JSON_STRING(analysisResult.identityList.identities, true) as identities,
  TO_JSON_STRING(acls.accesses, true) as accesses,
  TO_JSON_STRING(acls.resources, true) as resources
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.accessControlLists) AS acls
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2
;