Configura l'autenticazione in Artifact Registry per Docker

Questa pagina descrive come configurare Docker per l'autenticazione nei repository Docker di Artifact Registry.

Non è necessario configurare l'autenticazione per gli ambienti di runtime come Google Kubernetes Engine, ma devi verificare che siano configurate le autorizzazioni richieste. Trusted Cloud by S3NS

Prima di iniziare

  1. Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata. Dopo aver eseguito l'accesso, inizializza Google Cloud CLI eseguendo il seguente comando:

    gcloud init
  2. (Facoltativo) Configura le impostazioni predefinite per i comandi gcloud CLI.
  3. Verifica che l'account che utilizzi per l'autenticazione disponga dell'autorizzazione per accedere ad Artifact Registry. Ti consigliamo di utilizzare un service account anziché un account utente.
  4. Installa Docker se non è già installato.
  5. Docker richiede l'accesso con privilegi per interagire con i registri. Su Linux o Windows, aggiungi l'utente che utilizzi per eseguire i comandi Docker al gruppo di sicurezza Docker. Questo passaggio non è necessario su macOS poiché Docker Desktop viene eseguito su una macchina virtuale come utente root.

    Linux

    Il gruppo di sicurezza Docker si chiama docker. Per aggiungere il tuo nome utente, esegui questo comando:

          sudo usermod -a -G docker ${USER}
          

    Windows

    Il gruppo di sicurezza Docker si chiama docker-users. Per aggiungere un utente dal prompt dei comandi di amministratore, esegui questo comando:

            net localgroup docker-users DOMAIN\USERNAME /add
            

    Dove:

    • DOMAIN è il tuo dominio Windows.
    • USERNAME è il tuo nome utente.

    Esci e accedi di nuovo per rendere effettive le modifiche all'appartenenza al gruppo. Se utilizzi una macchina virtuale, potrebbe essere necessario riavviarla affinché le modifiche all'abbonamento diventino effettive.

Scelta di un metodo di autenticazione

Sono disponibili i seguenti metodi di autenticazione:

Helper delle credenziali della gcloud CLI
Configura le credenziali di Artifact Registry per l'utilizzo con Docker direttamente in gcloud CLI. Questo è il metodo di autenticazione più semplice, ma può essere più lento rispetto all'helper delle credenziali autonomo.
Helper per le credenziali Docker autonomo
Questa opzione è principalmente per la configurazione delle credenziali da utilizzare con Docker in assenza di Google Cloud CLI. È molto più veloce dell'helper per le credenziali gcloud CLI e utilizza le credenziali predefinite dell'applicazione (ADC) per trovare automaticamente le credenziali nel tuo ambiente.
Token di accesso
Puoi generare un token di accesso di breve durata per un account di servizio e poi utilizzarlo per l'autenticazione con password. Poiché il token è valido solo per 60 minuti, è un'opzione più sicura rispetto a una chiave delaccount di servizioe account.
Chiave service account
Una coppia di chiavi gestita dall'utente che puoi utilizzare come credenziale per un account di servizio. Poiché le credenziali sono di lunga durata, si tratta dell'opzione meno sicura tra tutti i metodi di autenticazione disponibili.

Se possibile, utilizza un token di accesso o un helper delle credenziali per ridurre il rischio di accesso non autorizzato alle tue immagini container. Se devi utilizzare una chiave dell'account di servizio, assicurati di seguire le best practice per la gestione delle credenziali.

Impostazioni di autenticazione nel file di configurazione Docker

Docker salva le impostazioni di autenticazione nel file di configurazione config.json.

  • Linux: ~/.docker/config.json
  • Windows: %USERPROFILE%\.docker\config.json

Nel file sono presenti sezioni separate per i diversi metodi di autenticazione:

credHelpers
Se utilizzi l'helper delle credenziali Docker per l'autenticazione, Artifact Registry memorizza le impostazioni dell'helper delle credenziali nella sezione credHelpers del file.
auths
Se utilizzi Docker per accedere con un token o una chiave dell'account di servizio come password, Docker memorizza una versione codificata in base64 delle tue credenziali nella sezione auths del file.
credStore
Se hai configurato un archivio delle credenziali per gestire le tue credenziali, le impostazioni dell'archivio delle credenziali si trovano nella sezione credStore del file.

Quando Docker si connette a un registro, controlla innanzitutto la presenza di un assistente per le credenziali associato all'host. Pertanto, se il tuo config.json include le impostazioni di Artifact Registry nelle sezioni credHelpers e auths, le impostazioni nella sezione auths vengono ignorate.

Helper delle credenziali gcloud CLI

L'helper delle credenziali gcloud CLI fornisce un accesso sicuro e di breve durata alle risorse del progetto. Configura Docker per l'autenticazione agli host Artifact Registry in qualsiasi ambiente in cui è installata Google Cloud CLI.

