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 semblable à l'analyse des stratégies IAM, sauf que le résultat de l'analyse est écrit dans des tables BigQuery.
Avant de commencer
Activez Cloud Asset API.
Vous devez activer l'API dans le projet ou l'organisation que vous utiliserez pour envoyer la requête. Vous n'avez pas besoin d'utiliser la même ressource que celle concernée par votre requête.
Rôles et autorisations requis
Les rôles et autorisations suivants sont requis pour exécuter une analyse de stratégie et 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 les rôles IAM suivants dans le projet, le dossier ou l'organisation auxquels vous souhaitez appliquer votre requête:
- Éditeur de données BigQuery (
roles/bigquery.dataEditor
) - Lecteur d'éléments Cloud (
roles/cloudasset.viewer
) -
Pour analyser des stratégies avec des rôles IAM personnalisés : Lecteur de rôles (
roles/iam.roleViewer
) -
Pour analyser des règles à l'aide de la CLI Google Cloud :
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
)
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 nécessaires pour analyser une stratégie et exporter les résultats vers BigQuery. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
-
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 des stratégies avec des rôles IAM personnalisés :
iam.roles.get
-
Pour analyser des règles à l'aide de la CLI Google Cloud, 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 possède certains rôles ou autorisations à la suite de son appartenance à un groupe Google Workspace, vous devez disposer de l'autorisation Google Workspace groups.read
. Cette autorisation est contenue dans le rôle "Administrateur de lecteur de groupes" et dans des rôles plus puissants tels que les rôles "Administrateur des groupes" ou "Super-administrateur". Pour en savoir plus, consultez Attribuer des rôles d'administrateur spécifiques.
Appel de AnalyzeIamPolicyLongrunning
La méthode AnalyzeIamPolicyLongrunning
vous permet d'envoyer une requête d'analyse et d'obtenir des résultats dans la destination BigQuery spécifiée.
gcloud
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
RESOURCE_TYPE
: type de la ressource sur laquelle vous souhaitez étendre votre recherche. Seules les stratégies IAM autorisées à associer cette ressource et à ses descendants seront analysées. Utilisez la valeurproject
,folder
ouorganization
.RESOURCE_ID
: ID du projet, du dossier ou de l'organisation Google Cloud dont vous souhaitez limiter la recherche. Seules les stratégies IAM autorisées à associer cette ressource et à ses descendants seront analysées. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
. Les ID de dossier et d'organisation sont numériques, tels que123456789012
.PRINCIPAL
: compte principal que vous souhaitez analyser, au formatPRINCIPAL_TYPE:ID
, par exempleuser:my-user@example.com
. Pour obtenir la liste complète des types de comptes principaux, consultez la section Identifiants principaux.PERMISSIONS
: liste des autorisations que vous souhaitez vérifier, séparées par une virgule. Par exemple :compute.instances.get,compute.instances.start
. Si vous répertoriez plusieurs autorisations, Policy Analyzer recherche toutes les autorisations répertoriées.DATASET
: l'ensemble de données BigQuery au formatprojects/PROJECT_ID/datasets/DATASET_ID
, oùPROJECT_ID
est l'ID alphanumérique de votre projet Google Cloud etDATASET_ID
l'ID de votre ensemble de données.TABLE_PREFIX
: préfixe des tables BigQuery dans lesquelles les résultats d'analyse seront écrits. Si une table ayant le préfixe spécifié n'existe pas, BigQuery crée une table.PARTITION_KEY
: facultatif. Clé de partition de la table partitionnée BigQuery. L'outil Policy Analyzer n'accepte que les clés de partitionREQUEST_TIME
.WRITE_DISPOSITION
: facultatif. Spécifie l'action qui se produit si la table ou la partition de destination existe déjà. Pour obtenir la liste des valeurs possibles, consultez la sectionwriteDisposition
. 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 commande gcloud asset Analysis-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
Pour analyser une stratégie d'autorisation IAM et exporter les résultats vers BigQuery, utilisez la méthode analyzeIamPolicyLongrunning
de l'API Cloud Asset Inventory.
Avant d'utiliser les données de la requête, effectuez les remplacements suivants:
RESOURCE_TYPE
: type de la ressource sur laquelle vous souhaitez étendre votre recherche. Seules les stratégies IAM autorisées à associer cette ressource et à ses descendants seront analysées. Utilisez la valeurprojects
,folders
ouorganizations
.RESOURCE_ID
: ID du projet, du dossier ou de l'organisation Google Cloud dont vous souhaitez limiter la recherche. Seules les stratégies IAM autorisées à associer cette ressource et à ses descendants seront analysées. Les ID de projet sont des chaînes alphanumériques, telles quemy-project
. Les ID de dossier et d'organisation sont numériques, tels que123456789012
.-
FULL_RESOURCE_NAME
: facultatif. Nom complet de la ressource pour laquelle vous souhaitez analyser l'accès. Pour obtenir la liste des formats de noms de ressources complets, consultez Format du nom de la ressource. PRINCIPAL
: facultatif. Le compte principal dont vous souhaitez analyser l'accès, au formatPRINCIPAL_TYPE:ID
(par exemple,user:my-user@example.com
). Pour obtenir la liste complète des types de comptes principaux, consultez la section Identifiants principaux.PERMISSION_1
,PERMISSION_2
...PERMISSION_N
: facultatif. Les autorisations que vous souhaitez vérifier, par exemplecompute.instances.get
. Si vous répertoriez plusieurs autorisations, Policy Analyzer recherche toutes les autorisations répertoriées.DATASET
: l'ensemble de données BigQuery au formatprojects/PROJECT_ID/datasets/DATASET_ID
, oùPROJECT_ID
est l'ID alphanumérique de votre projet Google Cloud etDATASET_ID
l'ID de votre ensemble de données.TABLE_PREFIX
: préfixe des tables BigQuery dans lesquelles les résultats d'analyse seront écrits. Si une table ayant le préfixe spécifié n'existe pas, BigQuery crée une table.PARTITION_KEY
: facultatif. Clé de partition de la table partitionnée BigQuery. L'outil Policy Analyzer n'accepte que les clés de partitionREQUEST_TIME
.WRITE_DISPOSITION
: facultatif. Spécifie l'action qui se produit si la table ou la partition de destination existe déjà. Pour obtenir la liste des valeurs possibles, consultez la sectionwriteDisposition
. 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 d'analyse de stratégie IAM
Pour afficher votre analyse de stratégie IAM, procédez comme suit :
Console
Accédez à la page "BigQuery" de Cloud Console.
Accéder à la page BigQueryPour afficher les tables et les vues de l'ensemble de données, ouvrez le panneau de navigation. Dans la section Ressources, sélectionnez votre projet pour le développer, puis sélectionnez un ensemble de données.
Dans la liste, sélectionnez les tables avec votre préfixe. La table avec le suffixe
analysis
contient la requête et les métadonnées (par exemple, nom de l'opération, heure de la requête, erreurs non critiques). La table avec le suffixeanalysis_result
est le résultat qui répertorie les tuples de{identity, role(s)/permission(s), resource}
ainsi que les stratégies IAM qui génèrent ces tuples.Pour afficher un exemple d'ensemble de données, sélectionnez 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 qui vous montrent comment utiliser les tables BigQuery écrites par AnalyzeIamPolicyLongrunning
. Pour en savoir plus sur la syntaxe BigQuery, consultez la section 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 ;