Autenticazione con archivi di immagini - AWS Elastic Beanstalk

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Autenticazione con archivi di immagini

Questo argomento descrive come autenticarsi negli archivi di immagini online con Elastic Beanstalk. Per gli archivi privati, Elastic Beanstalk deve autenticarsi prima di poter estrarre e distribuire le immagini. Per Amazon ECR Public, l'autenticazione è facoltativa ma offre limiti di velocità più elevati e una maggiore affidabilità.

Utilizzo di immagini da un repository Amazon ECR

Puoi archiviare le tue immagini Docker personalizzate AWS con Amazon Elastic Container Registry (Amazon ECR).

Quando memorizzi le immagini Docker in Amazon ECR, Elastic Beanstalk si autentica automaticamente nel registro Amazon ECR con il profilo dell'istanza del tuo ambiente. Pertanto, dovrai fornire alle tue istanze l'autorizzazione ad accedere alle immagini nel tuo repository Amazon ECR. A tale scopo, aggiungi le autorizzazioni al profilo dell'istanza del tuo ambiente allegando la policy EC2 ContainerRegistryReadOnly gestita da Amazon al profilo dell'istanza. Ciò fornisce l'accesso in sola lettura a tutti i repository Amazon ECR del tuo account. Hai anche la possibilità di accedere solo a un singolo repository utilizzando il seguente modello per creare una politica personalizzata:

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:111122223333:repository/repository-name" ], "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

Sostituisci l'Amazon Resource Name (ARN) nella policy sopra indicata con l'ARN del repository.

Dovrai specificare le informazioni sull'immagine nel tuo Dockerrun.aws.json file. La configurazione sarà diversa a seconda della piattaforma utilizzata.

Per la piattaforma Docker gestita da ECS, usa la image chiave in un oggetto di definizione del contenitore:

