La modalità di simulazione rigorosa attiva 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 di release.
Questo controllo di sicurezza aggiuntivo richiede che l'utente che esegue queste azioni
disponga dell'autorizzazione iam.serviceAccounts.actAs per l'account di servizio effettivo,
ovvero l'account di servizio le cui credenziali vengono utilizzate per eseguire i workflow.
Per saperne di più, consulta
Collegare service account alle risorse.
Per attivare la modalità Agisci come, segui questi passaggi:
- Quando crei un repository.
- Quando aggiorni un repository esistente con il flag del repository
strict_act_as_checks.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare le attività descritte in questo documento, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Service Account User (
roles/iam.serviceAccountUser) sul account di servizio personalizzato -
Visualizza i log in Logging:
Visualizzatore log (
roles/logging.viewer) sul progetto -
Concedi ruoli IAM a utenti o service account:
Amministratore service account (
roles/iam.serviceAccountAdmin) nel 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.
Verifica le autorizzazioni act-as per il account di servizio effettivo
Per garantire che i flussi di lavoro Dataform vengano eseguiti in modo sicuro e senza interruzioni, è importante verificare le autorizzazioni di tipo "Agisci come" sugli account di servizio utilizzati. Questa sezione spiega come identificare l'account di servizio effettivo per le tue risorse, utilizzare Cloud Logging per verificare la presenza di problemi di autorizzazione e quindi risolvere eventuali problemi riscontrati.
Determinare il account di servizio effettivo
Puoi determinare il account di servizio effettivo che esegue i flussi di lavoro in base al tipo di risorsa e alle seguenti condizioni:
| Tipo di risorsa | Service account effettivo |
|---|---|
| Repository | Per i nuovi repository, viene utilizzato il account di servizio personalizzato selezionato quando crei un repository. Questo account di servizio è elencato nel campo Per i repository esistenti, può trattarsi di un account di servizio personalizzato (consigliato) o dell'agente di servizio Dataform. |
| Configurazione del workflow | Per le nuove configurazioni del flusso di lavoro, viene utilizzato il account di servizio personalizzato selezionato quando crei una configurazione del flusso di lavoro. Se non è selezionato alcun account di servizio, viene utilizzato il account di servizio del repository. Per le configurazioni del flusso di lavoro esistenti, può trattarsi di un account di servizio personalizzato (consigliato) o dell'agente di servizio Dataform del repository. |
| Chiamata workflow | Se il risultato della compilazione è una risorsa Se crei una chiamata del flusso di lavoro da un risultato di compilazione, viene utilizzato l'account di servizio elencato nel campo In caso contrario, il valore predefinito è il account di servizio configurato a livello di repository. |
Controllare i problemi di autorizzazione in Cloud Logging
Per migliorare la sicurezza, Dataform controlla se l'autorizzazione
iam.serviceAccounts.actAs non è presente nei service account utilizzati
dalle risorse Dataform.
I risultati di questi controlli, inclusi eventuali problemi di autorizzazione, vengono
registrati in Cloud Logging. Devi esaminare regolarmente questi log per
identificare e concedere le autorizzazioni iam.serviceAccounts.actAs mancanti. Il controllo di questi log garantisce che i flussi di lavoro e le configurazioni di Dataform continuino a funzionare senza interruzioni.
Visualizza i log in Cloud Logging
Nella console Google Cloud , vai alla pagina Esplora log.
Seleziona il progetto Google Cloud in cui vuoi controllare i log.
Utilizza l'editor di query per filtrare i log di Dataform
actAscon le seguenti opzioni:Per elencare solo i controlli
actAsnon riusciti 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 il tuo ID progettoGoogle Cloud .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 che l'entità chiamante ha tentato di utilizzare. 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 completi delle risorse Google Cloud delle entità Dataform coinvolte. Questi nomi seguono le
strutture standard mostrate nel seguente elenco, consentendoti di identificare con precisione le risorse.
create_workflow_invocation_context: presente quando il metodo API èCreateWorkflowInvocation.workflowInvocation: il nome della risorsa dell'invocazione del flusso di lavoro.- 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 l'invocazione.- 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 di rilascio.- 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 flusso di lavoro.- 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 tuo progettoGoogle Cloud .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 di compilazione di Dataform.RELEASE_CONFIG_ID: l'ID definito dall'utente della configurazione 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, segui questi passaggi:
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.Conferma che l'entità chiamante deve disporre dell'autorizzazione per agire come account di servizio. La concessione di questa autorizzazione consente al chiamante di utilizzare le autorizzazioni detenute dalaccount di serviziot.
Se l'accesso è intenzionale, concedi il ruolo Utente service account (
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 service account
(roles/iam.serviceAccountUser) contiene l'autorizzazione iam.serviceAccounts.actAs, necessaria per la modalità act-as rigorosa. Quando utilizzi l'API Dataform, devi disporre del ruolo Utente service account concesso per il account di servizio effettivo in base al metodo projects.locations.repositories che stai chiamando:
createopatch- Se la proprietà
Repository.ServiceAccountè impostata, devi disporre del ruolo Utente account di servizio concesso per quella proprietà. - Se chiami il metodo
patch, devi disporre del ruolo Utente service account concesso per tutti i service account effettivi in tutte le configurazioni del flusso di lavoro nel repository.
- Se la proprietà
workflowConfigs.createoworkflowConfigs.patch- Devi disporre del ruolo Utente service account per il account di servizio effettivo utilizzato nella configurazione del workflow.
releaseConfigs.patch- Devi disporre del ruolo Utente account di servizio per tutti gli account di servizio effettivi utilizzati nelle configurazioni del flusso di lavoro che utilizzano questa configurazione di rilascio.
workflowInvocations.create- Devi disporre del ruolo Utente account di servizio per l'account di servizio effettivo utilizzato nell'invocazione del flusso di lavoro.
Per concedere il ruolo Utente service account a un account di servizio personalizzato, segui questi passaggi:
Nella console Google Cloud , vai a IAM > Service accounts.
Seleziona un progetto.
Nella pagina Service account per il progetto "PROJECT_NAME", seleziona il account di servizio personalizzato.
Vai a Entità con accesso e poi fai clic su Concedi accesso.
Nel campo Nuove entità, inserisci l'ID service agent Dataform predefinito.
L'ID service agent Dataform predefinito ha il seguente formato:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comSostituisci
PROJECT_NUMBERcon il numero del tuo progettoGoogle Cloud .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 Ruoli richiesti per creare una configurazione del workflow e Ruoli richiesti per creare una configurazione della release.
Effetti della modalità Agisci come in esecuzione e rilasci automatici
Quando la modalità actAs rigorosa è abilitata, influisce sulle release automatiche dei repository e sulle esecuzioni automatiche dei workflow nel seguente modo:
Per i repository non connessi a repository di terze parti:
- Non puoi impostare una
pianificazione Cron
per le release automatiche nelle configurazioni di rilascio. Questa operazione viene applicata per impedire
la distribuzione automatica delle modifiche al codice apportate da un utente che potrebbe non disporre delle autorizzazioni
iam.serviceAccounts.actAsnecessarie per i service account downstream. - Le esecuzioni del workflow pianificate che utilizzano una pianificazione cron nelle configurazioni del workflow rimangono attive. Affinché queste esecuzioni automatizzate 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 flusso di lavoro.
Per i repository collegati a repository di terze parti:
- Sono consentite le release pianificate e le esecuzioni del workflow pianificate.
- Per abilitare un rilascio automatico da una configurazione di rilascio o un'esecuzione automatica da una configurazione del flusso di lavoro, devi concedere all'agente di servizio Dataform predefinito l'autorizzazione
iam.serviceAccounts.actAssul service account effettivo pertinente:- Per una configurazione di rilascio automatico, concedi l'autorizzazione agli account di servizio effettivi di tutte le configurazioni del flusso di lavoro attivate da questa configurazione di rilascio.
- Per una configurazione automatica del flusso di lavoro, concedi l'autorizzazione per il account di servizio effettivo utilizzato da quella configurazione del flusso di lavoro.
Passaggi successivi
- Per scoprire come creare un repository, consulta Crea un repository.
- Per scoprire di più su come funziona Dataform con BigQuery, consulta la panoramica dei workflow.
- Per scoprire come creare una configurazione del flusso di lavoro, consulta Pianificare le esecuzioni.
- Per scoprire come creare una configurazione della release, consulta Configurare le compilazioni.