Configurazione delle code sicure

Questa pagina fornisce suggerimenti per proteggere la creazione e la configurazione delle code. La chiave è limitare i metodi di gestione delle code a un piccolo gruppo di persone o entità. Per le organizzazioni di grandi dimensioni, potrebbe essere necessario utilizzare un account di servizio per eseguire software che applichino una corretta configurazione delle code.

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

  1. Amministratori di code: gli utenti di questo gruppo sono autorizzati a chiamare i metodi di gestione delle code di Cloud Tasks o a caricare queue.yaml file. Questo gruppo è limitato a un insieme di utenti molto piccolo in modo da ridurre il rischio di alterazione della configurazione delle code, in particolare mescolando inavvertitamente i metodi di gestione delle code di queue.yaml e di Cloud Tasks.
  2. Worker Cloud Tasks: gli utenti di questo gruppo sono autorizzati a eseguire interazioni comuni con Cloud Tasks, come l'inserimento in coda e l'annullamento della coda delle attività. Non sono autorizzati a chiamare i metodi di gestione delle code di Cloud Tasks.
  3. Deployer App Engine: per i progetti che dispongono di app App Engine, gli utenti di questo gruppo sono autorizzati a eseguire il deployment dell'app. Non sono autorizzati a caricare file queue.yaml o a effettuare chiamate API Cloud Tasks, consentendo così agli amministratori delle code di applicare i criteri appropriati.

In questo schema, gli utenti che sono amministratori di code non devono essere anche worker Cloud Tasks, poiché questo annullerebbe lo scopo della separazione.

Se il tuo progetto utilizza esclusivamente i metodi di gestione delle code di Cloud Tasks, potrebbe essere logico che gli amministratori delle code non debbano essere anche deployment di App Engine, poiché questo renderebbe possibile il caricamento di un file queue.yaml errato.

Piccoli progetti e organizzazioni

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

Aggiungi utenti a questi gruppi nel seguente modo:

Amministratore code

  1. In qualità di amministratore del progetto, concedi il ruolo cloudtasks.queueAdmin agli utenti autorizzati a effettuare chiamate API per la gestione delle code di Cloud Tasks o caricare queue.yaml file.

    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'email dell'utente membro
  2. In qualità di utente con il ruolo cloudtasks.queueAdmin, seguendo le best practice precedenti, 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
      

Worker Cloud Tasks

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

  1. Come amministratore del progetto, concedi i ruoli agli utenti autorizzati a interagire con Cloud Tasks, ma non a 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 progetto.

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

Deployer App Engine

  1. In qualità di amministratore del progetto, concedi i ruoli agli utenti autorizzati a eseguire il deployment delle app di App Engine, 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 sopra, esegui il deployment di un'app App Engine.

    gcloud app deploy app.yaml
    

Organizzazioni e progetti di grandi dimensioni

Le organizzazioni e i progetti di grandi dimensioni possono utilizzare gli account di servizio per separare compiti e responsabilità. Questo ha senso per i team con un'infrastruttura complessa per modificare la configurazione delle code e forse anche per eseguire il deployment delle app di App Engine.

Per seguire il principio del privilegio minimo e semplificare la gestione degli accessi, queste istruzioni utilizzano l'impersonificazione degli account di servizio. Per ulteriori informazioni su questo pattern, consulta Utilizzare l'impersonificazione degli account di servizio nella documentazione sull'autenticazione di Google Cloud.

Di seguito sono riportate le istruzioni per configurare questi account di servizio.

Amministratore code

  1. Come 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 queue.yaml file ed effettuare chiamate API per la gestione delle code di 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 progetto.

  3. Consenti selettivamente la rappresentazione dell'account di servizio "Amministratore code" che hai creato.

    In genere dovrebbe trattarsi di un piccolo gruppo di entità che agiscono come amministratori delle code. Concedi a queste entità il ruolo iam.serviceAccountTokenCreator per l'account di servizio "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 la gestione delle code oQueue.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. Come amministratore del progetto, crea l'account di servizio.

    gcloud iam service-accounts create cloud-tasks-worker \
    --display-name "Cloud Tasks Worker"
    
  2. Concedi i ruoli all'account di servizio in modo che possa interagire con Cloud Tasks, ma non 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 progetto.

  3. Consenti selettivamente la rappresentazione dell'account di servizio "Worker Cloud Tasks" che hai creato.

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

Deployer App Engine

  1. Come 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, ma non di 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 progetto.

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

    Per le entità che eseguono il deployment dei servizi App Engine, concedi il ruolo iam.serviceAccountTokenCreator all'account di servizio "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 in un progetto sono presenti 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 in base alla coda, utilizza il comando 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: la posizione della coda
  • PROJECT_ID: l'ID del progetto

Passaggi successivi