Utilizzo di immagini da un archivio privato in Elastic Beanstalk - 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à.

Utilizzo di immagini da un archivio privato in Elastic Beanstalk

Questo argomento descrive come autenticarsi in un archivio di immagini online privato con Elastic Beanstalk. Elastic Beanstalk deve autenticarsi con il registro online prima di poter estrarre e distribuire le immagini. Sono disponibili diverse opzioni di configurazione.

Utilizzo di immagini da un ECR repository Amazon

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

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

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

Sostituisci Amazon Resource Name (ARN) nella politica di cui sopra con il nome ARN del tuo 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 ECS gestita, 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 di. URL Ecco URL cosa c'è nella Image definizione del tuo Dockerrun.aws.json file:

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

Utilizzo di AWS Systems Manager (SSM) Archivio dei parametri

È possibile configurare Elastic Beanstalk per l'accesso al repository privato prima che inizi il processo di distribuzione. Ciò consente a Elastic Beanstalk di accedere alle immagini dal repository e distribuirle nell'ambiente Elastic Beanstalk in uso.

Questa configurazione avvia gli eventi nella fase di precompilazione del processo di distribuzione di Elastic Beanstalk. È possibile impostarlo nella directory di configurazione .ebextentions . La configurazione utilizza gli script di hook della piattaforma che chiamano docker login per autenticarsi nel Registro di sistema in linea che ospita il repository privato. Segue una descrizione dettagliata di questi passaggi di configurazione.

Per configurare Elastic Beanstalk per l'autenticazione nel tuo repository privato con AWS SSM
Nota

È necessario configurare AWS Systems Manager per completare questi passaggi. Per ulteriori informazioni, consultare la .AWS Systems Manager Guida per l'utente

  1. Creare la struttura di directory .ebextensions come segue.

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
  2. Utilizzo dell'AWS Systems ManagerParameter Store per salvare le credenziali del tuo repository privato in modo che Elastic Beanstalk possa recuperare le credenziali quando richiesto. A tale scopo, eseguire il comando put-parameter.

    aws ssm put-parameter --name USER --type String --value "username" aws ssm put-parameter --name PASSWD --type String --value "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 nomi aws:elasticbeanstalk:application:environment per inizializzare le variabili di ambiente ed Elastic Beanstalk sui valori nel USER Parameter Store. PASSWD SSM

    Nota

    USER e PASSWD nello script devono corrispondere alle stesse stringhe utilizzate nei comandi ssm put-parameter precedenti.

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:ssm:USER:1}}' PASSWD: '{{resolve:ssm:PASSWD:1}}'
  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 USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin

    Lo script 01login.sh chiama lo script della piattaforma get-config per recuperare le credenziali del repository. Memorizza il nome utente nella variabile USER. Nella riga successiva, recupera la password. Invece di memorizzare la password in una variabile, lo script reindirizza la password direttamente al comando docker login nel flusso di input stdin. L'opzione --password-stdin utilizza il flusso di input, quindi non è necessario memorizzare la password in una variabile. Per ulteriori informazioni sull'autenticazione con l'interfaccia a riga di comando Docker, consulta Accesso a Docker sul sito Web della documentazione Docker.

    Note
    • Tutti i file di script devono disporre del permesso di esecuzione. Utilizzare chmod +x per impostare l'autorizzazione di esecuzione sui file hook. Per tutte le versioni delle piattaforme basate su Amazon Linux 2 rilasciate il 29 aprile 2022, Elastic Beanstalk concede automaticamente le autorizzazioni di esecuzione a tutti gli script di hook della piattaforma. In questo caso non è necessario concedere manualmente le autorizzazioni di esecuzione. Per un elenco di queste versioni della piattaforma, consulta le note di rilascio della piattaforma Linux del 29 aprile 2022 nel AWS Elastic Beanstalk Guida alle note di rilascio.

    • 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.

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 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, URL includi il server di registro:

    $ docker login registry-server-url
    Nota

    Se il tuo ambiente Elastic Beanstalk utilizza la versione della piattaforma AMI Amazon Linux Docker (precedente ad Amazon Linux 2), leggi le informazioni pertinenti in. Configurazione Docker su Amazon Linux AMI (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 stesso Regione AWS come l'ambiente che lo utilizza. Elastic Beanstalk non può scaricare file da un bucket Amazon S3 ospitato in altre regioni.

    • Concedi le autorizzazioni per l's3:GetObjectoperazione al IAM ruolo 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, consultate 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.

    • ECSin esecuzione su Amazon Linux 2 e ECSin esecuzione su AL2 023 utilizza il Dockerrun.aws.json v2 file. La piattaforma ritirata ECS-Anche il Multicontainer Docker Amazon AMI Linux AL1 () utilizzava la 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.