Salta al contenuto

Come faccio ad aggiornare le credenziali del mio repository privato su un agente container Amazon ECS?

5 minuti di lettura
0

Desidero aggiornare le credenziali del mio repository privato su un agente container Amazon Elastic Container Service (Amazon ECS) fornito tramite AWS Secrets Manager o variabili di ambiente.

Breve descrizione

Per fornire credenziali di repository private all'agente container Amazon ECS, utilizza Secrets Manager nella definizione dell'attività o nelle variabili di ambiente.

Nota: archiviare le credenziali come testo in chiaro sulle istanze di container non è una best practice. A meno che non la memorizzazione delle credenziali di registro all'interno dell'istanza di container non dipenda direttamente dall'architettura, utilizza Secrets Manager.

Risoluzione

Aggiorna le credenziali del repository privato con Secrets Manager

Completa i seguenti passaggi:

  1. Apri la console Secrets Manager.
  2. Scegli il segreto, quindi seleziona Recupera il valore del segreto.
  3. Scegli Modifica.
  4. Aggiorna le credenziali memorizzate per il registro privato e scegli Salva.
  5. Completa i passaggi indicati nella sezione Verifica le credenziali aggiornate del repository privato.

Aggiorna le credenziali del repository privato con variabili di ambiente

Completa i seguenti passaggi:

  1. Connettiti alla tua istanza di container.
  2. Per verificare come fornisci le credenziali Docker al tuo agente container ECS, esegui il seguente comando:
    $ cat /etc/ecs/ecs.config
    Il comando restituisce il contenuto del file /etc/ecs/ecs.config.

Se la variabile ECS_ENGINE_AUTH_TYPE è impostata su docker, significa che fornisci direttamente le tue credenziali Docker come testo in chiaro al tuo agente container ECS. Non è tuttavia una best practice utilizzare questo approccio. Utilizza invece Secrets Manager. Oppure utilizza l'approccio nel formato dockercfg descritto nella seguente sezione Ottieni un nuovo valore di autenticazione Docker.

Se la variabile ECS_ENGINE_AUTH_TYPE è impostata su dockercfg, significa che stai fornendo le tue credenziali Docker come valore di autenticazione generato da Docker tramite il comando docker login. Se utilizzi questo approccio, completa i passaggi nella sezione Ottieni un nuovo valore di autenticazione Docker.

Ottieni un nuovo valore di autenticazione Docker

Completa i seguenti passaggi:

  1. Per accedere localmente al tuo account Docker, esegui il seguente comando e inserisci le nuove credenziali:

    $ docker login
  2. Per concatenare il file config.json, esegui il seguente comando, quindi copia il valore di autenticazione generato da Docker:

    $ cat ~/.docker/config.json
  3. Per aggiornare la variabile ECS_ENGINE_AUTH_DATA, esegui il seguente comando:

    $ sudo vi /etc/ecs/ecs.config
  4. Nell'editor vi, aggiorna il valore della variabile ECS_ENGINE_AUTH_DATA con il valore di autenticazione Docker. Esempio:

    ECS_CLUSTER=TestECSCluster
    ECS_ENGINE_AUTH_TYPE=dockercfg
    ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"a2vpdGhhd3M6UGFzc3dvcmQ=","email":"email@example.com"}}
  5. Completa i passaggi indicati nella sezione Riavvia il tuo agente container ECS.

Riavvia il tuo agente container ECS

Completa i seguenti passaggi:

  1. Per riavviare l'agente container ECS, esegui uno dei seguenti comandi in base alle Amazon Machine Image (AMI) su cui sono in esecuzione le istanze di container.
    AMI Amazon Linux 2 ottimizzate per ECS:
    $ sudo systemctl restart ecs
    **Nota:**Amazon Linux 1 ha raggiunto la fine del ciclo di vita il 31 dicembre 2023. L'AMI Amazon Linux non riceverà più aggiornamenti di sicurezza o correzioni di bug. Per ulteriori informazioni, consulta Update on Amazon Linux AMI end-of-life (Aggiornamento sulla fine del ciclo di vita dell'AMI Amazon Linux).
    AMI Amazon Linux ottimizzate per ECS:
    $ sudo stop ecs && sudo start ecs
    Nota: per aggiornare il file /etc/ecs/ecs.config nelle altre istanze di container nel tuo cluster ECS, consulta Aggiorna le credenziali del repository privato con variabili di ambiente. Quindi segui la proceduta di aggiornamento per ogni istanza di container.
  2. Completa i passaggi indicati nella sezione Verifica le credenziali aggiornate del repository privato.

Verifica le credenziali aggiornate del repository privato

Nota: nel seguente esempio di test, un'immagine aggiornata viene distribuita in un cluster.

Completa i seguenti passaggi:

  1. Apri la console Amazon ECS.
  2. Nel pannello di navigazione, scegli Cluster, quindi seleziona il cluster.
  3. Seleziona il servizio, quindi scegli Aggiorna.
  4. Seleziona la casella di controllo Forza una nuova distribuzione.
  5. Seleziona Aggiorna.
  6. Nella scheda Distribuzioni, visualizza la nuova distribuzione. Amazon ECS arresta gradualmente le attività della distribuzione precedente. Quindi Amazon ECS riavvia le attività nella nuova distribuzione mentre ECS tenta di estrarre una nuova immagine.
    Nota: se utilizzi attività con tipo di avvio EC2, il cluster deve disporre di risorse sufficienti per eseguire correttamente un tipo di distribuzione con aggiornamento in sequenza.
  7. Scegli la scheda Attività, quindi esamina ogni singola attività e il relativo stato.

Se lo stato dell'attività è impostato su In esecuzione, il servizio ha aggiornato correttamente l'attività senza errori.

Se l'ultimo stato della nuova attività è impostato su Stopped | Task failed to start (Arrestata | Avvio dell'attività non riuscito), il servizio ha aggiornato l'attività e successivamente ha riscontrato un errore. L'agente container ECS non è in grado di estrarre una nuova immagine di container e utilizza la vecchia immagine memorizzata nella cache. Verifica che le tue credenziali siano state aggiornate, quindi esegui un altro aggiornamento di implementazione del servizio.

Nota: per visualizzare tutti i dettagli dell'attività e visualizzare l'errore "pull access denied", scegli l'ID dell'attività non riuscita. Nella pagina Descrizione, in Container, seleziona Arrestato.

Esempio di messaggio di errore:

"CannotPullContainerError: Error response from daemon: pull access denied for user/reponame, repository does not exist or may require 'docker login'"

Informazioni correlate

Configurazione dell'agente container Amazon ECS

Formati di autenticazione

AWS UFFICIALEAggiornata un anno fa