Scrivi l'analisi dei criteri in BigQuery

Questa pagina spiega come analizzare i criteri di Identity and Access Management (IAM) in modo asincrono e scrivere i risultati in BigQuery. La procedura è simile all'analisi dei criteri IAM, con la differenza che il risultato dell'analisi viene scritto nelle tabelle BigQuery.

Prima di iniziare

Attiva Cloud Asset API.

Abilita l'API

Devi abilitare l'API nel progetto o nell'organizzazione che utilizzerai per inviare la query. Non deve essere la stessa risorsa a cui restringi l'ambito della query.

Ruoli e autorizzazioni richiesti

Per eseguire un'analisi dei criteri ed esportare i risultati in BigQuery, sono necessari i ruoli e le autorizzazioni seguenti.

Ruoli IAM obbligatori

Per ottenere le autorizzazioni necessarie per analizzare un criterio ed esportare i risultati in BigQuery, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto, sulla cartella o sull'organizzazione a cui restringerai l'ambito della query:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per analizzare un criterio ed esportare i risultati in BigQuery. Per visualizzare le autorizzazioni necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per analizzare un criterio ed esportare i risultati in BigQuery, sono necessarie le seguenti autorizzazioni:

  • 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
  • Per analizzare i criteri con ruoli IAM personalizzati: iam.roles.get
  • Per utilizzare Google Cloud CLI per analizzare i criteri: serviceusage.services.use

Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Autorizzazioni Google Workspace richieste

Se vuoi verificare se un'entità ha determinati ruoli o autorizzazioni in seguito all'appartenenza a un gruppo di Google Workspace, devi avere l'autorizzazione groups.read di Google Workspace. Questa autorizzazione è inclusa nel ruolo Amministratore lettore di Gruppi e in ruoli più potenti come i ruoli Amministratore gruppi o Super amministratore. Per saperne di più, consulta Assegnare ruoli di amministratore specifici.

Analizza i criteri ed esporta i risultati

Console

  1. Nella console Google Cloud, vai alla pagina Analizzatore criteri.

    Vai all'Analizzatore criteri

  2. Nella sezione Analizza criteri, individua il modello di query che desideri utilizzare e fai clic su Crea query. Se vuoi creare una query personalizzata, fai clic su Crea query personalizzata.

  3. Nel campo Seleziona ambito query, seleziona il progetto, la cartella o l'organizzazione a cui vuoi limitare la query. L'Analizzatore criteri analizzerà l'accesso per il progetto, la cartella o l'organizzazione, nonché tutte le risorse all'interno del progetto, della cartella o dell'organizzazione.

  4. Assicurati che i parametri di ricerca siano impostati:

    • Se utilizzi un modello di query, conferma i parametri di ricerca precompilati.
    • Se stai creando una query personalizzata, imposta le risorse, le entità, i ruoli e le autorizzazioni per i quali vuoi eseguire la query.

    Per ulteriori informazioni sui tipi di query che puoi creare, consulta Analizzare i criteri IAM.

  5. Nel riquadro denominato con il nome della query, fai clic su Analizza > Esporta solo risultato completo. Viene visualizzato il riquadro Esporta i risultati completi.

  6. Nella sezione Imposta destinazione di esportazione, inserisci le seguenti informazioni:

    • Progetto: il progetto in cui si trova il set di dati BigQuery.
    • Set di dati: il set di dati BigQuery in cui vuoi esportare i risultati.
    • Tabella: il prefisso delle tabelle BigQuery in cui verranno scritti i risultati dell'analisi. Se non esiste una tabella con il prefisso specificato, BigQuery crea una nuova tabella.
  7. Fai clic su Continua.

  8. (Facoltativo) Nella sezione Configura impostazioni aggiuntive, seleziona le opzioni che preferisci:

    • Partizionamento: indica se eseguire il partizionamento della tabella. Per scoprire di più sulle tabelle partizionate, consulta Introduzione alle tabelle partizionate.
    • Write preferred (Preferenza di scrittura): specifica l'azione che si verifica se la tabella o la partizione di destinazione esiste già. Per impostazione predefinita, se la tabella o la partizione esiste già, BigQuery aggiunge i dati alla tabella o all'ultima partizione.
  9. Fai clic su Esporta.

Analizzatore criteri esegue la query ed esporta i risultati completi nella tabella specificata.

gcloud

