Risolvere i problemi relativi alle autorizzazioni IAM in BigQuery

Questo documento mostra come risolvere i problemi relativi alle autorizzazioni di Identity and Access Management (IAM) in BigQuery. I problemi di autorizzazione IAM in genere comportano errori Access Denied come i seguenti:

  • Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.
  • Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.
  • User does not have permission to query table PROJECT_ID:DATASET.TABLE.
  • Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.
  • Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.

Prima di iniziare

Raccogliere informazioni sul problema

Il primo passaggio per risolvere un problema di accesso alle risorse consiste nel determinare l'autorizzazione mancante, l'entità IAM a cui è stato negato l'accesso e la risorsa a cui l'entità stava tentando di accedere.

Recuperare informazioni dall'errore o dalla cronologia dei job

Per ottenere informazioni sul principal, sulla risorsa e sulle autorizzazioni, esamina l'output dello strumento a riga di comando bq, la risposta dell'API o BigQuery nella console Google Cloud .

Ad esempio, se tenti di eseguire una query con autorizzazioni insufficienti, visualizzi un errore simile al seguente nella scheda Informazioni job della sezione Risultati delle query della console Google Cloud .

Un errore di accesso negato nella scheda Informazioni job della sezione Risultati delle query.

Esamina l'errore per determinare l'entità, la risorsa e le autorizzazioni.

In alcuni casi, puoi richiedere le autorizzazioni mancanti direttamente dal messaggio di errore. Per saperne di più, consulta la sezione Risolvere i problemi relativi ai messaggi di errore di autorizzazione nella documentazione di IAM.

Recuperare informazioni da Cloud Audit Logs

Se il messaggio di errore è generico, mancano informazioni o l'azione non è riuscita in un processo in background, utilizza Esplora log di Cloud Audit Logs per ottenere informazioni sull'errore.

  1. Nella console Google Cloud , vai alla pagina Esplora log.

    Vai a Esplora log

    In alternativa, dal menu di navigazione, scegli Monitoring > Esplora log.

  2. In Esplora log, scegli Log di progetto per l'ambito dei log.

  3. Nella finestra della query, inserisci la seguente query per ottenere gli errori relativi alle autorizzazioni dai log di accesso ai dati BigQuery:

    resource.type="bigquery_resource" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
    protoPayload.status.message:"Access Denied" OR
    protoPayload.status.message:"Permission denied" OR
    protoPayload.status.code=7

    Sostituisci PROJECT_ID con l'ID progetto.

  4. Nei risultati della query, espandi la voce di log corrispondente all'operazione non riuscita.

  5. Nella sezione protoPayload, espandi l'array authorizationInfo, quindi espandi ogni nodo dell'array authorizationInfo.

    L'array authorizationInfo mostra ogni controllo delle autorizzazioni eseguito durante la chiamata API.

  6. Per visualizzare la causa dell'errore, cerca la voce granted: false. La voce granted: false mostra le seguenti informazioni:

    • permission: la stringa di autorizzazione IAM che è stata controllata. Ad esempio, bigquery.tables.getData.
    • resource: il nome completo della risorsa a cui il principal ha tentato di accedere. Ad esempio, projects/myproject/datasets/mydataset/tables/mytable.
    • principalEmail (se disponibile): indicato in protoPayload.authenticationInfo, è l'entità che ha tentato l'azione.

    La sezione authorizationInfo di protoPayload che mostra l'autorizzazione, la risorsa e principalEmail.

Utilizzare Policy Analyzer per le policy di autorizzazione

Policy Analyzer per i criteri di autorizzazione ti consente di scoprire quali entità IAM hanno un determinato accesso a determinate risorse BigQuery in base ai tuoi criteri di autorizzazione IAM.

Dopo aver raccolto informazioni sull'errore di autorizzazione, puoi utilizzare Policy Analyzer per capire perché l'entità non dispone dell'accesso richiesto. Questo strumento analizza tutte le policy pertinenti, le appartenenze ai gruppi Google e l'ereditarietà dalle risorse padre, come un progetto, una cartella e la tua organizzazione.

