La modalità act-as rigorosa abilita un controllo di sicurezza aggiuntivo per le seguenti azioni utente in Dataform:
- Creazione o aggiornamento di un repository.
- Creazione o aggiornamento di una configurazione del workflow.
- Creazione di una chiamata del workflow.
- Aggiornamento di una configurazione della release.
Questo controllo di sicurezza aggiuntivo richiede che l'utente che esegue queste azioni disponga dell'autorizzazione iam.serviceAccounts.actAs per il account di servizio effettivo, ovvero il account di servizio le cui credenziali vengono utilizzate per eseguire i workflow.
Per saperne di più, consulta
Collegare service account alle risorse.
La modalità act-as rigorosa viene applicata a tutti i repository.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare le attività descritte in questo documento, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Utente account di servizio (
roles/iam.serviceAccountUser) sul service account personalizzato -
Visualizza i log in Logging:
Visualizzatore log (
roles/logging.viewer) sul progetto -
Concedi ruoli IAM a utenti o service account:
Amministratore account di servizio (
roles/iam.serviceAccountAdmin) sul progetto
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Verificare le autorizzazioni act-as per il account di servizio effettivo
Per garantire che i workflow Dataform vengano eseguiti in modo sicuro e senza interruzioni, è importante verificare le autorizzazioni act-as sui service account utilizzati. Questa sezione spiega come identificare il service account effettivo per le risorse, utilizzare Cloud Logging per verificare la presenza di problemi di autorizzazione e risolvere eventuali problemi riscontrati.
Determinare il account di servizio effettivo
Puoi determinare il account di servizio effettivo che esegue i workflow in base al tipo di risorsa e alle seguenti condizioni:
| Tipo di risorsa | Account di servizio effettivo |
|---|---|
| Repository | Il account di servizio personalizzato configurato per il repository. È necessario un account di servizio personalizzato per tutti i repository. Questo account di servizio è elencato nel campo |
| Configurazione del workflow | Per le nuove configurazioni del workflow, viene utilizzato il account di servizio personalizzato selezionato quando crei una configurazione del workflow. Se non è selezionato alcun account di servizio, viene utilizzato il account di servizio del repository. |
| Chiamata workflow | Se il risultato della compilazione è una risorsa Se crei una chiamata del workflow da un risultato della compilazione, viene utilizzato il account di servizio elencato nel campo In caso contrario, il valore predefinito è il account di servizio configurato a livello di repository. |
Verificare la presenza di problemi di autorizzazione in Cloud Logging
Per migliorare la sicurezza, Dataform verifica se manca l'autorizzazione iam.serviceAccounts.actAs sui service account utilizzati dalle risorse Dataform.
I risultati di questi controlli, inclusi eventuali problemi di autorizzazione, vengono registrati in Cloud Logging. Dovresti esaminare regolarmente questi log per identificare e concedere eventuali autorizzazioni iam.serviceAccounts.actAs mancanti. Il controllo di questi log garantisce che i workflow e le configurazioni Dataform continuino a funzionare senza interruzioni.
Visualizzare i log in Cloud Logging
Nella Google Cloud console, vai alla pagina Esplora log.
Seleziona il Google Cloud progetto in cui vuoi controllare i log.
Utilizza l'editor di query per filtrare i log
actAsdi Dataform con le seguenti opzioni:Per elencare solo i controlli
actAsnon riusciti e che richiedono un'azione, utilizza la seguente query:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = falsePer elencare tutti i controlli
actAs, utilizza la seguente query:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
Sostituisci
PROJECT_IDcon l' Google Cloud ID progetto.Fai clic su Esegui query.
Interpretare le voci di log
Espandi una voce di log nei risultati della query per visualizzare i seguenti campi jsonPayload:
| Campo | Tipo | Descrizione |
|---|---|---|
dryRunResult |
Booleano | true: il controllo delle autorizzazioni è stato superato.false: il controllo non è riuscito. L'entità chiamante non dispone dell'autorizzazione iam.serviceAccounts.actAs per il account di servizio. |
caller |
Stringa | L'indirizzo email dell'entità (utente o account di servizio) che ha avviato la chiamata API. |
serviceAccount |
Stringa | Il account di servizio per cui l'entità chiamante ha tentato di agire. Questo campo è in genere presente quando il campo dryRunResult è false. |
apiMethod |
Stringa | Il metodo dell'API Dataform che ha attivato il controllo, ad esempio CreateWorkflowInvocation o UpdateRepository. |
*_context |
Oggetto | Un oggetto contenente i nomi delle risorse pertinenti al metodo API chiamato. Per saperne di più, consulta Oggetti di contesto. |
Oggetti di contesto
La voce di log include un oggetto di contesto all'interno dei campi jsonPayload. I
campi di questo oggetto contengono i nomi delle risorse completi Google Cloud delle entità Dataform coinvolte. Questi nomi seguono le strutture standard mostrate nell'elenco seguente, che ti consentono di identificare con precisione le risorse.
create_workflow_invocation_context: presente quando il metodo API èCreateWorkflowInvocation.workflowInvocation: il nome della risorsa della chiamata del workflow.- Il formato del nome della risorsa è il seguente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
- Il formato del nome della risorsa è il seguente:
compilationResultoworkflowConfig: il nome della risorsa dell'origine utilizzata per la chiamata.- Il formato del nome della risorsa per
compilationResultè il seguente:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID. - Il formato del nome della risorsa per
workflowConfigè il seguente:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Il formato del nome della risorsa per
create_repository_contextoupdate_repository_context: presente quando il metodo API èCreateRepositoryoUpdateRepository.repository: il nome della risorsa del repository Dataform.- Il formato del nome della risorsa è il seguente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- Il formato del nome della risorsa è il seguente:
update_release_config_context: presente quando il metodo API èUpdateReleaseConfig.releaseConfig: il nome della risorsa della configurazione della release.- Il formato del nome della risorsa è il seguente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
- Il formato del nome della risorsa è il seguente:
create_workflow_config_contextoupdate_workflow_config_context: presente quando il metodo API èCreateWorkflowConfigoUpdateWorkflowConfig.workflowConfig: il nome della risorsa della configurazione del workflow.- Il formato del nome della risorsa è il seguente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Il formato del nome della risorsa è il seguente:
Per confrontare i formati documentati con la voce di logging, sostituisci quanto segue:
PROJECT_ID: l'identificatore univoco del Google Cloud progetto.LOCATION_ID: la regione in cui si trova il repository Dataform.REPOSITORY_ID: l'ID definito dall'utente del repository Dataform. Questo è il nome assegnato al repository al momento della creazione.COMPILATION_RESULT_ID: l'identificatore univoco generato dal sistema per un risultato della compilazione Dataform.RELEASE_CONFIG_ID: l'ID definito dall'utente della configurazione della release Dataform.WORKFLOW_CONFIG_ID: l'ID definito dall'utente della configurazione del workflow Dataform.
Risolvere i problemi di autorizzazione
Se trovi voci di log in cui il campo dryRunResult è false:
Nei dettagli di
jsonPayload, prendi nota dell'indirizzo email nel campocallerper identificare l'entità.Prendi nota dell'indirizzo email nel campo
serviceAccountper identificare il account di servizio.Verifica che l'entità chiamante debba avere l'autorizzazione ad agire come il account di servizio. La concessione di questa autorizzazione consente al chiamante di utilizzare le autorizzazioni detenute dal account di servizio.
Se l'accesso è previsto, concedi il ruolo Utente account di servizio (
roles/iam.serviceAccountUser) all'entità chiamante nel service account di destinazione. Per saperne di più, consulta Concedere i ruoli IAM richiesti.
Dopo aver concesso il ruolo, i log futuri per questa combinazione di chiamante e account di servizio dovrebbero mostrare dryRunResult: true.
Concedere i ruoli IAM richiesti
Il ruolo Utente account di servizio
(roles/iam.serviceAccountUser) contiene l'iam.serviceAccounts.actAs
autorizzazione, necessaria per la modalità act-as rigorosa. Quando utilizzi l'
API Dataform, devi disporre del ruolo Utente account di servizio concesso
per il service account effettivo in base al
projects.locations.repositories metodo
che stai chiamando:
createopatch- Se la proprietà
Repository.ServiceAccountè impostata, devi disporre del ruolo Utente account di servizio concesso per questa proprietà. - Se stai chiamando il metodo
patch, devi disporre del ruolo Utente account di servizio concesso per tutti i service account effettivi in tutte le configurazioni del workflow nel repository.
- Se la proprietà
workflowConfigs.createoworkflowConfigs.patch- Devi disporre del ruolo Utente account di servizio concesso per il service account effettivo utilizzato nella configurazione del workflow.
releaseConfigs.patch- Devi disporre del ruolo Utente account di servizio concesso per tutti i service account effettivi utilizzati nelle configurazioni del workflow che utilizzano questa configurazione della release.
workflowInvocations.create- Devi disporre del ruolo Utente account di servizio concesso per il service account effettivo utilizzato nella chiamata del workflow.
Per concedere il ruolo Utente account di servizio a un service account personalizzato:
Nella Google Cloud console, vai a IAM > Service account.
Seleziona un progetto.
Nella pagina Service account per il progetto "PROJECT_NAME", seleziona il account di servizio personalizzato.
Vai a Entità con accesso e fai clic su Concedi l'accesso.
Nel campo Nuove entità, inserisci l'ID dell'agente di servizio Dataform predefinito.
L'ID dell'agente di servizio Dataform predefinito ha il seguente formato:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comSostituisci
PROJECT_NUMBERcon il Google Cloud numero del progetto.Nell'elenco Seleziona un ruolo, seleziona il ruolo Utente account di servizio.
Fai clic su Aggiungi un altro ruolo e seleziona il ruolo Creatore token account di servizio.
Fai clic su Salva.
Per saperne di più, consulta i ruoli richiesti per la creazione di una configurazione del workflow e i ruoli richiesti per la creazione di una configurazione della release
Effetti della modalità act-as rigorosa su release ed esecuzioni automatiche
La modalità act-as rigorosa ha il seguente impatto sulle release automatiche dei repository e sulle esecuzioni automatiche dei workflow.
Per i repository non collegati a repository di terze parti:
- Non puoi impostare una
pianificazione Cron
per le release automatiche nelle configurazioni della release. Questa impostazione viene applicata per impedire il deployment automatico delle modifiche al codice apportate da un utente che potrebbe non disporre delle autorizzazioni
iam.serviceAccounts.actAsnecessarie sui service account downstream. - Le esecuzioni dei workflow pianificate utilizzando una pianificazione Cron nelle configurazioni del workflow rimangono attive. Affinché queste esecuzioni automatiche vadano a buon fine, devi concedere all'agente di servizio Dataform predefinito
l'autorizzazione
iam.serviceAccounts.actAsper il service account effettivo specificato nella configurazione del workflow.
Per i repository collegati a repository di terze parti:
- Sono consentite le release pianificate e le esecuzioni dei workflow pianificate.
- Per abilitare una release automatica da una configurazione della release o un'esecuzione automatica da una configurazione del workflow, devi concedere all'agente di servizio Dataform predefinito l'autorizzazione
iam.serviceAccounts.actAsper il service account effettivo pertinente: - Per una configurazione della release automatica, concedi l'autorizzazione per i service account effettivi di tutte le configurazioni del workflow attivate da questa configurazione della release.
- Per una configurazione del workflow automatica, concedi l'autorizzazione per il account di servizio effettivo utilizzato da questa configurazione del workflow.
Passaggi successivi
- Per scoprire come creare un repository, consulta Creare un repository.
- Per saperne di più su come Dataform funziona con BigQuery, consulta Panoramica sui workflow.
- Per scoprire come creare una configurazione del workflow, consulta Pianificare le esecuzioni.
- Per scoprire come creare una configurazione della release, consulta Configurare le compilazioni.