Controllo dell'accesso con IAM

Questa pagina descrive controllo dell'accesso con Identity and Access Management (IAM) in Artifact Registry.

Le autorizzazioni predefinite per Artifact Registry riducono al minimo lo sforzo di configurazione durante l'implementazione di una pipeline CI/CD. Puoi anche integrare Artifact Registry con strumenti CI/CD di terze parti e configurare le autorizzazioni e l'autenticazione necessarie per accedere ai repository.

Se utilizzi Artifact Analysis per lavorare con i metadati del 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

  1. Abilita Artifact Registry, incluse l'abilitazione dell'API e l'installazione di Google Cloud CLI.
  2. Se vuoi applicare autorizzazioni specifiche per i repository, crea un repository Artifact Registry per i tuoi pacchetti.

Panoramica

Le autorizzazioni e i ruoli IAM determinano la tua capacità di creare, visualizzare, modificare o eliminare i dati in un repository Artifact Registry.

Un ruolo è una raccolta di autorizzazioni. Non puoi concedere direttamente le autorizzazioni di un'entità, ma devi assegnare loro un ruolo. Se concedi un ruolo a un'entità, concedi all'entità tutte le autorizzazioni incluse nel ruolo. Puoi concedere più ruoli alla stessa entità.

Autorizzazioni predefinite di Google Cloud

Per impostazione predefinita, le seguenti autorizzazioni si applicano ai servizi CI/CD di Google Cloud nello stesso progetto di Artifact Registry:

Se tutti i tuoi servizi si trovano nello stesso progetto Google Cloud e le autorizzazioni predefinite soddisfano le tue esigenze, non è necessario configurare le autorizzazioni.

Devi configurare le autorizzazioni di Artifact Registry per questi servizi se:

  • Vuoi utilizzare questi servizi per accedere ad Artifact Registry in un altro progetto. Nel progetto con Artifact Registry, concedi il ruolo richiesto al pool di identità del carico di lavoro o all'account di servizio per ogni servizio. Se ti connetti a Cloud Run, concedi all'agente di servizio Cloud Run il ruolo richiesto.
  • usi una versione di GKE che non dispone di supporto integrato per il pull di immagini da Artifact Registry. Per le istruzioni di configurazione, consulta la sezione GKE.
  • Vuoi che l'account di servizio predefinito abbia accesso in lettura e scrittura ai repository. Per informazioni dettagliate, consulta le seguenti informazioni:
  • utilizzi un account di servizio fornito dall'utente per i tuoi ambienti di runtime anziché l'account di servizio predefinito. Nel progetto con Artifact Registry, concedi al tuo account di servizio il ruolo richiesto.

Integrazione di terze parti

Per i client di terze parti, devi configurare sia le autorizzazioni sia l'autenticazione.

Tradizionalmente, le applicazioni in esecuzione al di fuori di Google Cloud utilizzano le chiavi degli account di servizio per accedere alle risorse Google Cloud. Tuttavia, le chiavi degli account di servizio sono credenziali efficaci e possono rappresentare un rischio per la sicurezza se non vengono gestite correttamente.

Federazione di Workload Identity consente di utilizzare Identity and Access Management per concedere ruoli IAM alle identità esterne, inclusa la possibilità di impersonare account di servizio. Questo approccio elimina il carico di manutenzione e sicurezza associato alle chiavi degli account di servizio.

Utilizza federazione di Workload Identity:

  1. Crea un pool di federazione di Workload Identity.
  2. Crea un provider di federazione di Workload Identity.
  3. Concedi il ruolo Artifact Registry appropriato al pool di identità dei carichi di lavoro per consentire l'accesso al repository.
  4. Configura il tuo client di terze parti per l'autenticazione con Artifact Registry.

Utilizza un account di servizio:

  1. Crea un account di servizio che agisca per conto della tua applicazione oppure scegli un account di servizio esistente che utilizzi per l'automazione CI/CD.
  2. Concedi il ruolo Artifact Registry appropriato all'account di servizio per fornire l'accesso al repository.
  3. Configura il tuo client di terze parti per l'autenticazione con Artifact Registry.

GitLab su Google Cloud

L'integrazione di GitLab su Google Cloud utilizza la Federazione delle identità per Workload per l'autorizzazione e l'autenticazione dei carichi di lavoro GitLab su Google Cloud, senza la necessità di account di servizio o chiavi di account di servizio. Per ulteriori informazioni su come viene utilizzata la federazione di Workload Identity in questa partnership, consulta la panoramica dell'autenticazione.

