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:
- 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 diqueue.yaml
e di Cloud Tasks. - 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.
- 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
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 caricarequeue.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 progettoEMAIL
: l'email dell'utente membro
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.Utilizza l'API Cloud Tasks per modificare la configurazione della coda.
Carica
queue.yaml
congcloud
: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.
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
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 progettoEMAIL
: l'email dell'utente membro
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
Come amministratore del progetto, crea l'account di servizio.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
Concedi il ruolo
cloudtasks.queueAdmin
all'account di servizio in modo che possa caricarequeue.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.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.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
Come amministratore del progetto, crea l'account di servizio.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
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.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
Come amministratore del progetto, crea l'account di servizio.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
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.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 codaLOCATION
: la posizione della codaPROJECT_ID
: l'ID del progetto
Passaggi successivi
- Account di servizio
- Informazioni sugli account di servizio
- Gestire l'accesso a progetti, cartelle e organizzazioni
- Creazione e gestione degli account di servizio
- Utilizzare l'impersonificazione degli account di servizio