Autenticação com repositórios de imagens - AWS Elastic Beanstalk

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Autenticação com repositórios de imagens

Este tópico descreve como se autenticar em repositórios de imagens on-line com o Elastic Beanstalk. Para repositórios privados, o Elastic Beanstalk deve se autenticar antes de extrair e implantar suas imagens. Para o Amazon ECR Public, a autenticação é opcional, mas fornece limites de taxa mais altos e maior confiabilidade.

Usar imagens de um repositório do Amazon ECR

Você pode armazenar suas imagens personalizadas do Docker AWS com o Amazon Elastic Container Registry (Amazon ECR).

Quando você armazena suas imagens do Docker no Amazon ECR, o Elastic Beanstalk autentica automaticamente no registro do Amazon ECR no perfil de instância do ambiente. Portanto, você precisará fornecer às suas instâncias permissão para acessar as imagens no seu repositório do Amazon ECR. Para fazer isso, adicione permissões ao perfil de instância do seu ambiente anexando a política EC2 ContainerRegistryReadOnly gerenciada da Amazon ao perfil da instância. Isso fornece acesso somente leitura a todos os repositórios do Amazon ECR na sua conta. Você também tem a opção de acessar apenas um único repositório usando o seguinte modelo para criar uma 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" ] } ] }

Substitua o nome de recurso da Amazon (ARN) na política acima pelo ARN de seu repositório.

Você precisará especificar as informações da imagem no arquivo Dockerrun.aws.json. A configuração será diferente dependendo da plataforma usada.

Para a plataforma Docker gerenciada pelo ECS, use a chave image em um objeto de definição de contêiner :

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

Para a plataforma Docker, consulte a imagem por URL. O URL vai na definição Image do seu arquivo Dockerrun.aws.json:

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

Usando o AWS Systems Manager (SSM) Parameter Store ou AWS Secrets Manager

Configure o Elastic Beanstalk para se autenticar com seu repositório privado antes da implantação para permitir o acesso às imagens do seu contêiner.

Essa abordagem usa a fase de pré-construção do processo de implantação do Elastic Beanstalk com dois componentes:

Os scripts de gancho recuperam com segurança as credenciais das variáveis de ambiente que são preenchidas no Parameter Store ou. AWS Systems Manager AWS Secrets ManagerEsse recurso requer plataformas Elastic Beanstalk Docker e Docker gerenciadas por ECS lançadas em ou após 26 de março de 2025. Para obter mais detalhes, consulte a configuração da variável de ambiente.

Para configurar o Elastic Beanstalk para se autenticar em seu repositório privado com o Parameter Store ou AWS Systems ManagerAWS Secrets Manager
nota

Antes de continuar, verifique se você configurou suas credenciais no AWS Systems Manager Parameter Store ou configurou AWS Secrets Manager as permissões necessárias do IAM. Consulte Pré-requisitos para configurar segredos como variáveis de ambiente para obter detalhes.

  1. Crie a seguinte estrutura de diretórios para seu projeto:

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile
  2. Use o AWS Systems ManagerParameter Store ou AWS Secrets Managerpara salvar as credenciais do seu repositório privado. Este exemplo mostra o AWS Systems Manager Parameter Store e AWS Secrets Manager , mas você pode optar por usar apenas um desses serviços.

    aws ssm put-parameter --name USER --type SecureString --value "username" aws secretsmanager create-secret --name PASSWD --secret-string "passwd"
  3. Crie o seguinte arquivo env.config e coloque-o no diretório .ebextensions, como mostrado na estrutura de diretórios anterior. Essa configuração usa o aws: elasticbeanstalk: aplicação: segredos do meio ambiente namespace para inicializar as variáveis de ambiente e do PASSWD Elastic USER Beanstalk com os valores armazenados no Systems Manager Parameter Store.

    nota

    Verifique os nomes das variáveis USER e PASSWD corresponda aos nomes dos parâmetros usados nos comandos put-parameter e create-secret.

    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. Crie o seguinte arquivo de script 01login.sh e coloque-o nos seguintes diretórios (também mostrado na estrutura de diretórios anterior):

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

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

    O 01login.sh script usa as variáveis de ambiente configuradas na Etapa 3 e passa com segurança a senha para docker login via. stdin Para obter mais informações sobre a autenticação do Docker, consulte docker login na documentação do Docker.

    Observações
    • Os arquivos de hook podem ser arquivos binários ou arquivos de script que começam com uma linha #! contendo seu caminho de interpretador, como #!/bin/bash.

    • Para obter mais informações, consulte Hooks de plataforma em Estender as plataformas do Elastic Beanstalk Linux.

