Configurazione sicura della coda

Questa pagina fornisce suggerimenti per proteggere la creazione e la configurazione delle code. L'importante è limitare i metodi di gestione della coda a un piccolo gruppo di persone o enti. Per le grandi organizzazioni, potrebbe essere necessario utilizzare un account di servizio per eseguire software che imponga una configurazione corretta della coda.

L'idea generale è quella di separare gli utenti e le altre entità in tre categorie:

  1. Amministratori coda: gli utenti di questo gruppo sono autorizzati a chiamare metodi di gestione delle code di Cloud Tasks o per caricare queue.yaml . Questo gruppo è limitato a un insieme di utenti molto piccolo per ridurre il rischio di sovrascrivere la configurazione della coda, in particolare mescolando inavvertitamente i metodi di gestione delle code queue.yaml e Cloud Tasks.
  2. Utenti di Cloud Tasks: gli utenti di questo gruppo hanno l'autorizzazione per eseguire interazioni comuni con Cloud Tasks, ad esempio l'inserimento in coda e l'estrazione dalle code delle attività. Non sono autorizzati a chiamare i metodi di gestione delle code di Cloud Tasks.
  3. Deployment di App Engine: per i progetti che includono app di App Engine, gli utenti in Questo gruppo dispone dell'autorizzazione per eseguire il deployment dell'app. Non sono autorizzati a caricare file queue.yaml o effettuare chiamate API Cloud Tasks, consentendo così gli amministratori della coda per applicare i criteri appropriati.

In questo schema, gli utenti che sono amministratori della coda non devono essere anche lavoratori Cloud Tasks, poiché ciò annullerebbe lo scopo della separazione.

Se il tuo progetto utilizza esclusivamente i metodi di gestione delle code di Cloud Tasks, potrebbe anche essere opportuno che gli amministratori delle code non siano anche responsabili del deployment di App Engine, poiché questo consentirebbe il caricamento di un file queue.yaml errato.

Piccoli progetti e organizzazioni

I piccoli progetti e le piccole organizzazioni possono assegnare ruoli IAM (Identity and Access Management) direttamente agli utenti per inserirli nei gruppi precedenti. Questo ha senso team che preferiscono la semplicità di configurazione o che configurano le code manualmente le modifiche o i deployment delle app di App Engine.

Aggiungi utenti a questi gruppi nel seguente modo:

Amministratore coda

  1. In qualità di amministratore del progetto, concedi il ruolo cloudtasks.queueAdmin agli utenti autorizzati a eseguire chiamate all'API di gestione della coda Cloud Tasks o a caricare file queue.yaml.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/cloudtasks.queueAdmin

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto
    • EMAIL: l'indirizzo email dell'utente membro
  2. In qualità di utente con il ruolo cloudtasks.queueAdmin, seguendo le best practice riportate sopra, scegli uno dei seguenti metodi per modificare la configurazione della coda.

    1. Utilizza l'API Cloud Tasks per modificare la configurazione della coda.

    2. Carica queue.yaml con gcloud:

      gcloud app deploy queue.yaml

Lavoratore Cloud Tasks

Poiché spesso ci sono molti utenti autorizzati a interagire con Cloud Tasks, puoi Assegna i ruoli agli account di servizio anziché singoli utenti. Questo tipo di utilizzo è comune in produzione. Per ulteriori informazioni, consulta Progetti e organizzazioni di grandi dimensioni.

  1. In qualità di amministratore del progetto, concedi i ruoli agli utenti autorizzati a interagire con Cloud Tasks senza modificare la configurazione della coda:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

In qualità di utente con uno o più dei ruoli concessi sopra, puoi interagire con l'API Cloud Tasks.

Deployer App Engine

  1. In qualità di amministratore del progetto, concedi ruoli agli utenti autorizzati a eseguire il deployment di App Engine app, ma a cui non è consentito modificare la configurazione della coda o interagire con le attività:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/storage.admin

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto
    • EMAIL: l'email dell'utente membro
  2. In qualità di utente con i ruoli concessi in precedenza, esegui il deployment di un'app App Engine.

    gcloud app deploy app.yaml