Il metodo AnalyzeIamPolicyLongrunning ti consente di inviare una richiesta di analisi e ottenere risultati nella destinazione BigQuery specificata.

Prima di utilizzare uno qualsiasi dei dati del comando riportati di seguito, apporta le seguenti sostituzioni:

  • RESOURCE_TYPE: il tipo di risorsa a cui vuoi limitare la ricerca. Verranno analizzati solo i criteri di autorizzazione IAM associati a questa risorsa e ai relativi discendenti. Utilizza il valore project, folder o organization.
  • RESOURCE_ID: l'ID del progetto, della cartella o dell'organizzazione Google Cloud a cui vuoi restringere l'ambito della ricerca. Verranno analizzati solo i criteri di autorizzazione IAM associati a questa risorsa e ai relativi discendenti. Gli ID progetto sono stringhe alfanumeriche, come my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • PRINCIPAL: l'entità di cui vuoi analizzare l'accesso, nel formato PRINCIPAL_TYPE:ID, ad esempio user:my-user@example.com. Per un elenco completo dei tipi di entità, consulta Identificatori principali.
  • PERMISSIONS: un elenco separato da virgole delle autorizzazioni che vuoi verificare, ad esempio compute.instances.get,compute.instances.start. Se elenchi più autorizzazioni, Analizzatore criteri controllerà una qualsiasi delle autorizzazioni elencate.
  • DATASET: il set di dati BigQuery nel formato projects/PROJECT_ID/datasets/DATASET_ID, dove PROJECT_ID è l'ID alfanumerico del progetto Google Cloud e DATASET_ID è l'ID del set di dati.
  • TABLE_PREFIX: il prefisso delle tabelle BigQuery in cui verranno scritti i risultati dell'analisi. Se non esiste una tabella con il prefisso specificato, BigQuery crea una nuova tabella.
  • PARTITION_KEY: facoltativo. La chiave di partizione per la tabella partizionata BigQuery. Analizzatore criteri supporta solo REQUEST_TIME chiavi di partizione.
  • WRITE_DISPOSITION: facoltativo. Specifica l'azione che si verifica se la tabella o la partizione di destinazione esiste già. Per un elenco dei possibili valori, consulta writeDisposition. Per impostazione predefinita, se la tabella o la partizione esiste già, BigQuery aggiunge i dati alla tabella o all'ultima partizione.

Esegui il comando gcloud asset analyze-iam-policy-longrunning:

Linux, macOS o 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

Dovresti ricevere una risposta simile alla seguente:

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

REST

Il metodo AnalyzeIamPolicyLongrunning ti consente di inviare una richiesta di analisi e ottenere risultati nella destinazione BigQuery specificata.

Per analizzare un criterio di autorizzazione IAM ed esportare i risultati in BigQuery, utilizza il metodo analyzeIamPolicyLongrunning dell'API Cloud Asset Inventory.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • RESOURCE_TYPE: il tipo di risorsa a cui vuoi limitare la ricerca. Verranno analizzati solo i criteri di autorizzazione IAM associati a questa risorsa e ai relativi discendenti. Utilizza il valore projects, folders o organizations.
  • RESOURCE_ID: l'ID del progetto, della cartella o dell'organizzazione Google Cloud a cui vuoi restringere l'ambito della ricerca. Verranno analizzati solo i criteri di autorizzazione IAM associati a questa risorsa e ai relativi discendenti. Gli ID progetto sono stringhe alfanumeriche, come my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • FULL_RESOURCE_NAME: facoltativo. Il nome completo della risorsa di cui vuoi analizzare l'accesso. Per un elenco dei formati completi dei nomi delle risorse, vedi Formato del nome delle risorse.
  • PRINCIPAL: facoltativo. L'entità di cui vuoi analizzare l'accesso, nel formato PRINCIPAL_TYPE:ID, ad esempio user:my-user@example.com. Per un elenco completo dei tipi di entità, consulta Identificatori principali.
  • PERMISSION_1, PERMISSION_2... PERMISSION_N: facoltativo. Le autorizzazioni che vuoi verificare, ad esempio compute.instances.get. Se elenchi più autorizzazioni, Analizzatore criteri controllerà una qualsiasi delle autorizzazioni elencate.
  • DATASET: il set di dati BigQuery nel formato projects/PROJECT_ID/datasets/DATASET_ID, dove PROJECT_ID è l'ID alfanumerico del progetto Google Cloud e DATASET_ID è l'ID del set di dati.
  • TABLE_PREFIX: il prefisso delle tabelle BigQuery in cui verranno scritti i risultati dell'analisi. Se non esiste una tabella con il prefisso specificato, BigQuery crea una nuova tabella.
  • PARTITION_KEY: facoltativo. La chiave di partizione per la tabella partizionata BigQuery. Analizzatore criteri supporta solo REQUEST_TIME chiavi di partizione.
  • WRITE_DISPOSITION: facoltativo. Specifica l'azione che si verifica se la tabella o la partizione di destinazione esiste già. Per un elenco dei possibili valori, consulta writeDisposition. Per impostazione predefinita, se la tabella o la partizione esiste già, BigQuery aggiunge i dati alla tabella o all'ultima partizione.

