Uso de imágenes de un repositorio privado en Elastic Beanstalk - 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.

Uso de imágenes de un repositorio privado en Elastic Beanstalk

En este tema se describe cómo autenticarse en un repositorio de imágenes en línea privado con Elastic Beanstalk. Elastic Beanstalk debe autenticarse en el registro en línea antes de poder extraer e implementar las imágenes. Existen varias opciones para hacerlo:

  • El ECR repositorio de Amazon

  • ¿El AWS Secrets Manager

  • El archivo Dockerrun.aws.json

Uso de imágenes de un ECR repositorio de Amazon

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

Al almacenar las imágenes de Docker en AmazonECR, Elastic Beanstalk se autentica automáticamente en el registro de Amazon con ECR el perfil de instancia de su entorno. Por lo tanto, tendrás que proporcionar permiso a tus instancias para acceder a las imágenes de tu ECR repositorio de Amazon. Para ello, añada permisos al perfil de instancia de su entorno adjuntando la política EC2ContainerRegistryReadOnly gestionada por Amazon al perfil de instancia. Esto proporciona acceso de solo lectura a todos los ECR repositorios de Amazon de tu cuenta. También tienes la opción de acceder solo a un repositorio mediante la siguiente plantilla para crear una política personalizada:

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

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

Deberás especificar la información de la imagen en tu Dockerrun.aws.json archivo. La configuración será diferente en función de la plataforma que utilices.

Para la plataforma Docker ECS administrada, usa la image clave en un objeto de 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 Esto URL va en la Image definición de su Dockerrun.aws.json archivo:

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

Usando AWS Secrets Manager

Puede configurar Elastic Beanstalk para que inicie sesión en su repositorio privado antes de que inicie el proceso de implementación. Esto permite a Elastic Beanstalk acceder a las imágenes desde el repositorio e implementar estas imágenes en su entorno Elastic Beanstalk.

Esta configuración inicia eventos en la fase de precompilación del proceso de implementación de Elastic Beanstalk. Esto se configura en el directorio de configuración .ebextentions. La configuración utiliza scripts de enlace de plataforma que llaman a docker login para la autenticación en el registro en línea que aloja el repositorio privado. A continuación, se presenta un desglose detallado de estos pasos de configuración.

Para configurar Elastic Beanstalk para que se autentique en su repositorio privado con AWS Secrets Manager
nota

Se deben otorgar permisos específicos para completar estos pasos. Para obtener más información, consulte las siguientes referencias.

  • En Paso 2, necesitará permisos para crear un secreto. Para obtener más información, consulte Ejemplo: permiso para crear secretos en la Guía del usuario de AWS Secrets Manager .

  • En Paso 3, necesitará permisos para recuperar secretos mediante las referencias dinámicas secretsmanager. Para obtener más información, consulte Ejemplo: Permiso para recuperar valores de secretos en la Guía del usuario de AWS Secrets Manager .

  1. Cree su estructura de directorios .ebextensions de la siguiente manera.

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
  2. AWS Secrets Manager Utilícelo para guardar las credenciales de su repositorio privado para que Elastic Beanstalk pueda recuperarlas cuando sea necesario. Para ello, ejecute el comando create-secret AWS CLI de Secrets Manager.

    aws secretsmanager create-secret \ --name MyTestSecret \ --description "My image repo credentials created with the CLI." \ --secret-string "{\"USER\":\"EXAMPLE-USERNAME\",\"PASSWD\":\"EXAMPLE-PASSWORD\"}"
  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 nombres aws:elasticbeanstalk:application:environment para iniciar las variables USER y PASSWD del entorno de Elastic Beanstalk con las referencias dinámicas a  AWS Secrets Manager. Para obtener más información sobre las referencias secretsmanager dinámicas, consulte Recuperar un AWS Secrets Manager secreto de un AWS CloudFormation recurso en la Guía del AWS Secrets Manager usuario.

    nota

    USER y PASSWD en el script deben coincidir con las mismas cadenas que se utilizan en el comando secretsmanager create-secret anterior.

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

    El script 01login.sh llama al script de la plataforma get-config para recuperar las credenciales del repositorio y, luego, inicia sesión en el repositorio. Almacena el nombre de usuario en la variable USER del script. En la siguiente línea, recupera la contraseña. En lugar de almacenar la contraseña en una variable, el script la envía directamente al comando docker login del flujo de entrada stdin. La opción --password-stdin usa el flujo de entrada, por lo que no tiene que almacenar la contraseña en una variable. Para obtener más información sobre la autenticación con la interfaz de la línea de comandos de Docker, consulte Docker login (Inicio de sesión de Docker) en el sitio web de documentación de Docker.

    Notas
    • Todos los archivos de script deben tener permiso de ejecución. Utilice chmod +x para configurar el permiso de ejecución de los archivos de enlace. Para todas las versiones de plataformas basadas en Amazon Linux 2 que se publicaron el 29 de abril de 2022 o en fecha posterior, Elastic Beanstalk automáticamente otorga permisos de ejecución a todos los scripts de enlace de plataforma. En este caso, no tiene que otorgar permisos de ejecución manualmente. Para obtener una lista de estas versiones de plataforma, consulte las notas de la versión del 29 de abril de 2022 - Plataforma Linux en la AWS Elastic Beanstalk Guía de notas de la versión.

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

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

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

    Para otros registros, incluya el del servidor URL de registros:

    $ docker login registry-server-url
    nota

    Si su entorno de Elastic Beanstalk utiliza la versión de la plataforma Docker de AMI Amazon Linux (anterior a Amazon Linux 2), lea la información pertinente en. Configuración de Docker en Amazon Linux AMI (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.

    • Otorgue permisos para la s3:GetObject operación al IAM rol en el perfil de la 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 correctoAWSEBDockerrunVersion, consulta 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 utilizan Docker Compose.

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

    • ECSsi se ejecuta en Amazon Linux 2 y ECSse ejecuta en AL2 023, se usa el Dockerrun.aws.json v2 archivo. La plataforma retirada ECS-The 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.