In questa pagina vengono descritte le autorizzazioni per controllare l'accesso a Container Registry.
Dopo aver configurato le autorizzazioni, puoi configurare authentication per i client Docker che utilizzi per eseguire il push e il pull delle immagini.
Se utilizzi Artifact Analysis per lavorare con i metadati del container, come le vulnerabilità trovate nelle immagini, consulta Documentazione di Artifact Analysis per informazioni sulla concessione dell'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 della 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, gli account di servizio e altre identità che interagiscono con Container Registry, devono disporre Autorizzazioni IAM (Identity and Access Management) per Cloud Storage.
- I servizi Google Cloud che in genere accedono a Container Registry sono configurati con autorizzazioni predefinite per i registry nello stesso progetto Google Cloud. Se le autorizzazioni predefinite non soddisfano le tue esigenze, devi configurare le autorizzazioni appropriate.
- Per le altre identità, devi configurare le autorizzazioni richieste.
Puoi controllare l'accesso agli host di Container Registry con le autorizzazioni di Cloud Storage. Nella tabella seguente sono elencate le Ruoli di Cloud Storage con delle autorizzazioni richieste da Container Registry.
Sono necessarie alcune autorizzazioni aggiuntive durante la visualizzazione di Container Registry utilizzando la console Google Cloud, consulta Autorizzazioni comuni richieste per l'utilizzo della console Cloud.
Accesso richiesto | Ruolo | Dove concedere le autorizzazioni |
---|---|---|
Estrarre le immagini (sola lettura) da un registry esistente | Visualizzatore oggetti Storage (roles/storage.objectViewer) | Concedi il ruolo nel bucket di archiviazione del registry. |
Esegui il push (scrittura) delle immagini e il pull (legge) delle immagini da un host del registro esistente in un progetto | Writer bucket legacy Storage (roles/storage.legacyBucketWriter) | Concedi il ruolo nel bucket di archiviazione del registry. Questa autorizzazione è disponibile solo a livello di bucket e non puoi concederla a livello di progetto. |
Aggiungi gli host del registry ai progetti Google Cloud e crea i bucket di archiviazione associati. | Amministratore Storage (roles/storage.admin) | Concedi il ruolo a livello di progetto |
Il push delle immagini richiede le autorizzazioni di lettura e scrittura degli oggetti,
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 sui bucket e sugli oggetti di archiviazione.
Il ruolo Amministratore Storage concede il controllo completo sui bucket e sugli 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 e Container Registry. Valuta attentamente quali entità richiedono questo ruolo.
- Per impostazione predefinita, l'account di servizio Cloud Build autorizzazioni nel ruolo Amministratore Storage. Questo account di servizio può quindi aggiungere registri al progetto principale con il primo push e push di immagini a quelli esistenti dei registri nel suo progetto principale.
- Se utilizzi Docker o altri strumenti per creare e inviare immagini a un registry, considera la possibilità di aggiungere registry al tuo progetto utilizzando un account con il ruolo più permissivo Amministratore archiviazione, quindi concedi i ruoli Scrittore di bucket legacy archiviazione o visualizzatore di oggetti archiviazione ad altri account che devono inviare o recuperare le immagini.
Per ulteriori informazioni su ruoli e autorizzazioni di Cloud Storage, consulta Documentazione di Cloud Storage.
Concedi autorizzazioni IAM
Container Registry utilizza i bucket Cloud Storage come archiviazione sottostante per le immagini dei contenitori. Controlli l'accesso alle tue immagini granting permissions to the bucket for a registry.
Il primo push dell'immagine a un nome host aggiunge l'host del registro e il relativo spazio di archiviazione
in un progetto. Ad esempio, il primo push a gcr.io/my-project
aggiunge l'host del registry gcr.io
al progetto con
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 del registry
Per eseguire correttamente questo primo push di immagini, 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 di accesso al bucket di archiviazione del registry per controllare l'accesso alle immagini nel registro:
- Storage Legacy Bucket Writer per push e pull
- Visualizzatore oggetti Storage di cui eseguire solo il pull
Puoi concedere l'autorizzazione per un bucket utilizzando la console Google Cloud o Google Cloud CLI.
Limitazioni e restrizioni
Puoi concedere autorizzazioni solo a livello di bucket di archiviazione per di Container Registry.
- Container Registry ignora le autorizzazioni impostate sui singoli oggetti all'interno di in un bucket Cloud Storage.
- Non puoi concedere autorizzazioni ai repository all'interno di un registry. Se hai bisogno di un controllo dell'accesso più granulare, Artifact Registry fornisce il 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 di Container Registry, devi concedere in modo esplicito autorizzazioni per tutti gli utenti e gli account di servizio che accedono ai registri. In questo caso, i ruoli Proprietario ed Editor da soli potrebbero non concedere le autorizzazioni richieste.
Concedi le autorizzazioni
Se l'host del registry non esiste ancora nel progetto, viene creato un account con autorizzazioni nel ruolo Amministratore Storage devi eseguire il push della prima immagine nel registro. Viene creato il bucket di archiviazione per l'host del registry.
Cloud Build dispone delle autorizzazioni necessarie per eseguire l'immagine iniziale all'interno dello stesso progetto. Se carichi le immagini con un altro strumento, verifica le autorizzazioni per l'account Google Cloud che stai utilizzando per l'autenticazione con Container Registry.
Per ulteriori informazioni sull'esecuzione del push dell'immagine iniziale con Docker, consulta Aggiunta di un registry.
Nel progetto con Container Registry, concedi le autorizzazioni appropriate sul bucket Cloud Storage utilizzato dall'host del registry.
Console
- Vai alla pagina di Cloud Storage nella console Google Cloud.
Fai clic sul link
artifacts.PROJECT-ID.appspot.com
oppureSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
per il bucket.Sostituisci PROJECT-ID con Google Cloud ID progetto del progetto che ospita Container Registry STORAGE-REGION con la strategia multiregionale (
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 l'indirizzo email può essere uno dei seguenti:
- Un Account Google (ad es.
someone@example.com
) - Un gruppo Google (ad esempio
my-developer-team@googlegroups.com
) Un account di servizio IAM.
Consulta l'elenco dei servizi Google Cloud che in genere accedono ai registry per trovare l'indirizzo email dell'account di servizio associato. Se il servizio è in esecuzione in un progetto diverso da Container Registry, assicurati di utilizzare l'indirizzo email dell'account di servizio nell'altro progetto.
- Un Account Google (ad es.
Nel menu a discesa Seleziona un ruolo, seleziona la Cloud Storage, quindi seleziona l'autorizzazione appropriata.
- Visualizzatore oggetti Storage per eseguire solo il pull delle immagini
- Autore di bucket Storage legacy 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]/ ...
Individua il bucket per l'host del registry nell'elenco dei bucket restituito. Il bucket in cui sono archiviate le tue immagini è denominato 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 del registry
Dove
- PROJECT-ID è il tuo ID progetto Google Cloud.
- STORAGE-REGION è la posizione del bucket di archiviazione:
us
per i registri nell'hostus.gcr.io
eu
per i registri nell'hosteu.gcr.io
asia
per i registry nell'hostasia.gcr.io
Esegui questo comando nella shell o nella finestra 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 account di servizio IAM.
Visualizza l'elenco dei servizi Google Cloud. che in genere accedono ai registry per trovare l'indirizzo email l'account di servizio associato. Se il servizio è in esecuzione diverso rispetto a Container Registry, assicurati di utilizzare l'indirizzo email dell'account di servizio nel in un altro progetto.
- Un Account Google (ad esempio
ROLE è il ruolo di Cloud Storage che vuoi concedere.
objectViewer
per estrarre le immagini- Immagini push e pull di
legacyBucketWriter
- BUCKET_NAME è il nome del
bucket Cloud Storage nel formato
Ad esempio, questo comando concede all'account di servizio
my-account@my-project.iam.gserviceaccount.com
le autorizzazioni per spingere e estrarre le 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 registry. Altri esempi sono nella documentazione dell'interfaccia a riga di comando gcloud.Se stai configurando l'accesso per le VM di Compute Engine Nodi GKE che eseguono il push delle immagini in Container Registry, consulta Configurazione di VM e cluster per ulteriori informazioni passaggi di configurazione.
Configura l'accesso pubblico alle immagini
Container Registry è accessibile pubblicamente se la posizione il bucket di archiviazione sottostante è accessibile pubblicamente. All'interno di un progetto, tutte le immagini in ogni posizione dell'host sono pubbliche o meno. All'interno dell'host di un progetto, non è possibile pubblicare immagini specifiche. Se hai immagini specifiche che vuoi rendere pubbliche:
- Tienili in una posizione di hosting separata che rendi pubblica. o
- Crea un nuovo progetto per contenere le immagini pubblicamente accessibili.
Per pubblicare le immagini container, rendi pubblicamente accessibile il bucket di archiviazione sottostante seguendo questi passaggi:
Assicurati di aver eseguito il push di un'immagine su Container Registry in modo che del bucket Cloud Storage sottostante.
Trova il nome del bucket Cloud Storage per quel registro. Per farlo, elenca i bucket:
gcloud storage ls
L'URL del bucket Container Registry sarà indicato come
gs://artifacts.PROJECT-ID.appspot.com
ogs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, dove:- PROJECT-ID è il tuo ID progetto Google Cloud. I progetti basati su dominio avranno il nome di dominio all'interno dell'ID progetto.
- STORAGE-REGION è la località del bucket di archiviazione:
us
per i registri nell'hostus.gcr.io
eu
per i registri nell'hosteu.gcr.io
asia
per i registry nell'hostasia.gcr.io
Rendi pubblico il bucket di archiviazione del Container Registry eseguendo il seguente comando. Questo comando renderà tutte le immagini del 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 su Container Registry in modo che del bucket Cloud Storage sottostante.
Apri la pagina Container Registry nella console Google Cloud.
Nel riquadro a sinistra, fai clic su Impostazioni.
Nella pagina Impostazioni, in Accesso pubblico, attiva/disattiva la visibilità impostandola su Privato. Questa impostazione controlla l'accesso al bucket di archiviazione sottostante.
archiviazione gcloud
Trova il nome del bucket Cloud Storage per quel registro. Per farlo, elenca i bucket:
gcloud storage ls
L'URL del bucket Container Registry sarà indicato 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. Progetti con ambito dominio avrà il nome di dominio come parte dell'ID progetto.
- STORAGE-REGION è la località del bucket di archiviazione:
us
per i registri nell'hostus.gcr.io
eu
per i registri nell'hosteu.gcr.io
asia
per i registri nell'hostasia.gcr.io
Per rimuovere l'accesso pubblico al bucket di archiviazione, esegui il seguente comando 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 desiderato
Revocare le autorizzazioni
Per revocare le autorizzazioni IAM:
Console
- Visita la pagina di Cloud Storage nella console Google Cloud.
Fai clic sul link
artifacts.PROJECT-ID.appspot.com
oppureSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
per il bucket. Qui, PROJECT-ID è l'ID progetto Google Cloud del progetto che ospita Container Registry e STORAGE-REGION è la regione multipla (asia
,eu
ous
) del registry che ospita l'immagine.Seleziona la scheda Autorizzazioni.
Fai clic sull'icona del cestino accanto a qualsiasi entità principale da rimuovere.
gcloud
Esegui il seguente comando nella shell o nella finestra del terminale:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \
--member=PRINCIPAL --all
dove:
BUCKET-NAME
è il nome del bucket desiderato- 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 la revoca dell'accesso pubblico
Esegui l'integrazione con i servizi Google Cloud
Per la maggior parte degli account di servizio Google Cloud, la configurazione dell'accesso a un registry richiede solo la concessione delle autorizzazioni IAM appropriate.
Autorizzazioni predefinite per i servizi Google Cloud
I servizi Google Cloud come Cloud Build o Google Kubernetes Engine utilizzano account di servizio predefinito o un agente di servizio usato per interagire 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, il valore predefinito l'account di servizio Compute Engine ha accesso di sola lettura allo spazio di archiviazione nello stesso progetto. Se vuoi eseguire il push di un'immagine dalla VM a un registro, devi modificare le autorizzazioni per l'account di servizio della VM o eseguire l'autenticazione nel registro con un account che ha accesso in scrittura allo spazio di archiviazione.
- Utilizzi un account di servizio personalizzato per interagire con Container Registry
I seguenti account di servizio in genere accedono a Container Registry. L'ID o il numero di progetto Google Cloud del progetto in cui è in esecuzione il servizio.
Servizio | Service account | Indirizzo email | Autorizzazioni |
---|---|---|---|
Ambiente flessibile di App Engine | Account di servizio predefinito di App Engine | PROJECT-ID@appspot.gserviceaccount.com | Ruolo Editor, può leggere e scrivere nello spazio di archiviazione |
Compute Engine | Account di servizio predefinito Compute Engine | PROJECT-NUMBER-compute@developer.gserviceaccount.com | Ruolo Editor, limitato all'accesso in sola lettura allo spazio di archiviazione |
Cloud Build | Account di servizio Cloud Build | PROJECT-NUMBER@cloudbuild.gserviceaccount.com | Autorizzazioni predefinite includono la creazione di bucket di archiviazione e l'accesso in lettura e scrittura allo spazio di archiviazione. |
Cloud Run | Account di servizio predefinito Compute Engine L'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 Compute Engine L'account di servizio predefinito per i nodi. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Ruolo Editor, limitato all'accesso in sola lettura allo spazio di archiviazione |
Configura le VM e i cluster per inviare le 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 sia gli ambiti di accesso VM per leggere e scrivere nello spazio di archiviazione.
- Le autorizzazioni IAM determinano l'accesso a una risorsa.
- Gli ambiti di accesso determinano
ambiti OAuth predefiniti per le richieste effettuate tramite gcloud CLI e client
su un'istanza VM. Di conseguenza, gli ambiti di accesso possono limitare ulteriormente l'accesso ai metodi dell'API durante l'autenticazione con le credenziali predefinite dell'applicazione.
- Per eseguire il pull di un'immagine privata, l'account di servizio della VM deve avere
read
per il bucket di archiviazione dell'immagine. - Per eseguire il push di immagini private, l'account di servizio della VM deve avere l'ambito di accesso
read-write
,cloud-platform
ofull-control
per il bucket di archiviazione dell'immagine.
- Per eseguire il pull di un'immagine privata, l'account di servizio della VM deve avere
L'account di servizio predefinito di Compute Engine ha il ruolo Editor che include le autorizzazioni per creare e aggiornare risorse per la maggior parte servizi Google Cloud. Tuttavia, sia per l'account di servizio predefinito sia per un account di servizio personalizzato associato 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 spingere le immagini.
Se intendi eseguire il deployment di immagini solo in ambienti come Compute Engine e GKE, non devi modificare l'ambito di accesso. Se vuoi eseguire applicazioni in questi ambienti che inviano immagini al registry, devi eseguire una configurazione aggiuntiva.
Le seguenti configurazioni richiedono modifiche a una delle autorizzazioni IAM o la configurazione dell'ambito di accesso.
- Caricamento di immagini da una VM o un cluster
- Se vuoi eseguire il push delle immagini, l'account di servizio dell'istanza VM deve avere
nell'ambito
storage-rw
anzichéstorage-ro
. - La VM e Container Registry si trovano in progetti separati
- Devi concedere l'account di servizio con IAM per accedere al bucket di archiviazione utilizzato da Container Registry.
- Eseguire i comandi
gcloud
sulle VM - L'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 servizio VM
:
- Esegui il pull delle immagini:
storage-ro
- Esegui il pull e il push delle immagini:
storage-rw
- Esegui il pull e il push delle immagini ed esegui i comandi gcloud:
cloud-platform
- Esegui il pull delle immagini:
Per modificare gli ambiti di 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 servizio VM
:
- Esegui il pull delle immagini:
storage-ro
- Esegui il pull e il push delle immagini:
storage-rw
- Esegui il pull e il push delle immagini, esegui i comandi gcloud:
cloud-platform
- Esegui il pull delle immagini:
Riavvia l'istanza VM. Consulta: Avvio di un'istanza arrestata.
Se vuoi utilizzare un account di servizio personalizzato per le VM anziché l'account di servizio predefinito, puoi specificare l'account di servizio e gli ambiti di accesso da utilizzare quando crei la VM o modifichi le impostazioni della VM.
Configura gli ambiti per i cluster Google Kubernetes Engine
Per impostazione predefinita, i nuovi cluster GKE vengono creati delle autorizzazioni per i bucket Cloud Storage.
Per impostare l'ambito di archiviazione read-write
quando crei 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 ulteriori informazioni sugli ambiti che puoi impostare durante la creazione di un nuovo cluster, consulta la documentazione del comando gcloud container clusters create.
L'account di servizio Container Registry
L'agente di servizio Container Registry agisce per conto di Container Registry durante l'interazione con i servizi Google Cloud. Il servizio dispone dell'insieme minimo di autorizzazioni richieste se hai abilitato il API Container Registry dopo il 5 ottobre 2020. L'agente di servizio aveva precedentemente il ruolo Editor. Per ulteriori informazioni sull'agente di servizio e sulla modifica delle relative autorizzazioni, consulta Account di servizio 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
Prova Container Registry gratuitamente