Metodo HTTP e URL:

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

Corpo JSON richiesta:

{
  "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"
    }
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Visualizza i risultati dell'analisi dei criteri IAM

Per visualizzare i risultati dell'analisi dei criteri IAM:

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Per visualizzare le tabelle e le visualizzazioni nel set di dati, apri il pannello di navigazione. Nella sezione Explorer, seleziona il progetto per espanderlo, quindi seleziona un set di dati.

  3. Seleziona dall'elenco le tabelle con il tuo prefisso. La tabella con un suffisso analysis contiene la query e i metadati (ad esempio nome dell'operazione, ora della richiesta ed errori non critici). La tabella con il suffisso analysis_result è il risultato che elenca le tuple di {identity, role(s)/permission(s), resource} insieme ai criteri IAM che generano queste tuple.

  4. Per visualizzare un set di dati di esempio, seleziona la scheda Anteprima.

API

Per sfogliare i dati della tabella, chiama tabledata.list. Nel parametro tableId, specifica il nome della tabella.

Puoi configurare i seguenti parametri facoltativi per controllare l'output.

  • maxResults è il numero massimo di risultati da restituire.
  • selectedFields è un elenco separato da virgole di colonne da restituire. Se non specificate, vengono restituite tutte le colonne.
  • startIndex è l'indice in base zero della riga iniziale da leggere.

I valori vengono restituiti aggregati in un oggetto JSON che devi analizzare, come descritto nella documentazione di riferimento di tabledata.list.

Esegui query su BigQuery

Questa sezione fornisce query SQL di esempio per mostrare come utilizzare le tabelle BigQuery scritte da AnalyzeIamPolicyLongrunning. Per ulteriori informazioni sulla sintassi di BigQuery, consulta Sintassi delle query SQL standard.

OP_ID è necessario per la maggior parte delle query, puoi ottenerlo dalla risposta di AnalyzeIamPolicyLongrunning. Ad esempio, in gcloud, troverai OP_ID è 123456 in "Utilizza [gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456] per verificare lo stato dell'operazione.".

Elenco operazioni

La tabella potrebbe archiviare i risultati di più operazioni AnalyzeIamPolicyLongrunning. Per elencarli tutti, puoi utilizzare la query seguente:

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

Elenco analisi in un'operazione

In un'operazione AnalyzeIamPolicyLongrunning potrebbero essere generati più record di analisi. Ad esempio, se abiliti l'opzione analyze_service_account_impersonation nella richiesta, il risultato potrebbe contenere un'analisi principale (con analysisId 0) e diverse analisi del furto d'identità degli account di servizio.

Puoi utilizzare la seguente query per trovare tutte le analisi assegnando un nome a un'operazione.

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
;

Elenco Esperimenti campagna AdWords(Voci di controllo accesso) in un'analisi

Un Esperimenti campagna AdWords è una voce di controllo dell'accesso {identity, role(s)/permission(s), resource}. Per elencare gli Esperimenti campagna AdWords in un'analisi, puoi utilizzare la seguente query.

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
;

Elenca voci di controllo dell'accesso(Esperimenti campagna AdWords) con associazione di criteri IAM in un'analisi

In questa query, sono elencati sia Esperimenti campagna AdWords sia l'associazione dei criteri IAM che lo genera per un'analisi.

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
;

Elenco associazioni di criteri IAM in un'analisi

In questa query, elenchiamo le associazioni di criteri IAM comparse in un'analisi.

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
;

Elenco delle associazioni di criteri IAM con ACE(Access Control Entry) in un'analisi

In questa query, elenchiamo le associazioni di criteri IAM con i relativi Esperimenti campagna AdWords derivati in un'analisi

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
;