Organizzazioni e progetti di grandi dimensioni

I progetti e le organizzazioni di grandi dimensioni possono utilizzare gli account di servizio per separare doveri e responsabilità. Questo ha senso per i team con problemi dell'infrastruttura per modificare la configurazione delle code e magari anche il deployment le app di App Engine.

Per rispettare il principio del privilegio minimo e semplificare la gestione dell'accesso, queste istruzioni utilizzano l'impersonificazione dell'account di servizio. Per scoprire di più in merito sequenza, vedi Utilizzare la simulazione dell'identità degli account di servizio nella documentazione sull'autenticazione di Google Cloud.

Seguono le istruzioni per la configurazione di questi account di servizio.

Amministratore coda

  1. In qualità di amministratore del progetto, crea l'account di servizio.

    gcloud iam service-accounts create queue-admin \
    --display-name "Queue Admin"
  2. Concedi il ruolo cloudtasks.queueAdmin all'account di servizio in modo che possa caricare i file queue.yaml ed eseguire chiamate all'API di gestione della coda Cloud Tasks.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.queueAdmin

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  3. Consenti selettivamente la rappresentazione del ruolo "Amministratore code" all'account di servizio è stato creato.

    Di solito dovrebbe trattarsi di un piccolo gruppo di entità che agiscono come coda Google Workspace for Education. Concedi a queste entità iam.serviceAccountTokenCreator nel ruolo "Amministratore code" che hai creato. Per scoprire come, consulta Concedere o revocare un singolo ruolo nella documentazione di IAM.

  4. Seguendo le best practice descritte in Utilizzare Gestione delle code o queue.yaml, scegli uno dei seguenti metodi per modificare la configurazione della coda:

    • Utilizza Cloud Tasks per modificare la configurazione della coda.

    • Carica queue.yaml con gcloud CLI

Worker Cloud Tasks

  1. In qualità di amministratore del progetto, crea l'account di servizio.

    gcloud iam service-accounts create cloud-tasks-worker \
    --display-name "Cloud Tasks Worker"
  2. Concedi ruoli all'account di servizio in modo che possa interagire con Cloud Tasks senza modificare la configurazione della coda.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  3. Consenti in modo selettivo la simulazione dell'identità dell'account di servizio "Cloud Tasks Worker" che hai creato.

    Per i principali che interagiscono con Cloud Tasks, concedi il ruolo iam.serviceAccountTokenCreator all'account di servizio "Cloud Tasks Worker" che hai creato. Per scoprire come, consulta Concedere o revocare un singolo ruolo nella documentazione di IAM.

Deployer App Engine

  1. In qualità di amministratore del progetto, crea l'account di servizio.

    gcloud iam service-accounts create app-engine-deployer \
    --display-name "App Engine Deployer"
  2. Concedi ruoli all'account di servizio in modo che possa eseguire il deployment delle app di App Engine, non queue.yaml.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/storage.admin

    Sostituisci PROJECT_ID con l'ID del tuo progetto.

  3. Consenti selettivamente la rappresentazione del " Deployer App Engine" account di servizio che hai creato.

    Per le entità che eseguono il deployment dei servizi App Engine, concedi la classe iam.serviceAccountTokenCreator nel ruolo "Deployer App Engine" che hai creato. Per scoprire come, consulta Concedere o revocare un singolo ruolo nella documentazione di IAM.

Limitazione dell'accesso a singole code

Se un progetto contiene più code e vuoi limitare l'accesso a singole code, puoi utilizzare i criteri IAM a livello di coda anziché a livello di progetto. Per limitare l'accesso per coda, utilizza gcloud tasks queues add-iam-policy-binding . Ad esempio:

  gcloud tasks queues add-iam-policy-binding QUEUE_NAME --location=LOCATION \
  --member=serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer

Sostituisci quanto segue:

  • QUEUE_NAME: il nome della coda
  • LOCATION: posizione della coda
  • PROJECT_ID: l'ID del progetto

Passaggi successivi