Per configurare la federazione di Workload Identity e i ruoli IAM necessari per GitLab su Google Cloud, consulta il tutorial di GitLab Federazione di Google Cloud Workload Identity e criteri IAM.

Per connettere il tuo repository Artifact Registry, segui il tutorial GitLab Google Artifact Registry.

Ruoli e autorizzazioni

Ogni metodo dell'API Artifact Registry richiede che l'entità (utente, gruppo o account di servizio) che effettua la richiesta disponga delle autorizzazioni necessarie per utilizzare la risorsa. Le autorizzazioni vengono concesse alle entità impostando criteri che concedono all'entità un ruolo predefinito nella risorsa.

Puoi concedere ruoli nel progetto Google Cloud o nel repository Artifact Registry.

Ruoli Artifact Registry predefiniti

IAM fornisce ruoli predefiniti che concedono l'accesso a risorse Google Cloud specifiche e impediscono l'accesso non autorizzato ad altre risorse.

Utilizza i seguenti ruoli predefiniti per i repository standard, virtuali e remoti nel dominio pkg.dev:

Ruolo Descrizione
Lettore Artifact Registry
(roles/artifactregistry.reader)
Visualizza e recupera artefatti, visualizza i metadati del repository.
Writer Artifact Registry
(roles/artifactregistry.writer)
Artefatti di lettura e scrittura.
Amministratore repository Artifact Registry
(roles/artifactregistry.repoAdmin)
Lettura, scrittura ed eliminazione degli artefatti.
Amministratore di Artifact Registry
(roles/artifactregistry.admin)
Creare e gestire repository e artefatti.

I seguenti ruoli predefiniti aggiuntivi includono le autorizzazioni per creare repository gcr.io per ospitare immagini per il dominio gcr.io. I ruoli non includono le autorizzazioni per creare altri formati di repository in Artifact Registry nel dominio pkg.dev. Questi ruoli supportano la compatibilità con le versioni precedenti con Container Registry, poiché Container Registry utilizza il primo push di un'immagine container per creare ciascun registro multiregionale.

Ruolo Descrizione
Writer Create-on-push Artifact Registry (roles/artifactregistry.createOnPushWriter) Artefatti di lettura e scrittura. Crea repository gcr.io.
Amministratore repository Create-on-push di Artifact Registry (roles/artifactregistry.createOnPushRepoAdmin) Lettura, scrittura ed eliminazione degli artefatti. Crea repository gcr.io.

Per un elenco completo delle singole autorizzazioni in ciascun ruolo, consulta Ruoli di Artifact Registry. Puoi anche utilizzare il comando gcloud iam roles describe per visualizzare un elenco delle autorizzazioni in ogni ruolo.

Ruoli IAM di base

I ruoli IAM di base concedono agli utenti l'accesso globale, a livello di progetto, a tutte le risorse Google Cloud. Se possibile, utilizza i ruoli predefiniti per l'accesso al repository, in modo che gli utenti e gli account di servizio dispongano solo delle autorizzazioni necessarie.

La seguente tabella elenca i ruoli di base esistenti prima di IAM e i ruoli IAM di Artifact Registry che includono:

Ruolo Titolo del ruolo Include il ruolo
roles/viewer Visualizzatore roles/artifactregistry.reader
roles/editor Editor
  • roles/artifactregistry.writer
  • roles/artifactregistry.repoAdmin
roles/owner Proprietario roles/artifactregistry.admin

Concessione di autorizzazioni

Concedi le autorizzazioni a livello di progetto se le stesse autorizzazioni si applicano a tutti i repository nel progetto. Se alcuni account richiedono livelli di accesso diversi, concedi i ruoli a livello di repository.

Se stai concedendo autorizzazioni su un repository virtuale, queste autorizzazioni si applicano a tutti i repository upstream disponibili tramite il repository virtuale, indipendentemente dalle singole autorizzazioni del repository.

Se concedi i ruoli utilizzando il comando gcloud, puoi specificare una singola associazione di ruolo per un'entità o utilizzare un file di criteri per definire più associazioni.

