Autenticación con repositorios de imágenes - AWS Elastic Beanstalk

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Autenticación con repositorios de imágenes

En este tema se describe cómo autenticarse en los repositorios de imágenes online con Elastic Beanstalk. En el caso de los repositorios privados, Elastic Beanstalk debe autenticarse antes de poder extraer e implementar las imágenes. Para Amazon ECR Public, la autenticación es opcional, pero ofrece límites de velocidad más altos y una fiabilidad mejorada.

Uso de imágenes de un repositorio de Amazon ECR

Puede almacenar sus imágenes de Docker personalizadas AWS con Amazon Elastic Container Registry (Amazon ECR).

Cuando guarda sus imágenes de Docker en Amazon ECR, Elastic Beanstalk se autentica automáticamente en el registro de Amazon ECR con el perfil de instancia del entorno. Por lo tanto, es necesario que proporcione a las instancias permiso para obtener acceso a las imágenes del repositorio de Amazon ECR. Para ello, añada permisos al perfil de instancia de su entorno adjuntando la política EC2 ContainerRegistryReadOnly gestionada por Amazon al perfil de instancia. Esto proporciona acceso de solo lectura a todos los repositorios de Amazon ECR de la cuenta. También puede obtener acceso a un único repositorio mediante la siguiente plantilla para crear una política personalizada:

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" ] } ] }

Sustituya el nombre de recurso de Amazon (ARN) en la política anterior por el ARN del repositorio.

Debe especificar la información de imagen en el archivo Dockerrun.aws.json. La configuración será diferente en función de la plataforma que utilice.

En la plataforma Docker administrada por ECS, utilice la clave image en un objeto de la definición de contenedor :

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

Para la plataforma Docker, consulte la imagen por URL. La URL figura en la definición Image del archivo Dockerrun.aws.json:

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

Mediante el AWS Systems Manager almacén de parámetros (SSM) o AWS Secrets Manager

Configure Elastic Beanstalk para que se autentique en su repositorio privado antes de la implementación a fin de permitir el acceso a las imágenes del contenedor.

Este enfoque utiliza la fase previa a la compilación del proceso de implementación de Elastic Beanstalk con dos componentes:

Los scripts de enlace recuperan de forma segura las credenciales de las variables de entorno que se rellenan desde el almacén de AWS Systems Manager parámetros o AWS Secrets Manager. Esta función requiere las plataformas Docker de Elastic Beanstalk y Docker gestionadas por ECS lanzadas a partir del 26 de marzo de 2025. Para obtener más información, consulte la configuración de variables de entorno.

Para configurar Elastic Beanstalk para que se autentique en su repositorio privado con Parameter Store o AWS Systems ManagerAWS Secrets Manager
nota

Antes de continuar, asegúrese de haber configurado sus credenciales en el almacén de AWS Systems Manager parámetros o de haber configurado los permisos de AWS Secrets Manager IAM necesarios. Consulte los requisitos previos para configurar los secretos como variables de entorno para obtener más información.

  1. Cree la siguiente estructura de directorios para su proyecto:

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile
  2. Utilice AWS Systems ManagerParameter Store o AWS Secrets Managerguarde las credenciales de su repositorio privado. En este ejemplo se muestran tanto el almacén de AWS Systems Manager parámetros como uno solo de estos servicios, AWS Secrets Manager pero puede optar por utilizar solo uno de estos servicios.

    aws ssm put-parameter --name USER --type SecureString --value "username" aws secretsmanager create-secret --name PASSWD --secret-string "passwd"
  3. Cree el siguiente archivo env.config y colóquelo en el directorio .ebextensions como se muestra en la estructura de directorios anterior. Esta configuración utiliza el espacio de aws:elasticbeanstalk:aplicación:secretos del entorno nombres para inicializar las variables de entorno y las de PASSWD Elastic USER Beanstalk en los valores que se almacenan en el almacén de parámetros de Systems Manager.

    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. Cree el siguiente archivo de script 01login.sh y colóquelo en los siguientes directorios (también se muestra en la estructura de directorios anterior):

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

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

    El 01login.sh script utiliza las variables de entorno configuradas en el paso 3 y pasa la contraseña de forma segura a via. docker login stdin Para obtener más información sobre la autenticación de Docker, consulte el inicio de sesión de Docker en la documentación de Docker.

    Notas
    • Los archivos de enlace pueden ser archivos binarios o archivos de script y deben comenzar con una línea #! que contenga la ruta del intérprete, como #!/bin/bash.

    • Para obtener más información, consulte Enlaces de la plataforma en Ampliación de plataformas Linux de Elastic Beanstalk.

