Inicia sesión en el cliente Docker local en uno o más registros privados de Amazon ECR o en un registro público de Amazon ECR.
Tabla de contenido
En la nueva versión principal para esta acción, el valor predeterminado de la entrada mask-password
ha cambiado de false
a true
.
Si no utiliza las credenciales de Docker como resultados en trabajos posteriores, simplemente puede actualizar la versión de su acción a aws-actions/amazon-ecr-login@v2
.
Para cualquier cliente que consuma las credenciales de Docker como resultados en trabajos posteriores:
mask-password
, que actualmente es false
en la versión 1, su flujo de trabajo se interrumpirá al actualizar a la versión 2. Para solucionar este problema, establezca la entrada de contraseña de máscara en false
: - name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
mask-password
en false
, simplemente puede actualizar la versión de su acción a aws-actions/amazon-ecr-login@v2
.Para obtener más información sobre por qué se realiza este cambio, consulte Enmascaramiento de credenciales de Docker en la acción de inicio de sesión de 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
Helm usa el mismo almacén de credenciales que Docker, por lo que Helm puede autenticarse con las mismas credenciales que usted usa para 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 "
El repositorio de la cuenta 998877665544
debe otorgar acceso explícito al rol: arn:aws:iam::123456789012:role/my-github-actions-role
para que funcione el acceso entre cuentas
Consulte los documentos de AWS para obtener detalles sobre cómo configurar políticas de ECR.
Utilice la acción para generar sus credenciales de Docker para iniciar sesión en ECR Private, luego use las credenciales para ejecutar su imagen privada como un servicio en otro trabajo.
Advertencia
Configurar mask-password
en 'false'
registrará la salida de su contraseña de Docker si el registro de depuración está habilitado. Para obtener más información, consulte la sección Credenciales de Docker a continuación.
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 obtener la documentación completa de las entradas y salidas de esta acción.
Esta acción se basa en el comportamiento predeterminado de AWS SDK para Javascript para determinar las credenciales y la región de AWS. Utilice la acción aws-actions/configure-aws-credentials
para configurar el entorno de GitHub Actions con un rol utilizando el proveedor OIDC de GitHub y su región deseada.
- 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 las mejores prácticas de Amazon IAM al utilizar servicios de AWS en flujos de trabajo de GitHub Actions, que incluyen:
aws-actions/configure-aws-credentials
para obtener un ejemplo.Los URI de registro para ECR Private y ECR Public son los siguientes:
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
Después de iniciar sesión, puede acceder al nombre de usuario y la contraseña de Docker a través de salidas de acción utilizando el siguiente formato:
Si utiliza ECR Privado:
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
Si utiliza ECR Público:
docker_username_public_ecr_aws
docker_password_public_ecr_aws
Importante
Si no está utilizando las salidas de credenciales de Docker, asegúrese de que la entrada mask-password
no esté configurada o configurada en 'true'
. Esto enmascara su contraseña de Docker y evita que se imprima en los registros de acciones si habilita el registro de depuración.
Si está utilizando las salidas de credenciales de Docker, asegúrese de que la entrada mask-password
esté configurada en 'false'
. Los valores enmascarados no se pueden pasar a trabajos separados (consulte este problema).
Si ejecuta en entornos autohospedados y/o en entornos seguros donde necesita usar un proxy específico, puede configurarlo en la acción manualmente.
Además, esta acción siempre considerará un proxy ya configurado en el entorno.
Proxy configurado mediante entrada de acción:
uses : aws-actions/amazon-ecr-login@v2
with :
http-proxy : " http://companydomain.com:3128 "
Proxy configurado a través de una variable de entorno:
# Your environment configuration
HTTP_PROXY= " http://companydomain.com:3128 "
La acción leerá la configuración del proxy subyacente del entorno y no es necesario configurarla en la acción.
Para ver cómo y dónde implementar los permisos siguientes, consulte la sección IAM en la Guía del usuario de Amazon ECR.
Esta acción requiere el siguiente conjunto mínimo de permisos para iniciar sesión en ECR Private:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
Los comandos de Docker en tu flujo de trabajo de GitHub Actions, como docker pull
y docker push
, pueden requerir permisos adicionales adjuntos a las credenciales utilizadas por esta acción.
Se requieren los siguientes permisos mínimos para extraer una imagen de un repositorio privado de ECR:
{
"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 "
}
]
}
Se requieren los siguientes permisos mínimos para enviar y extraer imágenes en un repositorio privado de ECR:
{
"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 cómo y dónde implementar los permisos siguientes, consulte la sección IAM en la Guía pública del usuario de Amazon ECR.
Esta acción requiere el siguiente conjunto mínimo de permisos para iniciar sesión en ECR Public:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
Los comandos de Docker en tu flujo de trabajo de GitHub Actions, como docker push
, pueden requerir permisos adicionales adjuntos a las credenciales utilizadas por esta acción. No se necesitan permisos para extraer imágenes de ECR Public.
Se requieren los siguientes permisos mínimos para enviar una imagen a un repositorio público de 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 una región donde ECR público no está disponible.us-east-1
. En la acción aws-actions/configure-aws-credentials
, la entrada aws-region
debe 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
. En la acción aws-actions/configure-aws-credentials
, la entrada aws-region
debe 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
no es una secuencia de 12 dígitosregistries
, si el ID comienza con 0, asegúrese de incluirlo entre comillas. GitHub Actions leerá una entrada como un número si todos los caracteres de la entrada son dígitos. Entonces, si su ID de registro comienza con 0, el 0 se truncará. Consulte el número 225. Este código está disponible bajo la licencia MIT.
Si desea informar un posible problema de seguridad en este proyecto, no cree un problema de GitHub. En su lugar, siga las instrucciones aquí o envíe un correo electrónico a seguridad de AWS directamente.