Per gli esempi riportati in questa pagina viene utilizzato il seguente modello di criteri di riferimento. Il file del criterio di riferimento è denominato policy.yaml. Il modello contiene nomi utente e di account di servizio di esempio. Sostituisci questi utenti e account di servizio di esempio in base alle esigenze del tuo progetto.

Per maggiori dettagli sul formato dei criteri, consulta la documentazione relativa ai criteri IAM.

bindings:

- members:
  - user: user@gmail.com
  role: roles/owner

- members:
  - serviceAccount: repo-readonly@iam.gserviceaccount.com
  - user: user2@gmail.com
  role: roles/artifactregistry.reader

- members:
  - serviceAccount: repo-write@iam.gserviceaccount.com
  role: roles/artifactregistry.writer

- members:
  - serviceAccount: repo-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.repoAdmin

- members:
  - serviceAccount: ar-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.admin

Concessione di autorizzazioni a livello di progetto

Concedi un ruolo a livello di progetto se le stesse autorizzazioni si applicano a tutti i repository nel progetto.

Per aggiungere un account utente o di servizio a un progetto e concedere all'utente un ruolo Artifact Registry:

Console

  1. Apri la pagina IAM nella console Google Cloud.

    Apri la pagina IAM

  2. Fai clic su Seleziona un progetto, scegli il progetto su cui è in esecuzione Artifact Registry e fai clic su Apri.

  3. Fai clic su Aggiungi.

  4. Inserisci un indirizzo email. Puoi aggiungere singoli, account di servizio o gruppi Google come entità.

  5. Seleziona un ruolo per l'entità. In conformità con il principio di sicurezza del privilegio minimo, ti consigliamo di concedere la quantità minima di privilegi necessari per prevenire l'accesso indesiderato ad altre risorse.

  6. Fai clic su Salva.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per concedere un ruolo a una singola entità, esegui questo comando:

    gcloud projects add-iam-policy-binding PROJECT \
       --member=PRINCPAL \
       --role=ROLE
    

    dove

    • PROJECT è l'ID del progetto in cui è in esecuzione Artifact Registry.
    • PRINCIPAL è l'entità per cui aggiungere l'associazione. Utilizza il modulo user|group|serviceAccount:email o domain:domain.

      Esempi: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

    • ROLE è il ruolo che vuoi concedere.

    Per ulteriori informazioni, consulta la documentazione relativa a add-iam-policy-binding.

    Per concedere i ruoli utilizzando un file di criteri, esegui questo comando:

    gcloud projects set-iam-policy PROJECT /PATH/TO/policy.yaml

    Dove

    • PROJECT è l'ID del progetto o l'identificatore completo del progetto in cui è in esecuzione Artifact Registry.
    • /PATH/TO/policy.yaml è il percorso e il nome file del file del criterio.

    Per ottenere il criterio attualmente configurato, esegui questo comando:

    gcloud projects get-iam-policy PROJECT

    Dove PROJECT è l'ID del progetto o l'identificatore completo del progetto.

    Per ulteriori informazioni, consulta la documentazione di set-iam-policy.

Concessione di autorizzazioni specifiche per il repository

Concedi autorizzazioni a livello di repository quando vuoi che gli utenti o gli account di servizio abbiano diversi livelli di accesso per ogni repository nel tuo progetto.

Console

Per concedere l'accesso a un repository specifico:

  1. Apri la pagina Repositories nella console Google Cloud.

    Apri la pagina Repository

  2. Seleziona il repository appropriato.

  3. Se il riquadro delle informazioni non è visualizzato, fai clic su Mostra riquadro informazioni nella barra dei menu.

  4. Nella scheda Autorizzazioni, fai clic su Aggiungi entità.

  5. Inserisci un indirizzo email. Puoi aggiungere singoli, account di servizio o gruppi Google come entità.

  6. Seleziona un ruolo per l'entità. Ti consigliamo di assegnare all'entità il livello minimo di privilegi necessari.

  7. Fai clic su Salva.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Puoi impostare un set IAM di singole associazioni di criteri o utilizzare un file di criteri.

    Per concedere un ruolo a una singola entità, esegui questo comando:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE
    

    dove

    • REPOSITORY è l'ID del repository.
    • PRINCIPAL è l'entità per cui aggiungere l'associazione. Utilizza il modulo user|group|serviceAccount:email o domain:domain.

      Esempi: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

    • ROLE è il ruolo che vuoi concedere.

    • LOCATION è la località a livello di una o più regioni del repository.

    Ad esempio, per aggiungere un'associazione di criteri IAM per il ruolo roles/artifactregistry.writer per l'utente write@gmail.com con il repository my-repo nella località --us-central1, esegui:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
    --location=us-central1 --member=user:write@gmail.com --role=roles/artifactregistry.writer
    

    Per concedere i ruoli utilizzando un file di criteri, esegui questo comando:

    gcloud artifacts repositories set-iam-policy REPOSITORY /PATH/TO/policy.yaml --location=LOCATION

    Dove

    • REPOSITORY è l'ID del repository.
    • /PATH/TO/policy.yaml è il percorso e il nome file del file del criterio.
    • LOCATION è la località a livello di una o più regioni del repository.

    Ad esempio, per impostare il criterio IAM per il repository my-repo nella località --us-central1 con il criterio definito in policy.yaml, esegui:

    gcloud artifacts repositories set-iam-policy my-repo policy.yaml --location=us-central1
    

