Efetua login no cliente Docker local em um ou mais registros privados do Amazon ECR ou em um registro público do Amazon ECR.
Índice
Na nova versão principal desta ação, o valor padrão da entrada mask-password
mudou de false
para true
.
Se você não estiver consumindo as credenciais do Docker como saídas em trabalhos subsequentes, basta atualizar sua versão de ação para aws-actions/amazon-ecr-login@v2
.
Para qualquer cliente que consuma as credenciais do Docker como saídas em trabalhos subsequentes:
mask-password
, que atualmente é false
na v1, seu fluxo de trabalho será interrompido ao atualizar para a v2. Para corrigir isso, defina a entrada da senha da máscara como false
: - name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
mask-password
como false
, basta atualizar sua versão de ação para aws-actions/amazon-ecr-login@v2
.Para obter mais informações sobre o motivo dessa alteração, consulte Mascarar credenciais do Docker na ação de login do Amazon ECR.
- name : Checkout repo
uses : actions/checkout@v3
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4 # More information on this action can be found below in the 'AWS Credentials' section
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : aws-region-1
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
- name : Build, tag, and push docker image to Amazon ECR
env :
REGISTRY : ${{ steps.login-ecr.outputs.registry }}
REPOSITORY : my-ecr-repo
IMAGE_TAG : ${{ github.sha }}
run : |
docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG
- name : Login to Amazon ECR Public
id : login-ecr-public
uses : aws-actions/amazon-ecr-login@v2
with :
registry-type : public
- name : Build, tag, and push docker image to Amazon ECR Public
env :
REGISTRY : ${{ steps.login-ecr-public.outputs.registry }}
REGISTRY_ALIAS : my-ecr-public-registry-alias
REPOSITORY : my-ecr-public-repo
IMAGE_TAG : ${{ github.sha }}
run : |
docker build -t $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
- name : Package and push helm chart to Amazon ECR
env :
REGISTRY : ${{ steps.login-ecr.outputs.registry }}
REPOSITORY : my-ecr-repo
run : |
helm package $REPOSITORY
helm push $REPOSITORY-0.1.0.tgz oci://$REGISTRY
- name : Login to Amazon ECR Public
id : login-ecr-public
uses : aws-actions/amazon-ecr-login@v2
with :
registry-type : public
- name : Package and push helm chart to Amazon ECR Public
env :
REGISTRY : ${{ steps.login-ecr-public.outputs.registry }}
REGISTRY_ALIAS : my-ecr-public-registry-alias
REPOSITORY : my-ecr-public-repo
run : |
helm package $REPOSITORY
helm push $REPOSITORY-0.1.0.tgz oci://$REGISTRY/$REGISTRY_ALIAS
O Helm usa o mesmo armazenamento de credenciais que o Docker, portanto, o Helm pode autenticar com as mesmas credenciais usadas para o Docker.
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : aws-region-1
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
with :
registries : " 123456789012,998877665544 "
O repositório na conta 998877665544
precisa conceder acesso explicitamente à função: arn:aws:iam::123456789012:role/my-github-actions-role
para que o acesso entre contas funcione
Consulte os documentos da AWS para obter detalhes sobre como configurar políticas ECR
Use a ação para gerar suas credenciais do Docker para fazer login no ECR Private e, em seguida, use as credenciais para executar sua imagem privada como um serviço em outro trabalho.
Aviso
Definir mask-password
como 'false'
registrará a saída da senha do Docker se o log de depuração estiver habilitado. Para obter mais informações, consulte a seção Credenciais do Docker abaixo.
jobs :
login-to-amazon-ecr :
runs-on : ubuntu-latest
steps :
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : us-east-1
mask-aws-account-id : ' false '
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
with :
mask-password : ' false '
outputs :
registry : ${{ steps.login-ecr.outputs.registry }}
docker_username : ${{ steps.login-ecr.outputs.docker_username_123456789012_dkr_ecr_us_east_1_amazonaws_com }} # More information on these outputs can be found below in the 'Docker Credentials' section
docker_password : ${{ steps.login-ecr.outputs.docker_password_123456789012_dkr_ecr_us_east_1_amazonaws_com }}
run-with-internal-service :
name : Run something with an internal image as a service
needs : login-to-amazon-ecr
runs-on : ubuntu-latest
services :
internal-service :
image : ${{ needs.login-to-amazon-ecr.outputs.registry }}/my-ecr-repo:latest
credentials :
username : ${{ needs.login-to-amazon-ecr.outputs.docker_username }}
password : ${{ needs.login-to-amazon-ecr.outputs.docker_password }}
ports :
- ' 80:80 '
steps :
- name : Run steps in container
run : echo "run steps in container"
Consulte action.yml para obter a documentação completa das entradas e saídas desta ação.
Esta ação depende do comportamento padrão do AWS SDK para Javascript para determinar as credenciais e a região da AWS. Use a ação aws-actions/configure-aws-credentials
para configurar o ambiente GitHub Actions com uma função usando o provedor OIDC do GitHub e a região desejada.
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : us-east-1
- name : Login to Amazon ECR Private
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
Recomendamos seguir as práticas recomendadas do Amazon IAM ao usar serviços da AWS em fluxos de trabalho do GitHub Actions, incluindo:
aws-actions/configure-aws-credentials
para obter um exemplo.Os URIs de registro para ECR Privado e ECR Público são os seguintes:
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
Após fazer login, você pode acessar o nome de usuário e a senha do docker por meio de saídas de ação usando o seguinte formato:
Se estiver usando ECR Privado:
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
Se estiver usando ECR Público:
docker_username_public_ecr_aws
docker_password_public_ecr_aws
Importante
Se você não estiver usando as saídas de credenciais do Docker, certifique-se de que a entrada mask-password
não esteja definida ou definida como 'true'
. Isso mascara sua senha do Docker e evita que ela seja impressa nos logs de ação se você habilitar o log de depuração.
Se você estiver usando as saídas de credenciais do Docker, certifique-se de que a entrada mask-password
esteja definida como 'false'
. Valores mascarados não podem ser passados para trabalhos separados (veja este problema).
Se você executa em ambientes auto-hospedados e/ou em ambientes seguros onde precisa usar um proxy específico, você pode configurá-lo manualmente na ação.
Além disso, esta ação sempre considerará um proxy já configurado no ambiente.
Proxy configurado via entrada de ação:
uses : aws-actions/amazon-ecr-login@v2
with :
http-proxy : " http://companydomain.com:3128 "
Proxy configurado por meio de uma variável de ambiente:
# Your environment configuration
HTTP_PROXY= " http://companydomain.com:3128 "
A ação lerá a configuração de proxy subjacente do ambiente e você não precisa configurá-la na ação.
Para ver como e onde implementar as permissões abaixo, consulte a seção IAM no Guia do usuário do Amazon ECR.
Esta ação requer o seguinte conjunto mínimo de permissões para fazer login no ECR Private:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
Os comandos do Docker no fluxo de trabalho do GitHub Actions, como docker pull
e docker push
, podem exigir permissões adicionais anexadas às credenciais usadas por esta ação.
As seguintes permissões mínimas são necessárias para extrair uma imagem de um repositório ECR privado:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPull " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:BatchGetImage " ,
" ecr:GetDownloadUrlForLayer "
],
"Resource" : " arn:aws:ecr:us-east-1:123456789012:repository/my-ecr-repo "
}
]
}
As seguintes permissões mínimas são necessárias para enviar e extrair imagens em um repositório ECR privado:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPushPull " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:BatchGetImage " ,
" ecr:BatchCheckLayerAvailability " ,
" ecr:CompleteLayerUpload " ,
" ecr:GetDownloadUrlForLayer " ,
" ecr:InitiateLayerUpload " ,
" ecr:PutImage " ,
" ecr:UploadLayerPart "
],
"Resource" : " arn:aws:ecr:us-east-1:123456789012:repository/my-ecr-repo "
}
]
}
Para ver como e onde implementar as permissões abaixo, consulte a seção IAM no Guia público do usuário do Amazon ECR.
Esta ação requer o seguinte conjunto mínimo de permissões para fazer login no ECR Public:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
Os comandos do Docker no fluxo de trabalho do GitHub Actions, como docker push
, podem exigir permissões adicionais anexadas às credenciais usadas por esta ação. Não há permissões necessárias para extrair imagens do ECR Public.
As seguintes permissões mínimas são necessárias para enviar uma imagem para um repositório público do ECR:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPush " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:BatchCheckLayerAvailability " ,
" ecr-public:CompleteLayerUpload " ,
" ecr-public:InitiateLayerUpload " ,
" ecr-public:PutImage " ,
" ecr-public:UploadLayerPart "
],
"Resource" : " arn:aws:ecr-public::123456789012:repository/my-ecr-public-repo "
}
]
}
Inaccessible host: 'api.ecr-public.aws-region-1.amazonaws.com' at port 'undefined'. This service may not be available in the 'aws-region-1' region.
AWS_DEFAULT_REGION
está configurada como uma região onde o ECR Public não está disponível.us-east-1
. Na ação aws-actions/configure-aws-credentials
, a entrada aws-region
deve ser us-east-1
. GetAuthorizationToken command is only supported in us-east-1.
AWS_DEFAULT_REGION
está configurada como us-west-2
.us-east-1
. Na ação aws-actions/configure-aws-credentials
, a entrada aws-region
deve ser us-east-1
. Invalid parameter at 'registryIds' failed to satisfy constraint: 'Member must satisfy constraint: [Member must satisfy regular expression pattern: [0-9]{12}]'
registries
não é uma sequência de 12 dígitosregistries
, se o ID começar com 0, certifique-se de colocá-lo entre aspas. GitHub Actions lerá uma entrada como um número se todos os caracteres na entrada forem dígitos. Portanto, se o seu ID de registro começar com 0, o 0 será truncado. Veja a edição nº 225. Este código está disponível sob a licença do MIT.
Se você quiser relatar um possível problema de segurança neste projeto, não crie um problema no GitHub. Em vez disso, siga as instruções aqui ou envie um e-mail diretamente para a segurança da AWS.