"containerDefinitions": [ { "name": "my-image", "image": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest",

Per la piattaforma Docker, fai riferimento all'immagine tramite URL. L'URL rientra nella Image definizione del Dockerrun.aws.json file:

"Image": { "Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest", "Update": "true" },

Utilizzando AWS Systems Manager (SSM) Parameter Store o AWS Secrets Manager

Configura Elastic Beanstalk per l'autenticazione con il tuo repository privato prima della distribuzione per consentire l'accesso alle immagini del contenitore.

Questo approccio utilizza la fase di precompilazione del processo di distribuzione di Elastic Beanstalk con due componenti:

Gli script hook recuperano in modo sicuro le credenziali dalle variabili di ambiente compilate da Parameter Store o. AWS Systems Manager AWS Secrets ManagerQuesta funzionalità richiede le piattaforme Elastic Beanstalk Docker e ECS managed Docker rilasciate a partire dal 26 marzo 2025. Per maggiori dettagli, consulta Configurazione delle variabili di ambiente.

Per configurare Elastic Beanstalk per l'autenticazione nel tuo repository privato con Parameter Store o AWS Systems ManagerAWS Secrets Manager
Nota

Prima di procedere, assicurati di aver impostato le credenziali in AWS Systems Manager Parameter Store o AWS Secrets Manager di aver configurato le autorizzazioni IAM necessarie. Per i dettagli, consulta Prerequisiti per configurare i segreti come variabili di ambiente.

  1. Crea la seguente struttura di cartelle per il tuo progetto:

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile
  2. Usa AWS Systems ManagerParameter Store o AWS Secrets Managerper salvare le credenziali del tuo repository privato. Questo esempio mostra sia AWS Systems Manager Parameter Store che AWS Secrets Manager , ma puoi scegliere di utilizzare solo uno di questi servizi.

    aws ssm put-parameter --name USER --type SecureString --value "username" aws secretsmanager create-secret --name PASSWD --secret-string "passwd"
  3. Creare il file env.config seguente e posizionarlo nella directory .ebextensions, come mostrato nella struttura di directory precedente. Questa configurazione utilizza lo spazio dei aws: elasticbeanstalk:application:environmentsecrets nomi per inizializzare le variabili di ambiente PASSWD Elastic USER Beanstalk sui valori memorizzati nel Systems Manager Parameter Store.

    option_settings: aws:elasticbeanstalk:application:environmentsecrets: USER: arn:aws:ssm:us-east-1:111122223333:parameter/user PASSWD: arn:aws:secretsmanager:us-east-1:111122223333:passwd
  4. Creare il seguente file di script 01login.sh e inserirlo nelle seguenti directory (mostrate anche nella struttura di directory precedente):

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

    ### example 01login.sh #!/bin/bash echo $PASSWD | docker login -u $USER --password-stdin

    Lo 01login.sh script utilizza le variabili di ambiente configurate nel passaggio 3 e passa in modo sicuro la password a via. docker login stdin Per ulteriori informazioni sull'autenticazione Docker, consulta docker login nella documentazione Docker.

    Note
    • I file hook possono essere file binari oppure file di script che iniziano con una riga #! contenente il percorso dell'interprete, ad esempio #!/bin/bash.

    • Per maggiori informazioni, vedere Hook della piattaforma in Estensione di Elastic Beanstalk alle piattaforme Linux.

Una volta configurata l'autenticazione, Elastic Beanstalk può estrarre e distribuire immagini dal tuo repository privato.

Utilizzo del file Dockerrun.aws.json

In questa sezione viene descritto un altro approccio per l'autenticazione di Elastic Beanstalk in un repository privato. Con questo approccio, si genera un file di autenticazione con il comando Docker e quindi si carica il file di autenticazione in un bucket Amazon S3. È inoltre necessario includere le informazioni relative al bucket nel file Dockerrun.aws.json.

Per generare e fornire un file di autenticazione per Elastic Beanstalk
  1. Genera un file di autenticazione con il comando docker login. Per repository su Docker Hub, esegui docker login:

    $ docker login

    Per gli altri registri, includi l'URL del server di registro:

    $ docker login registry-server-url
    Nota

    Se l'ambiente Elastic Beanstalk utilizza la versione della piattaforma Docker su AMI Amazon Linux (precedente ad Amazon Linux 2), leggi le informazioni pertinenti in Configurazione Docker su AMI Amazon Linux (precedente ad Amazon Linux 2).

    Per ulteriori informazioni sul file di autenticazione, vedi Memorizzare le immagini in Docker Hub e login docker sul sito Web Docker.

  2. Carica una copia del file di autenticazione denominato .dockercfg in un bucket Amazon S3 protetto.

    • Il bucket Amazon S3 deve essere ospitato nello Regione AWS stesso ambiente che lo utilizza. Elastic Beanstalk non può scaricare file da un bucket Amazon S3 ospitato in altre regioni.

    • Concedi le autorizzazioni per l'operazione s3:GetObject al ruolo IAM nel profilo dell'istanza. Per ulteriori informazioni, consulta Gestione dei profili dell'istanza Elastic Beanstalk.

  3. Includi le informazioni sul bucket Amazon S3 nel parametro Authentication nel file Dockerrun.aws.json.

    Il seguente esempio mostra l'uso di un file di autenticazione denominato mydockercfg in un bucket denominato amzn-s3-demo-bucket per l'utilizzo di un'immagine privata in un registro di terze parti. Per il numero di versione corretto perAWSEBDockerrunVersion, consulta la nota che segue l'esempio.

    { "AWSEBDockerrunVersion": "version-no", "Authentication": { "Bucket": "amzn-s3-demo-bucket", "Key": "mydockercfg" }, "Image": { "Name": "quay.io/johndoe/private-image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx" }
    Versioni Dockerrun.aws.json

    Il parametro AWSEBDockerrunVersion indica la versione del file Dockerrun.aws.json.

    • Le piattaforme Docker AL2 e AL2 023 utilizzano le seguenti versioni del file.

      • Dockerrun.aws.json v3— ambienti che utilizzano Docker Compose.

      • Dockerrun.aws.json v1— ambienti che non utilizzano Docker Compose.

    • ECS in esecuzione su Amazon Linux 2 ed ECS in esecuzione su AL2 023 utilizzano il file. Dockerrun.aws.json v2 Anche la piattaforma ritirata ECS-The Multicontainer Docker Amazon Linux AMI AL1 () utilizzava questa stessa versione.

Quando Elastic Beanstalk sarà in grado di eseguire l'autenticazione con il registro online che ospita il repository privato, le immagini potranno essere distribuite ed estratte.

Utilizzo di immagini da Amazon ECR Public

Amazon ECR Public è un registro di container pubblico che ospita immagini Docker. Sebbene gli archivi pubblici di Amazon ECR siano accessibili al pubblico, l'autenticazione offre limiti di velocità più elevati e una migliore affidabilità per le distribuzioni.

Nota

L'autenticazione pubblica di Amazon ECR non è supportata nelle regioni (cn-*) e nelle AWS GovCloud regioni (us-gov-*) della Cina. In queste regioni, Elastic Beanstalk utilizzerà pull non autenticati.

Per abilitare l'autenticazione pubblica di Amazon ECR, aggiungi le seguenti autorizzazioni al profilo dell'istanza del tuo ambiente. Per ulteriori informazioni sull'autenticazione pubblica di Amazon ECR, consulta l'autenticazione del registro in Amazon ECR public nella Amazon Elastic Container Registry Public User Guide:

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr-public:GetAuthorizationToken", "sts:GetServiceBearerToken" ], "Resource": "*" } ] }

Una volta associate queste autorizzazioni al profilo dell'istanza, Elastic Beanstalk si autenticherà automaticamente con i registri pubblici di Amazon ECR. Puoi fare riferimento alle immagini pubbliche di Amazon ECR utilizzando il public.ecr.aws/registry-alias/repository-name:tag formato standard nel tuo Dockerrun.aws.json file o Dockerfile.