Terraform

Utilizza la risorsa google_artifact_registry_repository_iam per configurare un criterio IAM. L'esempio seguente definisce un account di servizio con il nome della risorsa repo-account e gli concede l'accesso in lettura a un repository con il nome della risorsa my-repo.

Se non hai mai utilizzato Terraform per Google Cloud, consulta la pagina Inizia a usare Google Cloud sul sito web di HashiCorp.

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo"     {
  provider = google-beta

  location = "LOCATION"
  repository_id = "REPOSITORY"
  description = "DESCRIPTION"
  format = "FORMAT"
}

resource "google_service_account" "repo-account" {
  provider = google-beta

  account_id   = "ACCOUNT-ID"
  display_name = "Repository Service Account"
}

resource "google_artifact_registry_repository_iam_member" "repo-iam" {
  provider = google-beta

  location = google_artifact_registry_repository.my-repo.location
  repository = google_artifact_registry_repository.my-repo.name
  role   = "roles/artifactregistry.reader"
  member = "serviceAccount:${google_service_account.repo-account.email}"
}

ACCOUNT-ID è l'ID dell'account di servizio. Questa è la parte del campo email dell'account di servizio che precede il simbolo @.

Per altri esempi, consulta la documentazione della risorsa google_artifact_registry_repository_iam.

Configurazione dell'accesso pubblico a un repository

Se vuoi rendere disponibili a chiunque su internet degli artefatti senza autenticazione, archiviali in un repository che rendi pubblico.

Per configurare un repository per l'accesso pubblico di sola lettura, concedi il ruolo Lettore Artifact Registry all'entità allUsers. Consigliamo inoltre di limitare le quote per le richieste degli utenti in modo che un singolo utente non possa utilizzare la quota complessiva del progetto.

Console

  1. Apri la pagina Repositories nella console Google Cloud.

    Apri la pagina Repository

  2. Seleziona il repository appropriato.

  3. Se il riquadro delle informazioni non è visualizzato, fai clic su Mostra riquadro informazioni nella barra dei menu.

  4. Nella scheda Autorizzazioni, fai clic su Aggiungi entità.

  5. Nel campo Nuove entità, inserisci allUsers.

  6. Seleziona il ruolo Lettore Artifact Registry.

  7. Imposta un limite per utente sulle richieste API Artifact Registry per prevenire l'uso improprio da parte di utenti non autenticati. Per istruzioni, consulta la sezione Limitazione dell'utilizzo.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Esegui questo comando:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
    --location=LOCATION --member=allUsers --role=ROLE
    

    dove

    • REPOSITORY è l'ID del repository.

    • ROLE è il ruolo che vuoi concedere.

    • LOCATION è la località a livello di una o più regioni del repository.

    Ad esempio, configura il repository my-repo nella località --us-central1 come pubblico, esegui:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-central1 --member=allUsers --role=roles/artifactregistry.reader
    
  3. Imposta un limite per utente sulle richieste API Artifact Registry per prevenire l'uso improprio da parte di utenti non autenticati. Per istruzioni, consulta la sezione Limitazione dell'utilizzo.

Revoca delle autorizzazioni

Per revocare l'accesso a un repository, rimuovi l'entità dall'elenco delle entità autorizzate.

Per rimuovere l'accesso pubblico da un repository, rimuovi l'entità allUsers.

Console