L'helper delle credenziali gcloud CLI è il metodo di autenticazione più semplice da configurare. Configura Docker con le credenziali dell'utente o del account di servizio attivo nella sessione gcloud CLI. Poiché questo helper delle credenziali dipende da gcloud CLI, può essere molto più lento dell'helper delle credenziali autonomo. Per le build automatiche con strumenti di terze parti o client Docker con un numero elevato di host di registro configurati, utilizza invece l'helper delle credenziali autonomo.

Per eseguire l'autenticazione in Artifact Registry:

  1. Accedi a gcloud CLI come utente che eseguirà i comandi Docker.

  1. Per consentire l'utilizzo dell'helper delle credenziali, esegui questo comando:

    gcloud config set artifacts/allow_unrecognized_registry True
    
  1. Esegui questo comando:

    gcloud auth configure-docker HOSTNAME-LIST
    

    Dove HOSTNAME-LIST è un elenco separato da virgole di nomi host del repository da aggiungere alla configurazione dell'helper delle credenziali.

  2. Il comando mostra la sezione credHelpers della configurazione Docker attuale e la configurazione aggiornata dopo l'aggiunta dei nomi host specificati.

    Per accettare le modifiche alla configurazione, inserisci y.

    Le tue credenziali vengono salvate nella home directory dell'utente.

    • Linux: $HOME/.docker/config.json
    • Windows: %USERPROFILE%/.docker/config.json
  3. Docker richiede che gli helper delle credenziali si trovino nel sistema PATH. Assicurati che il comando gcloud si trovi nel sistema PATH.

Assistente per le credenziali autonome

L'assistente per le credenziali Docker autonomo configura Docker per l'autenticazione ad Artifact Registry su un sistema in cui gcloud CLI non è disponibile. È molto più veloce dell'helper delle credenziali della CLI gcloud e utilizza le credenziali predefinite dell'applicazione (ADC) per trovare automaticamente le credenziali nel tuo ambiente. Per operazioni diverse dal push e dal pull delle immagini, come il tagging o l'elenco delle immagini. Ti consigliamo di utilizzare questo metodo di autenticazione per le build automatiche con strumenti di terze parti o client Docker con un numero elevato di host di registro configurati.

L'assistente per le credenziali Docker autonomo recupera le credenziali di Artifact Registry e le scrive nel file di configurazione Docker. In questo modo, puoi utilizzare lo strumento a riga di comando Docker, docker, per interagire direttamente con Artifact Registry.

Per utilizzare l'assistente per le credenziali Docker:

  1. Accedi alla macchina come utente che eseguirà i comandi Docker.

  2. Scarica l'assistente per le credenziali Docker autonomo da GitHub.

    Se vuoi, puoi utilizzare l'utilità a riga di comando curl. Ad esempio:

    VERSION=2.1.29
    OS=linux  # or "darwin" for OSX, "windows" for Windows.
    ARCH=amd64  # or "386" for 32-bit OSs
    
    curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \
    | tar xz docker-credential-gcr \
    && chmod +x docker-credential-gcr && sudo mv docker-credential-gcr /usr/bin/
    
  3. Configura Docker in modo che utilizzi le credenziali di Artifact Registry quando interagisci con Artifact Registry (devi farlo solo una volta):

    docker-credential-gcr configure-docker --registries=HOSTNAME-LIST
    

    Dove HOSTNAME-LIST è un elenco separato da virgole di nomi host del repository da aggiungere alla configurazione dell'helper delle credenziali.

    Per maggiori informazioni, consulta la documentazione di Docker Credential Helper autonomo su GitHub.

    Le tue credenziali vengono salvate nella home directory dell'utente.

    • Linux: $HOME/.docker/config.json
    • Windows: %USERPROFILE%/.docker/config.json
  4. Docker richiede che gli helper delle credenziali si trovino nel sistema PATH. Assicurati che il comando docker-credential-gcr si trovi nel sistema PATH.

  5. Per verificare che l'helper delle credenziali possa recuperare correttamente le tue credenziali, esegui questo comando:

    echo "https://HOSTNAME" | docker-credential-gcr get
    

    Sostituisci HOSTNAME con un nome host che hai aggiunto alla configurazione. Ad esempio:

    echo "https://u-france-east1-docker.s3nsregistry.fr" | docker-credential-gcr get
    

    Se il comando ha esito positivo, l'output JSON restituito include un token nel campo Secret. Ad esempio:

    {"ServerURL":"https://u-france-east1-docker.s3nsregistry.fr","Username":"_dcgcr_2_0_0_token","Secret":"ya29..."}
    

Docker è ora configurato per l'autenticazione con Artifact Registry. Per eseguire il push e il pull delle immagini, assicurati che le autorizzazioni siano configurate correttamente.

