Meldet den lokalen Docker-Client bei einer oder mehreren privaten Amazon ECR-Registrierungen oder einer öffentlichen Amazon ECR-Registrierung an.
Inhaltsverzeichnis
In der neuen Hauptversion dieser Aktion hat sich der Standardwert der mask-password
Eingabe von false
in true
geändert.
Wenn Sie die Docker-Anmeldeinformationen nicht als Ausgaben in nachfolgenden Jobs verwenden, können Sie Ihre Aktionsversion einfach auf aws-actions/amazon-ecr-login@v2
aktualisieren.
Für jeden Kunden, der die Docker-Anmeldeinformationen als Ausgaben in nachfolgenden Jobs nutzt:
mask-password
Eingabe verlassen, der derzeit in Version 1 false
ist, wird Ihr Workflow beim Upgrade auf Version 2 unterbrochen. Um dies zu beheben, setzen Sie bitte die Masken-Passwort-Eingabe auf false
: - name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
mask-password
Eingabe bereits auf false
setzen, können Sie Ihre Aktionsversion einfach auf aws-actions/amazon-ecr-login@v2
aktualisieren.Weitere Informationen dazu, warum diese Änderung vorgenommen wird, finden Sie unter Maskieren von Docker-Anmeldeinformationen in der Amazon ECR-Anmeldeaktion.
- 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 verwendet denselben Anmeldeinformationsspeicher wie Docker, sodass Helm sich mit denselben Anmeldeinformationen authentifizieren kann, die Sie für Docker verwenden.
- 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 "
Das Repository auf dem Konto 998877665544
muss der Rolle explizit Zugriff gewähren: arn:aws:iam::123456789012:role/my-github-actions-role
damit der kontoübergreifende Zugriff funktioniert
Weitere Informationen zum Konfigurieren von ECR-Richtlinien finden Sie in den AWS-Dokumenten
Verwenden Sie die Aktion, um Ihre Docker-Anmeldeinformationen für die Anmeldung bei ECR Private auszugeben, und verwenden Sie dann die Anmeldeinformationen, um Ihr privates Image als Dienst in einem anderen Job auszuführen.
Warnung
Wenn Sie mask-password
auf 'false'
setzen, wird Ihre Docker-Passwortausgabe protokolliert, wenn die Debug-Protokollierung aktiviert ist. Weitere Informationen finden Sie im Abschnitt „Docker-Anmeldeinformationen“ weiter unten.
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"
Die vollständige Dokumentation zu den Ein- und Ausgaben dieser Aktion finden Sie in action.yml.
Diese Aktion basiert auf dem Standardverhalten des AWS SDK für Javascript, um AWS-Anmeldeinformationen und -Region zu bestimmen. Verwenden Sie die Aktion aws-actions/configure-aws-credentials
um die GitHub Actions-Umgebung mit einer Rolle zu konfigurieren, die den OIDC-Anbieter von GitHub und Ihre gewünschte Region verwendet.
- 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
Wir empfehlen, bei der Verwendung von AWS-Services in GitHub Actions-Workflows die Best Practices von Amazon IAM zu befolgen, darunter:
aws-actions/configure-aws-credentials
.Die Registrierungs-URIs für ECR Private und ECR Public lauten wie folgt:
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
Nach der Anmeldung können Sie über Aktionsausgaben im folgenden Format auf den Docker-Benutzernamen und das Docker-Passwort zugreifen:
Bei Verwendung von ECR Private:
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
Bei Verwendung von ECR Public:
docker_username_public_ecr_aws
docker_password_public_ecr_aws
Wichtig
Wenn Sie die Docker-Anmeldeinformationsausgaben nicht verwenden, stellen Sie sicher, dass die Eingabe mask-password
nicht oder nicht auf 'true'
gesetzt ist. Dadurch wird Ihr Docker-Passwort maskiert und verhindert, dass es in den Aktionsprotokollen gedruckt wird, wenn Sie die Debug-Protokollierung aktivieren.
Wenn Sie die Docker-Anmeldeinformationsausgaben verwenden, stellen Sie sicher, dass die Eingabe mask-password
auf 'false'
gesetzt ist. Maskierte Werte können nicht an separate Jobs übergeben werden (siehe dieses Problem).
Wenn Sie in selbst gehosteten Umgebungen und/oder in gesicherten Umgebungen arbeiten, in denen Sie einen bestimmten Proxy verwenden müssen, können Sie ihn manuell in der Aktion festlegen.
Darüber hinaus berücksichtigt diese Aktion immer einen bereits konfigurierten Proxy in der Umgebung.
Über Aktionseingabe konfigurierter Proxy:
uses : aws-actions/amazon-ecr-login@v2
with :
http-proxy : " http://companydomain.com:3128 "
Über eine Umgebungsvariable konfigurierter Proxy:
# Your environment configuration
HTTP_PROXY= " http://companydomain.com:3128 "
Die Aktion liest die zugrunde liegende Proxy-Konfiguration aus der Umgebung und Sie müssen sie nicht in der Aktion konfigurieren.
Informationen dazu, wie und wo die folgenden Berechtigungen implementiert werden können, finden Sie im Abschnitt „IAM“ im Amazon ECR-Benutzerhandbuch.
Diese Aktion erfordert die folgenden Mindestberechtigungen für die Anmeldung bei ECR Private:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
Docker-Befehle in Ihrem GitHub Actions-Workflow, wie docker pull
und docker push
, erfordern möglicherweise zusätzliche Berechtigungen, die mit den von dieser Aktion verwendeten Anmeldeinformationen verknüpft sind.
Zum Abrufen eines Bilds aus einem privaten ECR-Repository sind die folgenden Mindestberechtigungen erforderlich:
{
"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 "
}
]
}
Für das Pushen und Pullen von Bildern in einem privaten ECR-Repository sind die folgenden Mindestberechtigungen erforderlich:
{
"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 "
}
]
}
Informationen dazu, wie und wo die folgenden Berechtigungen implementiert werden können, finden Sie im Abschnitt „IAM“ im Amazon ECR Public User Guide.
Diese Aktion erfordert die folgenden Mindestberechtigungen für die Anmeldung bei ECR Public:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
Docker-Befehle in Ihrem GitHub Actions-Workflow, wie z. B. docker push
, erfordern möglicherweise zusätzliche Berechtigungen, die mit den von dieser Aktion verwendeten Anmeldeinformationen verknüpft sind. Für das Abrufen von Bildern aus ECR Public sind keine Berechtigungen erforderlich.
Um ein Bild in ein öffentliches ECR-Repository zu übertragen, sind die folgenden Mindestberechtigungen erforderlich:
{
"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
ist als Region konfiguriert, in der ECR Public nicht verfügbar ist.us-east-1
angemeldet werden. In der Aktion aws-actions/configure-aws-credentials
muss die aws-region
Eingabe us-east-1
lauten. GetAuthorizationToken command is only supported in us-east-1.
AWS_DEFAULT_REGION
ist als us-west-2
konfiguriert.us-east-1
angemeldet werden. In der Aktion aws-actions/configure-aws-credentials
muss die aws-region
Eingabe us-east-1
lauten. Invalid parameter at 'registryIds' failed to satisfy constraint: 'Member must satisfy constraint: [Member must satisfy regular expression pattern: [0-9]{12}]'
registries
angegeben haben, ist keine Folge von 12 Ziffernregistries
nur eine einzige Registrierungs-ID angeben, stellen Sie sicher, dass die ID in Anführungszeichen gesetzt wird, wenn sie mit einer 0 beginnt. GitHub Actions liest eine Eingabe als Zahl, wenn alle Zeichen in der Eingabe Ziffern sind. Wenn Ihre Registrierungs-ID also mit einer 0 beginnt, wird die 0 abgeschnitten. Siehe Ausgabe Nr. 225. Dieser Code wird unter der MIT-Lizenz zur Verfügung gestellt.
Wenn Sie ein potenzielles Sicherheitsproblem in diesem Projekt melden möchten, erstellen Sie bitte kein GitHub-Problem. Befolgen Sie stattdessen bitte die Anweisungen hier oder senden Sie AWS Security direkt eine E-Mail.