Per revocare le autorizzazioni:

  1. Apri la pagina Repositories nella console Google Cloud.

    Apri la pagina Repository

  2. Seleziona il repository appropriato.

  3. Se il riquadro delle informazioni non è visualizzato, fai clic su Mostra riquadro informazioni nella barra dei menu.

  4. Nella scheda Autorizzazioni, espandi l'entità appropriata. Se vuoi rendere privato un repository pubblico, espandi l'entità allUsers.

  5. Fai clic su Rimuovi entità per revocare l'accesso.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per revocare un ruolo a livello di progetto, esegui questo comando:

    gcloud projects remove-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE
    
    • PROJECT è l'ID progetto.
    • PRINCIPAL è l'entità per cui rimuovere l'associazione. Utilizza il modulo user|group|serviceAccount:email o domain:domain.

      Esempi: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

    • ROLE è il ruolo che vuoi revocare.

    Per revocare un ruolo per un repository, esegui questo comando:

    gcloud artifacts repositories remove-iam-policy-binding REPOSITORY
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE
    

    dove

    • REPOSITORY è l'ID del repository.
    • PRINCIPAL è l'entità per cui rimuovere l'associazione. Utilizza il modulo user|group|serviceAccount:email o domain:domain.

      Esempi: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

      Per revocare l'accesso pubblico al repository, specifica l'entità allUsers.

    • ROLE è il ruolo che vuoi revocare.

    Ad esempio, per rimuovere un'associazione di criteri per il ruolo roles/artifactregistry.writer per l'utente write@gmail.com con il repository my-repo nella località --us-central1, esegui:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=user:write@gmail.com \
       --role=roles/artifactregistry.writer

    Per revocare l'accesso pubblico a my-repo nella località --us-central1, esegui:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=allUsers \
       --role=roles/artifactregistry.reader
    

Concessione dell'accesso condizionale con i tag

Questa funzionalità è in Anteprima.

Gli amministratori di progetto possono creare tag per le risorse in Google Cloud e gestirli in Resource Manager. Quando colleghi un tag a un repository di Artifact Registry, gli amministratori possono utilizzare il tag con le condizioni IAM per concedere l'accesso condizionale al repository.

Non puoi associare tag a singoli artefatti.

Per saperne di più, consulta la seguente documentazione:

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 un account di servizio predefinito o gestito da Google per interagire con le risorse all'interno dello stesso progetto.

Devi configurare o modificare personalmente le autorizzazioni se:

  • Il servizio Google Cloud si trova in un progetto diverso da Artifact Registry.
  • Le autorizzazioni predefinite non soddisfano le tue esigenze. Ad esempio, l'account di servizio Compute Engine predefinito ha accesso di sola lettura allo spazio di archiviazione nello stesso progetto. Se vuoi eseguire il push di un'immagine da una VM ad Artifact Registry, puoi modificare le autorizzazioni per l'account di servizio VM o utilizzare un altro account con le autorizzazioni richieste.
  • utilizzi un account di servizio fornito dall'utente per interagire con Artifact Registry, anziché con l'account di servizio predefinito.

In genere i seguenti account di servizio accedono ad Artifact Registry. L'indirizzo email dell'account di servizio include l'ID o il numero del progetto Google Cloud del progetto in cui è in esecuzione il servizio.

Servizio Account di servizio Indirizzo email Autorizzazioni
Ambiente flessibile di App Engine Account di servizio App Engine PROJECT-ID@appspot.gserviceaccount.com Ruolo Editor, può leggere e scrivere nei repository
Compute Engine Account di servizio predefinito di Compute Engine PROJECT-NUMBER-compute@developer.gserviceaccount.com Ruolo Editor, limitato all'accesso di sola lettura ai repository
Cloud Build Account di servizio Cloud Build PROJECT-NUMBER@cloudbuild.gserviceaccount.com
Le autorizzazioni predefinite includono l'accesso in lettura e scrittura ai repository e la possibilità di creare repository gcr.io.
Cloud Run Agente di servizio Cloud Run
L'agente di servizio per run.googleapis.com.
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com Autorizzazioni di lettura, limitate all'accesso di sola lettura ai repository
GKE Account di servizio predefinito di Compute Engine
L'account di servizio predefinito per i nodi.
PROJECT-NUMBER-compute@developer.gserviceaccount.com Ruolo Editor, limitato all'accesso di sola lettura ai repository

Concessione dell'accesso alle istanze di Compute Engine

