Questa pagina descrive le autorizzazioni per controllare l'accesso a Container Registry.
Dopo aver configurato le autorizzazioni, puoi configurare l'autenticazione per i client Docker che utilizzi per eseguire il push e il pull delle immagini.
Se utilizzi Artifact Analysis per lavorare con i metadati dei container, ad esempio le vulnerabilità trovate nelle immagini, consulta la documentazione di Artifact Analysis per informazioni su come concedere l'accesso per visualizzare o gestire i metadati.
Prima di iniziare
Verifica di disporre delle autorizzazioni per gestire gli utenti. Devi disporre delle autorizzazioni in uno dei seguenti ruoli:
- Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin)
- Amministratore sicurezza (roles/iam.securityAdmin)
In alternativa alla concessione di questi ruoli, puoi utilizzare un ruolo personalizzato o un ruolo predefinito con le stesse autorizzazioni.
Autorizzazioni e ruoli
Tutti gli utenti, i service account e le altre identità che interagiscono con Container Registry devono disporre delle autorizzazioni Identity and Access Management (IAM) appropriate per Cloud Storage.
- I serviziGoogle Cloud che in genere accedono a Container Registry sono configurati con autorizzazioni predefinite per i registri nello stesso progettoGoogle Cloud . Se le autorizzazioni predefinite non soddisfano le tue esigenze, devi configurare le autorizzazioni appropriate.
- Per le altre identità, devi configurare le autorizzazioni richieste.
Controlli l'accesso agli host Container Registry con le autorizzazioni Cloud Storage. La tabella seguente elenca i ruoli Cloud Storage che dispongono delle autorizzazioni richieste da Container Registry.
Per visualizzare le immagini di Container Registry utilizzando la console Google Cloud , sono necessarie alcune autorizzazioni aggiuntive. Consulta Autorizzazioni comuni richieste per l'utilizzo della console Google Cloud.
Accesso richiesto | Ruolo | Dove concedere le autorizzazioni |
---|---|---|
Estrai immagini (sola lettura) da un registro esistente | Storage Object Viewer (roles/storage.objectViewer) | Concedi il ruolo nel bucket di archiviazione del registro. |
Esegui il push (scrittura) delle immagini e il pull (lettura) delle immagini da un host di registro esistente in un progetto | Storage Legacy Bucket Writer (roles/storage.legacyBucketWriter) | Concedi il ruolo nel bucket di archiviazione del registro. Questa autorizzazione è disponibile solo a livello di bucket, non puoi concederla a livello di progetto. |
Aggiungi host di registri ai progetti Google Cloud e crea i bucket di archiviazione associati. | Amministratore spazio di archiviazione (roles/storage.admin) | Concedi il ruolo a livello di progetto |
Il push delle immagini richiede le autorizzazioni di lettura e scrittura degli oggetti, nonché l'autorizzazione storage.buckets.get
. Il ruolo Writer bucket legacy Storage
include le autorizzazioni richieste in un unico ruolo Cloud Storage, ma
non concede il controllo completo dei bucket e degli oggetti di archiviazione.
Il ruolo Amministratore Storage concede il controllo completo su bucket e oggetti di archiviazione. Se concedi questa autorizzazione a livello di progetto, l'entità ha accesso a tutti i bucket di archiviazione nel progetto, inclusi quelli non utilizzati da Container Registry. Valuta attentamente quali entità richiedono questo ruolo.
- Per impostazione predefinita, il account di servizio Cloud Build dispone delle autorizzazioni nel ruolo Amministratore Storage. Questo account di servizio può quindi aggiungere registri al progetto principale con il primo push ed eseguire il push delle immagini nei registri esistenti nel progetto principale.
- Se utilizzi Docker o altri strumenti per creare e inviare immagini a un registro, valuta la possibilità di aggiungere registri al tuo progetto utilizzando un account con il ruolo Amministratore Storage più permissivo, quindi concedi i ruoli Writer bucket legacy Storage o Visualizzatore oggetti Storage ad altri account che devono inviare o estrarre immagini.
Per ulteriori informazioni su ruoli e autorizzazioni di Cloud Storage, consulta la documentazione di Cloud Storage.
Concedi autorizzazioni IAM
Container Registry utilizza i bucket Cloud Storage come spazio di archiviazione sottostante per le immagini container. Controlli l'accesso alle tue immagini concedendo le autorizzazioni al bucket per un registro.
Il primo push di un'immagine a un nome host aggiunge l'host del registro e il relativo bucket di archiviazione a un progetto. Ad esempio, il primo push a gcr.io/my-project
aggiunge l'host del registro gcr.io
al progetto con
l'ID progetto
my-project
e crea un bucket di archiviazione per il registro. Il nome del bucket ha
uno dei seguenti formati:
artifacts.PROJECT-ID.appspot.com
per le immagini archiviate sull'hostgcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
per le immagini archiviate su altri host di registro
Per eseguire correttamente il primo push dell'immagine, l'account che esegue il push deve disporre delle autorizzazioni del ruolo Amministratore Storage.
Dopo il push iniziale dell'immagine a un host del registro, concedi le autorizzazioni sul bucket di archiviazione del registro per controllare l'accesso alle immagini nel registro:
- Storage Legacy Bucket Writer per il push e il pull
- Storage Object Viewer per il pull
Puoi concedere l'autorizzazione per un bucket utilizzando Google Cloud console o Google Cloud CLI.
Limitazioni e restrizioni
Puoi concedere autorizzazioni solo a livello di bucket di archiviazione per gli host Container Registry.
- Container Registry ignora le autorizzazioni impostate sui singoli oggetti all'interno di un bucket Cloud Storage.
- Non puoi concedere autorizzazioni per i repository all'interno di un registro. Se hai bisogno di controllo dell'accesso più granulare, Artifact Registry fornisce un controllo dell'accesso a livello di repository e potrebbe essere più adatto alle tue esigenze.
- Se abiliti l'accesso uniforme a livello di bucket per qualsiasi bucket di archiviazione Container Registry, devi concedere esplicitamente le autorizzazioni a tutti gli utenti e i service account che accedono ai tuoi registri. In questo caso, i ruoli Proprietario ed Editor da soli potrebbero non concedere le autorizzazioni richieste.
Concedi le autorizzazioni
Se l'host del registro non esiste ancora nel progetto, un account con autorizzazioni nel ruolo Amministratore Storage deve eseguire il push della prima immagine nel registro. In questo modo viene creato il bucket di archiviazione per l'host del registro.
Cloud Build dispone delle autorizzazioni necessarie per eseguire il push iniziale dell'immagine all'interno dello stesso progetto. Se esegui il push delle immagini con un altro strumento, verifica le autorizzazioni per l' Google Cloud account che utilizzi per l'autenticazione con Container Registry.
Per saperne di più sul push dell'immagine iniziale con Docker, vedi Aggiungere un registro.
Nel progetto con Container Registry, concedi le autorizzazioni appropriate sul bucket Cloud Storage utilizzato dall'host del registro.
Console
- Vai alla pagina Cloud Storage nella Google Cloud console.
Fai clic sul link
artifacts.PROJECT-ID.appspot.com
oSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
per il bucket.Sostituisci PROJECT-ID con l' Google Cloud ID progetto del progetto che ospita Container Registry e STORAGE-REGION con la multiregione (
asia
,eu
ous
) del registro che ospita l'immagine.Seleziona la scheda Autorizzazioni.
Fai clic su Aggiungi.
Nel campo Entità, inserisci gli indirizzi email degli account che richiedono l'accesso, separati da virgole. Questo indirizzo email può essere uno dei seguenti:
- Un Account Google (ad esempio,
someone@example.com
) - Un gruppo Google (ad esempio,
my-developer-team@googlegroups.com
) Un service account IAM.
Consulta l'elenco dei Google Cloud servizi che in genere accedono ai registri per trovare l'indirizzo email deaccount di serviziont associato. Se il servizio viene eseguito in un progetto diverso da Container Registry, assicurati di utilizzare l'indirizzo email del account di servizio nell'altro progetto.
- Un Account Google (ad esempio,
Nel menu a discesa Seleziona un ruolo, seleziona la categoria Cloud Storage e poi l'autorizzazione appropriata.
- Visualizzatore oggetti Storage per eseguire il pull solo delle immagini
- Writer bucket legacy Storage per eseguire il push e il pull delle immagini
Fai clic su Aggiungi.
gcloud
Esegui questo comando per elencare i bucket nel progetto:
gcloud storage ls
La risposta è simile al seguente esempio:
gs://[BUCKET_NAME1]/ gs://[BUCKET_NAME2]/ gs://[BUCKET_NAME3]/ ...
Trova il bucket per l'host del registro nell'elenco dei bucket restituito. Il bucket che archivia le tue immagini ha il nome BUCKET-NAME in uno dei seguenti formati:
artifacts.PROJECT-ID.appspot.com
per le immagini archiviate sull'hostgcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
per le immagini archiviate su altri host di registro
Dove
- PROJECT-ID è il tuo Google Cloud ID progetto.
- STORAGE-REGION è la posizione del bucket di archiviazione:
us
per i registry nell'hostus.gcr.io
eu
per i registry nell'hosteu.gcr.io
asia
per i registry nell'hostasia.gcr.io
Esegui questo comando nella finestra della shell o del terminale:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=TYPE:EMAIL-ADDRESS \ --role=ROLE
Dove
- BUCKET_NAME è il nome del bucket Cloud Storage nel formato
artifacts.PROJECT-ID.appspot.com
oSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
- TYPE può essere uno dei seguenti:
serviceAccount
, se EMAIL-ADDRESS specifica un account di servizio.user
, se EMAIL-ADDRESS è un Account Google.group
, se EMAIL-ADDRESS è un gruppo Google.
EMAIL-ADDRESS può essere uno dei seguenti:
- Un Account Google (ad esempio,
someone@example.com
) - Un gruppo Google (ad esempio,
my-developer-team@googlegroups.com
) Un service account IAM.
Consulta l'elenco dei Google Cloud servizi che in genere accedono ai registri per trovare l'indirizzo email deaccount di serviziont associato. Se il servizio viene eseguito in un progetto diverso da Container Registry, assicurati di utilizzare l'indirizzo email del account di servizio nell'altro progetto.
- Un Account Google (ad esempio,
ROLE è il ruolo Cloud Storage che vuoi concedere.
objectViewer
per estrarre le immaginilegacyBucketWriter
push e pull delle immagini
- BUCKET_NAME è il nome del bucket Cloud Storage nel formato
Ad esempio, questo comando concede al account di servizio
my-account@my-project.iam.gserviceaccount.com
le autorizzazioni per inserire ed estrarre immagini nel bucketmy-example-bucket
:gcloud storage buckets add-iam-policy-binding gs://my-example-bucket \ --member=serviceAccount:my-account@my-project.iam.gserviceaccount.com \ --role=roles/storage.objectUser
Il comando
gcloud storage buckets add-iam-policy-binding
modifica le autorizzazioni IAM del bucket di archiviazione in cui è ospitato il registro. Altri esempi sono disponibili nella documentazione della gcloud CLI.Se stai configurando l'accesso per le VM Compute Engine o i nodi GKE che eseguiranno il push delle immagini in Container Registry, consulta Configurazione di VM e cluster per ulteriori passaggi di configurazione.
Configurare l'accesso pubblico alle immagini
Container Registry è accessibile pubblicamente se il bucket di archiviazione sottostante della posizione host è accessibile pubblicamente. All'interno di un progetto, tutte le immagini in ogni posizione host sono pubbliche o meno. All'interno dell'host di un progetto, non è possibile pubblicare pubblicamente solo immagini specifiche. Se hai immagini specifiche che vuoi rendere pubbliche:
- Assicurati di conservarli in una posizione di hosting separata che rendi pubblica, oppure
- Crea un nuovo progetto per contenere le immagini accessibili pubblicamente.
Per pubblicare pubblicamente le immagini container, rendi accessibile pubblicamente il bucket di archiviazione sottostante seguendo questi passaggi:
Assicurati di aver eseguito il push di un'immagine in Container Registry in modo che esista il bucket di archiviazione sottostante.
Trova il nome del bucket Cloud Storage per il registro. Per farlo, elenca i bucket:
gcloud storage ls
L'URL del bucket Container Registry verrà visualizzato come
gs://artifacts.PROJECT-ID.appspot.com
ogs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, dove:- PROJECT-ID è il tuo Google Cloud ID progetto. I progetti basati su dominio avranno il nome di dominio all'interno dell'ID progetto.
- STORAGE-REGION è la posizione del bucket di archiviazione:
us
per i registry nell'hostus.gcr.io
eu
per i registry nell'hosteu.gcr.io
asia
per i registry nell'hostasia.gcr.io
Rendi accessibile pubblicamente il bucket di archiviazione di Container Registry eseguendo il seguente comando. Questo comando renderà tutte le immagini nel bucket accessibili pubblicamente.
gcloud storage buckets add-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
dove:
gs://BUCKET-NAME
è l'URL del bucket di Container Registry
Rimuovere l'accesso pubblico alle immagini
Console
Assicurati di aver eseguito il push di un'immagine in Container Registry in modo che esista il bucket di archiviazione sottostante.
Apri la pagina Container Registry nella console Google Cloud .
Nel riquadro a sinistra, fai clic su Impostazioni.
Nella pagina Impostazioni, in Accesso pubblico, imposta la visibilità su Privata. Questa impostazione controlla l'accesso al bucket di archiviazione sottostante.
gcloud storage
Trova il nome del bucket Cloud Storage per il registro. Per farlo, elenca i bucket:
gcloud storage ls
L'URL del bucket Container Registry verrà visualizzato come
gs://artifacts.PROJECT-ID.appspot.com
ogs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, dove:- PROJECT-ID è l'ID progetto della console Google Cloud . I progetti basati su dominio avranno il nome di dominio all'interno dell'ID progetto.
- STORAGE-REGION è la posizione del bucket di archiviazione:
us
per i registry nell'hostus.gcr.io
eu
per i registry nell'hosteu.gcr.io
asia
per i registry nell'hostasia.gcr.io
Per rimuovere l'accesso pubblico al bucket di archiviazione, esegui il comando seguente nella shell o nella finestra del terminale:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
dove:
BUCKET-NAME
è il nome del bucket che preferisci
Revoca delle autorizzazioni
Per revocare le autorizzazioni IAM:
Console
- Visita la pagina Cloud Storage nella Google Cloud console.
Fai clic sul link
artifacts.PROJECT-ID.appspot.com
oSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
per il bucket. In questo caso, PROJECT-ID è l'ID progettoGoogle Cloud del progetto che ospita Container Registry e STORAGE-REGION è la multiregione (asia
,eu
ous
) del registro che ospita l'immagine.Seleziona la scheda Autorizzazioni.
Fai clic sull'icona del cestino accanto a ogni soggetto giuridico che vuoi rimuovere.
gcloud
Esegui questo comando nella finestra della shell o del terminale:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \
--member=PRINCIPAL --all
dove:
BUCKET-NAME
è il nome del bucket che preferisci- PRINCIPAL può essere uno dei seguenti:
user:EMAIL-ADDRESS
per un Account GoogleserviceAccount:EMAIL-ADDRESS
per un account di servizio IAMgroup:EMAIL-ADDRESS
per un gruppo Google.allUsers
per revocare l'accesso pubblico
Esegui l'integrazione con i servizi Google Cloud
Per la maggior parte dei Google Cloud service account, la configurazione dell'accesso a un registro richiede solo la concessione delle autorizzazioni IAM appropriate.
Autorizzazioni predefinite per i servizi Google Cloud
I serviziGoogle Cloud come Cloud Build o Google Kubernetes Engine utilizzano un account di servizio predefinito o un service agent per interagire con le risorse all'interno dello stesso progetto.
Devi configurare o modificare le autorizzazioni autonomamente se:
- Il servizio Google Cloud si trova in un progetto diverso da Container Registry.
- Le autorizzazioni predefinite non soddisfano le tue esigenze. Ad esempio, l'account di servizio Compute Engine predefinito ha accesso in sola lettura all'archiviazione nello stesso progetto. Se vuoi eseguire il push di un'immagine dalla VM a un registro, devi modificare le autorizzazioni per il account di servizio VM o autenticarti nel registro con un account che disponga dell'accesso in scrittura allo spazio di archiviazione.
- Utilizzi un account di servizio personalizzato per interagire con Container Registry
In genere, i seguenti account di servizio accedono a Container Registry. L'indirizzo email del account di servizio include l'ID o il numero di progetto Google Clouddel progetto in cui è in esecuzione il servizio.
Servizio | Service account | Indirizzo email | Autorizzazioni |
---|---|---|---|
Ambiente flessibile di App Engine | Service account predefinito di App Engine | PROJECT-ID@appspot.gserviceaccount.com | Ruolo Editor, può leggere e scrivere nell'archivio |
Compute Engine | Service account predefinito Compute Engine | PROJECT-NUMBER-compute@developer.gserviceaccount.com | Ruolo Editor, limitato all'accesso in sola lettura allo spazio di archiviazione |
Cloud Build | Service account Cloud Build | PROJECT-NUMBER@cloudbuild.gserviceaccount.com | Le autorizzazioni predefinite includono la creazione di bucket di archiviazione e l'accesso in lettura e scrittura all'archiviazione. |
Cloud Run | Service account predefinito di Compute Engine Il account di servizio di runtime predefinito per le revisioni. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Ruolo Editor, limitato all'accesso in sola lettura allo spazio di archiviazione |
GKE | Account di servizio predefinito di Compute Engine Il service account predefinito per i nodi. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Ruolo Editor, limitato all'accesso in sola lettura allo spazio di archiviazione |
Configura VM e cluster per il push delle immagini
Compute Engine e qualsiasi servizio Google Cloud che utilizza Compute Engine hanno l'account di servizio predefinito di Compute Engine come identità predefinita.
Sia le autorizzazioni IAM che gli ambiti di accesso influiscono sulla capacità delle VM di leggere e scrivere nello spazio di archiviazione.
- Le autorizzazioni IAM determinano l'accesso a una risorsa.
- Gli ambiti di accesso determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite la gcloud CLI e le librerie client su un'istanza VM. Di conseguenza, gli ambiti di accesso possono limitare ulteriormente
l'accesso ai metodi API durante l'autenticazione con
credenziali predefinite dell'applicazione.
- Per eseguire il pull di un'immagine privata, il account di servizio VM deve disporre dell'autorizzazione
read
per il bucket di archiviazione dell'immagine. - Per eseguire il push di un'immagine privata, il account di servizio della VM deve disporre dell'ambito di accesso
read-write
,cloud-platform
ofull-control
al bucket di archiviazione dell'immagine.
- Per eseguire il pull di un'immagine privata, il account di servizio VM deve disporre dell'autorizzazione
Per impostazione predefinita, il account di servizio predefinito di Compute Engine ha il ruolo Editor, che include le autorizzazioni per creare e aggiornare le risorse per la maggior parte dei serviziGoogle Cloud . Tuttavia, sia per l'account di servizio predefinito sia per un account di servizio personalizzato che associ a una VM, l'ambito di accesso predefinito per i bucket di archiviazione è di sola lettura. Ciò significa che per impostazione predefinita le VM non possono trasferire immagini.
Se intendi eseguire il deployment delle immagini solo in ambienti come Compute Engine e GKE, non devi modificare l'ambito di accesso. Se vuoi eseguire applicazioni in questi ambienti che eseguono il push delle immagini nel registro, devi eseguire una configurazione aggiuntiva.
Le seguenti configurazioni richiedono modifiche alle autorizzazioni IAM o alla configurazione dell'ambito di accesso.
- Push delle immagini da una VM o da un cluster
- Se vuoi eseguire il push delle immagini, il account di servizio dell'istanza VM deve avere
l'ambito
storage-rw
anzichéstorage-ro
. - La VM e Container Registry si trovano in progetti separati
- Devi concedere al account di servizio le autorizzazioni IAM per accedere al bucket di archiviazione utilizzato da Container Registry.
- Esecuzione dei comandi
gcloud
sulle VM - Il account di servizio deve avere l'ambito
cloud-platform
. Questo ambito concede le autorizzazioni per eseguire il push e il pull delle immagini, nonché per eseguire i comandigcloud
.
I passaggi per configurare gli ambiti sono riportati nelle sezioni seguenti.
Configura gli ambiti per le VM
Per impostare gli ambiti di accesso durante la creazione di una VM, utilizza l'opzione --scopes.
gcloud compute instances create INSTANCE --scopes=SCOPE
Dove
- INSTANCE è il nome dell'istanza VM.
- SCOPE è l'ambito che vuoi configurare per il service account della VM:
- Pull delle immagini:
storage-ro
- Pull e push delle immagini:
storage-rw
- Esegui il pull e il push delle immagini, esegui i comandi gcloud:
cloud-platform
- Pull delle immagini:
Per modificare gli ambiti per un'istanza VM esistente:
Imposta l'ambito di accesso con l'opzione --scopes.
Arresta l'istanza VM. Consulta Arrestare un'istanza.
Modifica l'ambito di accesso con il seguente comando.
gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
Dove
- INSTANCE è il nome dell'istanza VM.
- SCOPE è l'ambito che vuoi configurare per il service account della VM:
- Pull delle immagini:
storage-ro
- Pull e push delle immagini:
storage-rw
- Esegui il pull e il push delle immagini, esegui i comandi gcloud:
cloud-platform
- Pull delle immagini:
Riavvia l'istanza VM. Consulta Avviare un'istanza arrestata.
Se vuoi utilizzare un account di servizio personalizzato per le VM anziché quello predefinito, puoi specificare il account di servizio e gli ambiti di accesso da utilizzare quando crei la VM o modifici le impostazioni della VM.
Configura gli ambiti per i cluster Google Kubernetes Engine
Per impostazione predefinita, i nuovi cluster GKE vengono creati con autorizzazioni di sola lettura per i bucket Cloud Storage.
Per impostare l'ambito di archiviazione read-write
durante la creazione di un cluster Google Kubernetes Engine, utilizza l'opzione --scopes
.
Ad esempio, il seguente comando crea un cluster con gli ambiti
bigquery
, storage-rw
e compute-ro
:
gcloud container clusters create example-cluster \
--scopes=bigquery,storage-rw,compute-ro
Per saperne di più sugli ambiti che puoi impostare durante la creazione di un nuovo cluster, consulta la documentazione del comando gcloud container clusters create.
Il account di servizio Container Registry
Container Registry Service Agent agisce per conto di Container Registry quando interagisce con i servizi Google Cloud . L'agente di servizio dispone del set minimo di autorizzazioni richieste se hai abilitato l'API Container Registry dopo il 5 ottobre 2020. In precedenza, l'agente di servizio aveva il ruolo Editor. Per ulteriori informazioni sull'agente di servizio e sulla modifica delle relative autorizzazioni, consulta Service account Container Registry.
Provalo
Se non conosci Google Cloud, crea un account per valutare le prestazioni di Container Registry in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti senza addebiti per l'esecuzione, il test e il deployment dei workload.
Prova Container Registry gratuitamente