Connectez le client Docker local à un ou plusieurs registres privés Amazon ECR ou à un registre public Amazon ECR.
Table des matières
Dans la nouvelle version majeure de cette action, la valeur par défaut de l'entrée mask-password
est passée de false
à true
.
Si vous n'utilisez pas les informations d'identification Docker comme sorties dans les tâches suivantes, vous pouvez simplement mettre à jour votre version d'action vers aws-actions/amazon-ecr-login@v2
.
Pour tout client utilisant les informations d’identification Docker comme sorties dans les tâches suivantes :
mask-password
, qui est actuellement false
dans la v1, votre flux de travail sera interrompu lors de la mise à niveau vers la v2. Pour résoudre ce problème, veuillez définir l'entrée du mot de passe du masque sur false
: - name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
mask-password
sur false
, vous pouvez simplement mettre à jour votre version d'action vers aws-actions/amazon-ecr-login@v2
.Pour plus d'informations sur la raison pour laquelle cette modification est effectuée, consultez Masquage des informations d'identification Docker dans l'action de connexion 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 utilise le même magasin d'informations d'identification que Docker, afin que Helm puisse s'authentifier avec les mêmes informations d'identification que vous utilisez pour 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 "
Le référentiel du compte 998877665544
doit accorder explicitement l'accès au rôle : arn:aws:iam::123456789012:role/my-github-actions-role
pour que l'accès entre comptes fonctionne.
Veuillez vous référer aux documents AWS pour plus de détails sur la configuration des stratégies ECR.
Utilisez l'action pour afficher vos informations d'identification Docker pour vous connecter à ECR Private, puis utilisez les informations d'identification pour exécuter votre image privée en tant que service dans une autre tâche.
Avertissement
La définition mask-password
sur 'false'
enregistrera la sortie de votre mot de passe Docker si la journalisation du débogage est activée. Pour plus d’informations, consultez la section Informations d’identification Docker ci-dessous.
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"
Voir action.yml pour la documentation complète sur les entrées et sorties de cette action.
Cette action s'appuie sur le comportement par défaut du kit AWS SDK pour Javascript pour déterminer les informations d'identification et la région AWS. Utilisez l'action aws-actions/configure-aws-credentials
pour configurer l'environnement GitHub Actions avec un rôle utilisant le fournisseur OIDC de GitHub et la région souhaitée.
- 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
Nous vous recommandons de suivre les bonnes pratiques d'Amazon IAM lors de l'utilisation des services AWS dans les workflows GitHub Actions, notamment :
aws-actions/configure-aws-credentials
pour obtenir un exemple.Les URI de registre pour ECR Private et ECR Public sont les suivants :
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
Une fois connecté, vous pouvez accéder au nom d'utilisateur et au mot de passe du docker via les sorties d'action en utilisant le format suivant :
Si vous utilisez ECR Private :
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
Si vous utilisez ECR Public :
docker_username_public_ecr_aws
docker_password_public_ecr_aws
Important
Si vous n'utilisez pas les sorties d'informations d'identification Docker, assurez-vous que l'entrée mask-password
n'est pas définie ou définie sur 'true'
. Cela masque votre mot de passe Docker et empêche son impression dans les journaux d'actions si vous activez la journalisation du débogage.
Si vous utilisez les sorties d'informations d'identification Docker, assurez-vous que l'entrée mask-password
est définie sur 'false'
. Les valeurs masquées ne peuvent pas être transmises à des tâches distinctes (voir ce problème).
Si vous exécutez dans des environnements auto-hébergés et/ou dans des environnements sécurisés où vous devez utiliser un proxy spécifique, vous pouvez le définir manuellement dans l'action.
De plus, cette action prendra toujours en compte un proxy déjà configuré dans l'environnement.
Proxy configuré via l'entrée d'action :
uses : aws-actions/amazon-ecr-login@v2
with :
http-proxy : " http://companydomain.com:3128 "
Proxy configuré via une variable d'environnement :
# Your environment configuration
HTTP_PROXY= " http://companydomain.com:3128 "
L'action lira la configuration du proxy sous-jacent à partir de l'environnement et vous n'aurez pas besoin de la configurer dans l'action.
Pour voir comment et où implémenter les autorisations ci-dessous, consultez la section IAM dans le Guide de l'utilisateur Amazon ECR.
Cette action nécessite l'ensemble minimum d'autorisations suivant pour se connecter à ECR Private :
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
Les commandes Docker de votre flux de travail GitHub Actions, comme docker pull
et docker push
, peuvent nécessiter des autorisations supplémentaires attachées aux informations d'identification utilisées par cette action.
Les autorisations minimales suivantes sont requises pour extraire une image d'un référentiel privé 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 "
}
]
}
Les autorisations minimales suivantes sont requises pour pousser et extraire des images dans un référentiel privé 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 "
}
]
}
Pour savoir comment et où implémenter les autorisations ci-dessous, consultez la section IAM dans le Guide de l'utilisateur public Amazon ECR.
Cette action nécessite l'ensemble minimum d'autorisations suivant pour se connecter à ECR Public :
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
Les commandes Docker de votre workflow GitHub Actions, comme docker push
, peuvent nécessiter des autorisations supplémentaires attachées aux informations d'identification utilisées par cette action. Aucune autorisation n'est requise pour extraire des images d'ECR Public.
Les autorisations minimales suivantes sont requises pour transférer une image vers un référentiel public 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 configurée comme une région dans laquelle ECR Public n'est pas disponible.us-east-1
. Dans l'action aws-actions/configure-aws-credentials
, l'entrée aws-region
doit être us-east-1
. GetAuthorizationToken command is only supported in us-east-1.
AWS_DEFAULT_REGION
est configurée comme us-west-2
.us-east-1
. Dans l'action aws-actions/configure-aws-credentials
, l'entrée aws-region
doit être 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'est pas une séquence de 12 chiffres.registries
, si l’ID commence par 0, assurez-vous de le mettre entre guillemets. GitHub Actions lira une entrée sous forme de nombre si tous les caractères de l'entrée sont des chiffres. Ainsi, si votre identifiant de registre commence par un 0, le 0 sera tronqué. Voir le numéro 225. Ce code est mis à disposition sous la licence MIT.
Si vous souhaitez signaler un problème de sécurité potentiel dans ce projet, veuillez ne pas créer de problème GitHub. Au lieu de cela, veuillez suivre les instructions ici ou envoyer un e-mail directement à la sécurité AWS.