Per le istanze VM che accedono ai repository devono essere configurati sia le autorizzazioni Artifact Registry sia l'ambito di accesso dell'archiviazione.

Mentre il livello di accesso di un account di servizio è determinato dai ruoli IAM concessi all'account di servizio, gli ambiti di accesso su un'istanza VM determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite gcloud CLI e le librerie client nell'istanza. Di conseguenza, gli ambiti di accesso limitano ulteriormente l'accesso ai metodi API durante l'autenticazione con Credenziali predefinite dell'applicazione.

Compute Engine utilizza i seguenti valori predefiniti:

  • L'account di servizio predefinito di Compute Engine è l'identità per le istanze VM. L'indirizzo email dell'account di servizio ha il suffisso @developer.gserviceaccount.com.
  • L'account di servizio predefinito dispone del ruolo IAM Editor di base se non hai disabilitato questo comportamento.
  • Le istanze create con l'account di servizio predefinito hanno gli ambiti di accesso predefiniti di Compute Engine, incluso l'accesso di sola lettura allo spazio di archiviazione. Mentre il ruolo Editor in genere concede l'accesso in scrittura, l'ambito di accesso allo spazio di archiviazione read-only limita l'account di servizio dell'istanza al download degli artefatti solo da qualsiasi repository nello stesso progetto.

Devi configurare l'ambito di accesso dell'account di servizio se:

  • L'account di servizio VM deve accedere a un repository in un altro progetto.
  • L'account di servizio VM deve eseguire azioni diverse dalla lettura degli artefatti dai repository. In genere questa operazione applica strumenti di terze parti su una VM che deve eseguire il push delle immagini o eseguire i comandi gcloud di Artifact Registry.

Per configurare le autorizzazioni e impostare l'ambito di accesso:

  1. Nel progetto con la tua istanza VM, ottieni il nome dell'account di servizio predefinito di Compute Engine. L'indirizzo email dell'account di servizio ha il suffisso @developer.gserviceaccount.com.

  2. Nel progetto con il repository, concedi le autorizzazioni in modo che l'account di servizio possa accedere al repository.

  3. Imposta l'ambito di accesso con l'opzione --scopes.

    1. Arresta l'istanza VM. Consulta Arresto di un'istanza.

    2. Imposta l'ambito di accesso con il comando seguente:

      gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
      

      Sostituisci SCOPE con il valore appropriato.

      • Per Docker, sono supportate le seguenti opzioni:

        • storage-ro: concede l'autorizzazione di lettura solo per il pull delle immagini.
        • storage-rw: concede l'autorizzazione di lettura e scrittura per il push o il pull delle immagini.
        • cloud-platform - Visualizzare e gestire i dati, inclusi i metadati, in tutto il servizio Google Cloud.
      • Per gli altri formati, devi utilizzare l'ambito cloud-platform.

    3. Riavvia l'istanza VM. Consulta Avvio di un'istanza arrestata.

Concessione dell'accesso ai cluster Google Kubernetes Engine

I cluster GKE e i pool di nodi possono eseguire il pull dei container senza alcuna configurazione aggiuntiva se vengono soddisfatti tutti i seguenti requisiti:

Se il tuo ambiente GKE non soddisfa questi requisiti, le istruzioni per concedere l'accesso dipendono dall'utilizzo dell'account di servizio predefinito di Compute Engine o di un account di servizio fornito dall'utente come identità per i nodi.

Account di servizio predefinito

I seguenti requisiti di configurazione si applicano all'account di servizio predefinito di Compute Engine:

  1. Se GKE si trova in un progetto diverso da Artifact Registry, concedi le autorizzazioni richieste all'account di servizio.

  2. Per eseguire il push delle immagini, interagire con i repository per formati diversi dai container o eseguire i comandi gcloud dal cluster, devi impostare gli ambiti di accesso per l'account di servizio quando crei il cluster o il pool di nodi.

  3. Se non utilizzi una versione supportata di GKE, configura imagePullSecrets.

Account di servizio fornito dall'utente

Se vuoi utilizzare un account di servizio fornito dall'utente come identità per un cluster, devi:

  1. Concedi all'account di servizio le autorizzazioni richieste dal progetto Google Cloud in cui è in esecuzione Artifact Registry.

  2. Per impostazione predefinita, la creazione di un cluster o di un pool di nodi con un account di servizio fornito dall'utente concede l'ambito di accesso cloud-platform.

    Se utilizzi il flag --scopes con il comando gcloud container clusters create o gcloud container node-pools create, devi includere gli ambiti di accesso appropriati da utilizzare con Artifact Registry.