Una vez configurada la autenticación, Elastic Beanstalk puede extraer e implementar imágenes de su repositorio privado.

Uso del archivo Dockerrun.aws.json

En esta sección se describe otro enfoque para que Elastic Beanstalk se autentique en un repositorio privado. Con este enfoque, se genera un archivo de autenticación con el comando Docker y, a continuación, se carga el archivo de autenticación en un bucket de Amazon S3. También debe incluir la información del bucket en el archivo Dockerrun.aws.json.

Para generar y proporcionar un archivo de autenticación a Elastic Beanstalk
  1. Genere un archivo de autenticación con el comando docker login. En el caso de los repositorios de Docker Hub, ejecute docker login:

    $ docker login

    En el caso de otros registros, incluya la URL del servidor del registro:

    $ docker login registry-server-url
    nota

    Si su entorno de Elastic Beanstalk utiliza la versión de la plataforma Docker AMI de Amazon Linux (precede a Amazon Linux 2), lea la información relevante en Configuración de Docker en la AMI de Amazon Linux (anterior a Amazon Linux 2).

    Para obtener más información sobre el archivo de autenticación, consulte Store images on Docker Hub y docker login en el sitio web de Docker.

  2. Cargue una copia del archivo de autenticación denominado .dockercfg en un bucket de Amazon S3 seguro.

    • El bucket de Amazon S3 debe estar alojado en el Región de AWS mismo entorno que el entorno que lo utiliza. Elastic Beanstalk no puede descargar archivos desde un bucket de Amazon S3 alojado en otras regiones.

    • Conceda permisos para la operación s3:GetObject al rol de IAM en el perfil de instancia. Para obtener más información, consulte Administración de perfiles de instancia de Elastic Beanstalk.

  3. Incluya la información del bucket de Amazon S3 en el parámetro Authentication en el archivo Dockerrun.aws.json.

    El siguiente ejemplo muestra el uso de un archivo de autenticación denominado mydockercfg en un bucket denominado amzn-s3-demo-bucket para utilizar una imagen privada de un registro de terceros. Para ver el número de versión correcto de AWSEBDockerrunVersion, consulte la nota que sigue al ejemplo.

    { "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" }
    Versiones de Dockerrun.aws.json

    El parámetro AWSEBDockerrunVersion indica la versión del archivo Dockerrun.aws.json.

    • Las plataformas Docker AL2 y AL2 023 utilizan las siguientes versiones del archivo.

      • Dockerrun.aws.json v3: entornos que usan Docker Compose.

      • Dockerrun.aws.json v1: entornos que no utilizan Docker Compose.

    • ECS que se ejecuta en Amazon Linux 2 y ECS que se ejecuta en AL2 023 utilizan el Dockerrun.aws.json v2 archivo. La plataforma retirada ECS-Multicontainer Docker Amazon Linux AMI (AL1) también utilizaba esta misma versión.

Cuando Elastic Beanstalk pueda autenticarse con el registro en línea que aloja el repositorio privado, se podrán implementar y extraer sus imágenes.

Uso de imágenes de Amazon ECR Public

Amazon ECR Public es un registro de contenedores público que aloja imágenes de Docker. Si bien los repositorios públicos de Amazon ECR son de acceso público, la autenticación proporciona límites de velocidad más altos y una mayor fiabilidad para las implementaciones.

nota

La autenticación pública de Amazon ECR no se admite en las regiones (cn-*) y AWS GovCloud regiones (us-gov-*) de China. En estas regiones, Elastic Beanstalk utilizará extracciones no autenticadas.

Para habilitar la autenticación pública de Amazon ECR, añada los siguientes permisos al perfil de instancia de su entorno. Para obtener más información sobre la autenticación pública de Amazon ECR, consulte Autenticación del registro en Amazon ECR public en la Guía del usuario de Amazon Elastic Container Registry Public:

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

Una vez que estos permisos estén asociados al perfil de la instancia, Elastic Beanstalk se autenticará automáticamente en los registros públicos de Amazon ECR. Puede hacer referencia a las imágenes públicas de Amazon ECR utilizando el public.ecr.aws/registry-alias/repository-name:tag formato estándar de su Dockerrun.aws.json archivo o Dockerfile.