Per utilizzare Policy Analyzer per le policy di autorizzazione, crea una query di analisi, specifica un ambito per l'analisi ed esegui la query.

  1. Nella console Google Cloud , vai alla pagina Policy Analyzer.

    Vai a Policy Analyzer

    In alternativa, dal menu di navigazione, scegli IAM e amministrazione > Policy Analyzer.

  2. Fai clic su Crea query personalizzata.

  3. Nella pagina Configura la query, inserisci le informazioni che hai raccolto in precedenza:

    1. Nella sezione Seleziona l'ambito, nel campo Seleziona l'ambito della query, verifica che venga visualizzato il progetto corrente o fai clic su Sfoglia per scegliere un'altra risorsa.

    2. Nella sezione Imposta i parametri della query, scegli Entità per Parametro 1 e inserisci l'email dell'utente, del gruppo o del account di servizio nel campo Entità.

    3. Fai clic su Aggiungi parametro.

    4. Per Parametro 2, scegli Autorizzazione e nel campo Autorizzazione, fai clic su Seleziona, scegli l'autorizzazione BigQuery e poi fai clic su Aggiungi. Ad esempio, seleziona bigquery.tables.getData.

    5. Fai clic su Aggiungi parametro.

    6. Per Parametro 3, scegli Risorsa e nel campo Risorsa, inserisci il nome della risorsa completo. Il nome della risorsa deve includere il prefisso del servizio, come nei seguenti esempi:

      • Progetto BigQuery: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
      • BigQuery dataset: //bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET
      • Tabella BigQuery: //bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
  4. Nel riquadro Query personalizzata, fai clic su Analizza > Esegui query.

  5. Esamina i risultati della query. Il risultato può essere uno dei seguenti:

    • Un elenco vuoto. Nessun risultato conferma che l'entità non dispone dell'autorizzazione richiesta. Devi concedere all'entità un ruolo che fornisca le autorizzazioni corrette.
    • Uno o più risultati. Se lo strumento di analisi trova un criterio di autorizzazione, esiste una qualche forma di accesso. Fai clic su Visualizza associazione in ogni risultato per visualizzare i ruoli che forniscono l'accesso alla risorsa di cui l'entità è membro. Il binding del criterio mostra se l'accesso è concesso tramite l'appartenenza a un gruppo o l'ereditarietà oppure se l'accesso è negato da una condizione IAM o da un criterio di negazione IAM.

Trova il ruolo IAM corretto che concede le autorizzazioni richieste

Dopo aver confermato che l'entità non dispone di un accesso sufficiente, il passaggio successivo consiste nel trovare il ruolo IAM predefinito o personalizzato appropriato che conceda le autorizzazioni richieste. Il ruolo che scegli deve rispettare il principio del privilegio minimo.

Se la tua organizzazione utilizza ruoli personalizzati, puoi trovare il ruolo corretto elencando tutti i ruoli personalizzati creati nel tuo progetto o nella tua organizzazione. Ad esempio, nella console Google Cloud , nella pagina Ruoli, puoi filtrare l'elenco per Tipo:personalizzato per visualizzare solo i ruoli personalizzati.

Per trovare il ruolo IAM predefinito corretto, segui questi passaggi.

  1. Apri la sezione Autorizzazioni BigQuery della pagina Ruoli e autorizzazioni IAM di BigQuery.

  2. Nella barra di ricerca Inserisci un'autorizzazione, inserisci l'autorizzazione recuperata dal messaggio di errore, dalla cronologia dei lavori o dai log di controllo. Ad esempio, bigquery.tables.getData.

    I risultati della ricerca mostrano tutti i ruoli BigQuery predefiniti che concedono l'autorizzazione.

  3. Applica il principio del privilegio minimo: nell'elenco dei ruoli, scegli il ruolo meno permissivo che concede le autorizzazioni richieste. Ad esempio, se hai cercato bigquery.tables.getData per concedere la possibilità di eseguire query sui dati delle tabelle, Visualizzatore dati BigQuery è il ruolo meno permissivo che concede questa autorizzazione.

  4. Concedi all'entità il ruolo appropriato. Per informazioni su come concedere un ruolo IAM a una risorsa BigQuery, consulta Controllare l'accesso alle risorse con IAM.

Passaggi successivi