Depois que a autenticação estiver configurada, o Elastic Beanstalk poderá extrair e implantar imagens do seu repositório privado.

Usar o arquivo Dockerrun.aws.json

Esta seção descreve outra abordagem para autenticar o Elastic Beanstalk em um repositório privado. Com essa abordagem, gere um arquivo de autenticação com o comando do Docker e, depois, carregue o arquivo de autenticação em um bucket do Amazon S3. Você também deve incluir as informações do bucket no arquivo Dockerrun.aws.json.

Como gerar e fornecer um arquivo de autenticação ao Elastic Beanstalk
  1. Gere um arquivo de autenticação com o comando docker login. Para repositórios no Docker Hub, execute docker login:

    $ docker login

    Para outros registros, inclua o URL do servidor de registro:

    $ docker login registry-server-url
    nota

    Se o ambiente do Elastic Beanstalk usar a versão da plataforma Docker da AMI do Amazon Linux (que precede o Amazon Linux 2), leia as informações relevantes em Configuração do Docker na AMI do Amazon Linux (que precede o Amazon Linux 2).

    Para obter mais informações sobre o arquivo de autenticação, consulte Store images on Docker Hub e docker login no site do Docker.

  2. Faça upload de uma cópia do arquivo de autenticação chamado .dockercfg em um bucket do Amazon S3 seguro.

    • O bucket do Amazon S3 deve ser hospedado no Região da AWS mesmo ambiente que o está usando. O Elastic Beanstalk não pode fazer download de arquivos de um bucket do Amazon S3 hospedado em outras regiões.

    • Conceda permissões para a operação s3:GetObject à função do IAM no perfil da instância. Para obter mais informações, consulte Gerenciar perfis de instância do Elastic Beanstalk.

  3. Inclua as informações do bucket do Amazon S3 no parâmetro Authentication no arquivo Dockerrun.aws.json.

    O exemplo a seguir mostra o uso de um arquivo de autenticação chamado mydockercfg em um bucket chamado amzn-s3-demo-bucket para usar uma imagem privada em um registro de terceiros. Para obter o número de versão correto para o AWSEBDockerrunVersion, consulte a observação que segue o exemplo.

    { "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" }
    Versões do Dockerrun.aws.json

    O parâmetro AWSEBDockerrunVersion indica a versão do arquivo Dockerrun.aws.json.

    • As plataformas Docker AL2 e AL2 023 usam as seguintes versões do arquivo.

      • Dockerrun.aws.json v3: ambientes que usam o Docker Compose.

      • Dockerrun.aws.json v1: ambientes que não usam o Docker Compose.

    • O ECS executado no Amazon Linux 2 e o ECS executado no AL2 023 usam o arquivo. Dockerrun.aws.json v2 A plataforma descontinuada ECS-The Multicontainer Docker Amazon Linux AMI (AL1) também usou essa mesma versão.

Depois que o Elastic Beanstalk puder autenticar com o registro online que hospeda o repositório privado, as imagens poderão ser implantadas e extraídas.

Usando imagens do Amazon ECR Public

O Amazon ECR Public é um registro público de contêineres que hospeda imagens do Docker. Embora os repositórios públicos do Amazon ECR estejam acessíveis ao público, a autenticação fornece limites de taxa mais altos e melhor confiabilidade para suas implantações.

nota

A autenticação pública do Amazon ECR não é suportada nas regiões (cn-*) e AWS GovCloud regiões (us-gov-*) da China. Nessas regiões, o Elastic Beanstalk usará pulls não autenticados.

Para habilitar a autenticação pública do Amazon ECR, adicione as seguintes permissões ao perfil de instância do seu ambiente. Para obter mais informações sobre a autenticação pública do Amazon ECR, consulte Autenticação do registro no Amazon ECR public no Guia do usuário público do Amazon Elastic Container Registry:

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

Depois que essas permissões forem anexadas ao seu perfil de instância, o Elastic Beanstalk se autenticará automaticamente nos registros públicos do Amazon ECR. Você pode referenciar imagens públicas do Amazon ECR usando o public.ecr.aws/registry-alias/repository-name:tag formato padrão em seu Dockerrun.aws.json arquivo ou Dockerfile.