Impostazione degli ambiti di accesso

Gli ambiti di accesso sono il metodo legacy per specificare l'autorizzazione per le VM di Compute Engine. Per eseguire il pull delle immagini dai repository Artifact Registry, i nodi GKE devono avere l'ambito di accesso in sola lettura per lo spazio di archiviazione o un altro ambito di accesso allo spazio di archiviazione che include l'accesso in lettura allo spazio di archiviazione.

Puoi impostare gli ambiti di accesso solo quando crei un cluster o un pool di nodi. Non puoi modificare gli ambiti di accesso sui nodi esistenti.

Per specificare gli ambiti di accesso quando crei un cluster, esegui questo comando:

gcloud container clusters create NAME --scopes=SCOPES

Per specificare gli ambiti di accesso quando crei un pool di nodi, esegui questo comando:

gcloud container node-pools create NAME --scopes=SCOPES

Sostituisci i seguenti valori:

  • NAME è il nome del cluster o del pool di nodi.
  • SCOPES è un elenco separato da virgole di ambiti di accesso da concedere.

    • Per accedere ai repository Docker, utilizza uno dei seguenti ambiti:

    • storage-ro: concede l'autorizzazione di sola lettura per il pull delle immagini.

    • storage-rw: concede l'autorizzazione di lettura e scrittura per il push o il pull delle immagini.

    • cloud-platform - Visualizzare e gestire i dati, inclusi i metadati, in tutto il servizio Google Cloud.

    • Per accedere ad altri repository, devi utilizzare l'ambito cloud-platform.

    Per un elenco completo degli ambiti, consulta la documentazione relativa a gcloud container clusters create o gcloud container node-pools create.

Per ulteriori informazioni sugli ambiti che puoi impostare quando crei un nuovo cluster, consulta la documentazione del comando gcloud container clusters create.

Configurazione di un imagePullSecret

Per configurare un imagePullSecret:

  1. Nel progetto con GKE, trova l'account di servizio predefinito di Compute Engine. L'indirizzo email dell'account ha il suffisso @developer.gserviceaccount.com.

  2. Scarica la chiave dell'account di servizio.

  3. Nel progetto con il repository, verifica di aver concesso le autorizzazioni al repository.

  4. Nel progetto con il tuo cluster, crea un secret imagePullSecret denominato artifact-registry con la chiave dell'account di servizio.

    kubectl create secret docker-registry artifact-registry \
    --docker-server=https://LOCATION-docker.pkg.dev \
    --docker-email=SERVICE-ACCOUNT-EMAIL \
    --docker-username=_json_key \
    --docker-password="$(cat KEY-FILE)"
    

    Dove

    • LOCATION è la località a livello di una o più regioni del repository.
    • SERVICE-ACCOUNT-EMAIL è l'indirizzo email dell'account di servizio Compute Engine.
    • KEY-FILE è il nome del file di chiavi dell'account di servizio. Ad esempio key.json.
  5. Apri il tuo account di servizio predefinito:

    kubectl edit serviceaccount default --namespace default

    Ogni spazio dei nomi nel tuo cluster Kubernetes ha un account di servizio predefinito chiamato default. Questo account di servizio predefinito viene utilizzato per eseguire il pull dell'immagine container.

  6. Aggiungi il secret imagePullSecret appena creato al tuo account di servizio predefinito:

    imagePullSecrets:
    - name: artifact-registry
    

    L'account di servizio ora dovrebbe avere il seguente aspetto:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret you created:
    imagePullSecrets:
    - name: artifact-registry
    

A questo punto, per ogni nuovo pod creato nello spazio dei nomi attuale default verrà definito il secret imagePullSecret.

Account di servizio Artifact Registry

L'agente di servizio Artifact Registry è un account di servizio gestito da Google che agisce per conto di Artifact Registry durante l'interazione con i servizi Google Cloud. Per ulteriori informazioni sull'account e sulle sue autorizzazioni, consulta Account di servizio Artifact Registry.

Passaggi successivi

Dopo aver configurato le autorizzazioni, scopri di più sull'utilizzo degli artefatti.