Token di accesso

Puoi generare un token di accesso OAuth di breve durata per l'autenticazione con Artifact Registry. Poiché il token è valido per 60 minuti, devi richiederlo meno di un'ora prima di utilizzarlo per connetterti ad Artifact Registry.

Per utilizzare un token di accesso con le credenziali dell'account di servizio:

  1. Crea un service account che agisca per conto della tua applicazione oppure scegli unaccount di serviziot esistente che utilizzi per l'automazione.

  2. Concedi il ruolo Artifact Registry specifico all'account di servizio per fornire l'accesso al repository.

  3. Genera un token di accesso per il account di servizio e autenticati:

    Devi disporre delle autorizzazioni nel ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) per rappresentare un service account, per ottenere un token e poi autenticarti come service account.

    Esegui questo comando, sostituendo ACCOUNT con l'indirizzo email del tuo account di servizio e LOCATION con la posizione regionale del repository.

    Linux

    gcloud auth print-access-token \
        --impersonate-service-account ACCOUNT | docker login \
        -u oauth2accesstoken \
        --password-stdin https://LOCATION-docker.s3nsregistry.fr
    

    Windows

    gcloud auth print-access-token --impersonate-service-account ACCOUNT | docker login -u oauth2accesstoken --password-stdin https://LOCATION-docker.s3nsregistry.fr
    

Ora Docker è autenticato con Artifact Registry.

Chiave account di servizio

Chiunque abbia accesso a una chiave privata valida per un account di servizio potrà accedere alle risorse tramite ilaccount di serviziot. Tieni presente che il ciclo di vita dell'accesso della chiave all'account di servizio (e quindi ai dati a cui l'account di servizio ha accesso) è indipendente dal ciclo di vita dell'utente che ha scaricato la chiave.

Utilizza le seguenti linee guida per limitare l'accesso ai tuoi repository:

  • Crea service account dedicati che vengono utilizzati solo per interagire con i repository.
  • Concedi il ruolo Artifact Registry specifico per l'accesso richiesto dall'account di servizio. Ad esempio, un account di servizio che scarica solo artefatti richiede solo il ruolo Lettore Artifact Registry.
  • Configura le autorizzazioni per i service account dedicati su ogni repository anziché a livello di progetto. Puoi quindi specificare l'accesso in base al contesto del repository. Ad esempio, un account di servizio per le build di sviluppo potrebbe avere il ruolo Lettore Artifact Registry per un repository di produzione e il ruolo Writer Artifact Registry per un repository di staging.
  • Segui le best practice per la gestione delle credenziali.

Per creare un nuovo account di servizio e una chiave del account di servizio da utilizzare solo con i repository Artifact Registry:

  1. Crea un service account che agisca per conto della tua applicazione oppure scegli un service account esistente che utilizzi per l'automazione.

    Per configurare l'autenticazione con Artifact Registry, devi conoscere la posizione del file delle chiavi del account di servizio. Per gli account esistenti, puoi visualizzare le chiavi e crearne di nuove nella pagina Account di servizio.

    Vai alla pagina Service account

  2. Se vuoi, puoi codificare in base64 tutti i contenuti del file di chiave.

    Linux

    base64 FILE-NAME > NEW-FILE-NAME
    

    macOS

    base64 -i FILE-NAME -o NEW-FILE-NAME
    

    Windows

    Base64.exe -e FILE-NAME > NEW-FILE-NAME
    

    dove FILE-NAME è il nome del file della chiave originale e NEW-FILE-NAME è il file della chiave codificato in Base64.

  3. Verifica che le autorizzazioni siano configurate correttamente per il account di servizio. Se utilizzi il account di servizio di Compute Engine, devi configurare correttamente sia le autorizzazioni sia gli ambiti di accesso.

  4. Utilizza la chiave dell'account di servizio per configurare l'integrazione con Docker:

    Esegui questo comando:

    Linux / macOS

    cat KEY-FILE | docker login -u KEY-TYPE --password-stdin \
    https://LOCATION-docker.s3nsregistry.fr
    

    Windows

    Get-Content KEY-FILE |
    docker login -u KEY-TYPE --password-stdin https://LOCATION-docker.s3nsregistry.fr
    

    Sostituisci quanto segue:

    • KEY-TYPE è uno dei seguenti:
      • _json_key se utilizzi la chiave dell'account di servizio in formato JSON così come è stata fornita al momento della creazione del file.
      • _json_key_base64 se hai codificato in base64 tutti i contenuti del file.
    • KEY-FILE è il nome del file della chiave dell'account di servizio in formato JSON.
    • LOCATION è la posizione regionale del repository in cui è archiviata l'immagine.

Ora Docker è autenticato con Artifact Registry.