Verwenden von Bildern aus einem privaten Repository in Elastic Beanstalk - AWS Elastic Beanstalk

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von Bildern aus einem privaten Repository in Elastic Beanstalk

In diesem Thema wird beschrieben, wie Sie sich mit Elastic Beanstalk bei einem privaten Online-Image-Repository authentifizieren. Elastic Beanstalk muss sich bei der Online-Registry authentifizieren, bevor es Ihre Images abrufen und bereitstellen kann. Dafür gibt es mehrere Möglichkeiten:

  • Das ECR Amazon-Repository

  • Das AWS Secrets Manager

  • Die Datei Dockerrun.aws.json

Bilder aus einem ECR Amazon-Repository verwenden

Sie können Ihre benutzerdefinierten Docker-Images in AWS Amazon Elastic Container Registry (AmazonECR) speichern.

Wenn Sie Ihre Docker-Images in Amazon speichernECR, authentifiziert sich Elastic Beanstalk automatisch mit dem Instance-Profil Ihrer Umgebung bei der ECR Amazon-Registry. Daher müssen Sie Ihren Instances die Erlaubnis erteilen, auf die Bilder in Ihrem ECR Amazon-Repository zuzugreifen. Fügen Sie dazu dem Instance-Profil Ihrer Umgebung Berechtigungen hinzu, indem Sie die von Amazon EC2ContainerRegistryReadOnly verwaltete Richtlinie an das Instance-Profil anhängen. Dadurch erhalten Sie schreibgeschützten Zugriff auf alle ECR Amazon-Repositorys in Ihrem Konto. Sie haben auch die Möglichkeit, nur auf ein einzelnes Repository zuzugreifen, indem Sie die folgende Vorlage verwenden, um eine benutzerdefinierte Richtlinie zu erstellen:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:account-id:repository/repository-name" ], "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

Ersetzen Sie den Amazon-Ressourcennamen (ARN) in der obigen Richtlinie durch den ARN Ihres Repositorys.

Sie müssen die Bildinformationen in Ihrer Dockerrun.aws.json Datei angeben. Die Konfiguration ist je nachdem, welche Plattform Sie verwenden, unterschiedlich.

Verwenden Sie für die ECSverwaltete Docker-Plattform den image Schlüssel in einem Container-Definitionsobjekt:

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

Informationen zur Docker-Plattform finden Sie im Bild von. URL Das URL steht in der Image Definition Ihrer Dockerrun.aws.json Datei:

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

Benutzen AWS Secrets Manager

Sie können Elastic Beanstalk so konfigurieren, dass vor dem Start des Bereitstellungsprozesses eine Anmeldung bei Ihrem privaten Repository durchgeführt wird. Dadurch kann Elastic Beanstalk auf die Images aus dem Repository zugreifen und diese Images in Ihrer Elastic Beanstalk-Umgebung bereitstellen.

Durch diese Konfiguration werden Ereignisse in der Prebuild-Phase des Bereitstellungsprozesses von Elastic Beanstalk initiiert. Verwenden Sie zur Einrichtung das Konfigurationsverzeichnis .ebextentions. Von der Konfiguration werden Skripts vom Typ Plattform-Hook verwendet, die docker login aufrufen, um die Authentifizierung bei der Onlineregistrierung durchzuführen, die als Host für das private Repository fungiert. Diese Konfigurationsschritte werden im Anschluss detailliert beschrieben.

So konfigurieren Sie Elastic Beanstalk für die Authentifizierung bei Ihrem privaten Repository mit AWS Secrets Manager
Anmerkung

Für diese Schritte müssen bestimmte Berechtigungen erteilt werden. Weitere Informationen finden Sie unter der folgenden Referenz.

  1. Erstellen Sie Ihre Verzeichnisstruktur für .ebextensions wie folgt:

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
  2. Wird verwendet AWS Secrets Manager , um die Anmeldedaten Ihres privaten Repositorys zu speichern, sodass Elastic Beanstalk Ihre Anmeldedaten bei Bedarf abrufen kann. Führen Sie dazu den Secrets Manager create-secret AWS CLI Befehl aus.

    aws secretsmanager create-secret \ --name MyTestSecret \ --description "My image repo credentials created with the CLI." \ --secret-string "{\"USER\":\"EXAMPLE-USERNAME\",\"PASSWD\":\"EXAMPLE-PASSWORD\"}"
  3. Erstellen Sie die folgende Datei env.config und platzieren Sie sie im Verzeichnis .ebextensions, wie in der obigen Verzeichnisstruktur gezeigt. Diese Konfiguration verwendet den Namespace aws:elasticbeanstalk:application:environment, um die Umgebungsvariablen USER und PASSWD von Elastic Beanstalk mit dynamischen Referenzen zu  AWS Secrets Manager zu initialisieren. Weitere Informationen zu secretsmanager dynamischen Verweisen finden Sie unter Abrufen eines AWS Secrets Manager Geheimnisses in einer AWS CloudFormation Ressource im AWS Secrets Manager Benutzerhandbuch.

    Anmerkung

    USER und PASSWD im Skript müssen den Zeichenfolgen entsprechen, die im obigen Befehlen vom Typ secretsmanager create-secret verwendet wurden.

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
  4. Erstellen Sie die folgende Skriptdatei 01login.sh und platzieren Sie sie in den folgenden Verzeichnissen, wie ebenfalls in der obigen Verzeichnisstruktur gezeigt:

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

    ### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin

    Das 01login.sh-Skript ruft das get-config Plattformskript auf, um die Repository-Anmeldeinformationen abzurufen und sich beim Repository anzumelden. Es speichert den Benutzernamen in der Skript-Variablen USER. In der nächsten Zeile wird das Passwort abgefragt. Anstatt das Passwort in einer Variablen zu speichern, leitet das Skript das Passwort direkt an den docker login-Befehl im stdin-Eingabestream weiter. Die --password-stdin-Option verwendet den Eingabestream, sodass Sie das Passwort nicht in einer Variablen speichern müssen. Weitere Informationen zur Authentifizierung mit der Docker-Befehlszeilenschnittstelle finden Sie unter Docker-Login auf der Docker-Dokumentationswebsite.

    Hinweise
    • Alle Skriptdateien müssen über die Ausführungsberechtigung verfügen. Legen Sie mit chmod +x die Ausführungsberechtigung für Ihre Hook-Dateien fest. Für alle auf Amazon Linux 2 basierenden Plattformversionen, die am oder nach dem 29. April 2022 veröffentlicht wurden, gewährt Elastic Beanstalk automatisch Ausführungsberechtigungen für alle Plattform-Hook-Skripts. In diesem Fall müssen Sie Ausführungsberechtigungen nicht manuell erteilen. Eine Liste dieser Plattformversionen finden Sie in den Versionshinweisen vom 29. April 2022 – Linux-Plattform im AWS Elastic Beanstalk -Leitfaden für Versionshinweise.

    • Bei Hook-Dateien kann es sich um Binär- oder Skriptdateien handeln, die mit einer #!-Zeile mit dem Interpreter-Pfad beginnen (z. B. #!/bin/bash).

    • Weitere Informationen finden Sie in Erweitern von Elastic Beanstalk-Linux-Plattformen unter Plattform-Hooks.

Wenn sich Elastic Beanstalk bei der Onlineregistrierung authentifiziert, die als Host für das private Repository fungiert, können Sie Ihre Images abrufen und bereitstellen.

Verwenden der Datei Dockerrun.aws.json

In diesem Abschnitt wird eine andere Methode für die Authentifizierung von Elastic Beanstalk bei einem privaten Repository beschrieben. Dabei wird eine Authentifizierungsdatei mit dem Docker-Befehl erstellt und in einen Amazon S3-Bucket hochgeladen. In der Datei Dockerrun.aws.json müssen auch die Bucket-Informationen eingeschlossen werden.

So generieren Sie eine Authentifizierungsdatei und stellen sie in Elastic Beanstalk bereit
  1. Erstellen Sie eine Authentifizierungsdatei mit dem docker login-Befehl. Für Repositorys auf Docker Hub führen Sie au docker login:

    $ docker login

    Geben Sie für andere Registrierungen die URL des Registrierungsservers an:

    $ docker login registry-server-url
    Anmerkung

    Wenn Ihre Elastic Beanstalk Beanstalk-Umgebung die Amazon Linux AMI Docker-Plattformversion (vor Amazon Linux 2) verwendet, lesen Sie die entsprechenden Informationen unter. Docker-Konfiguration auf Amazon Linux AMI (vor Amazon Linux 2)

    Weitere Informationen zur Authentifizierungsdatei finden Sie unter Store images on Docker Hub und docker login auf der Docker-Website.

  2. Laden Sie eine Kopie der Authentifizierungsdatei mit dem Namen .dockercfg in einen sicheren Amazon S3-Bucket hoch.

    • Der Amazon S3 S3-Bucket muss in derselben AWS-Region Umgebung gehostet werden, in der er verwendet wird. Elastic Beanstalk kann keine Dateien von einem Amazon S3-Bucket herunterladen, der in anderen Regionen gehostet wird.

    • Erteilen Sie der IAM Rolle im Instance-Profil Berechtigungen für den s3:GetObject Vorgang. Weitere Informationen finden Sie unter Elastic Beanstalk Instance-Profile verwalten.

  3. Schließen Sie die Amazon S3-Bucket-Informationen in den Authentication-Parameter der Datei Dockerrun.aws.json ein.

    Das folgende Beispiel zeigt die Verwendung einer Authentifizierungsdatei mit dem Namen mydockercfg in einem Bucket namens amzn-s3-demo-bucket, um ein privates Image in einem Drittanbieter-Registry zu verwenden. Die richtige Versionsnummer für AWSEBDockerrunVersion finden Sie in der Anmerkung, die dem Beispiel folgt.

    { "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" }
    Dockerrun.aws.json-Versionen

    Der AWSEBDockerrunVersion-Parameter gibt die Version der Dockerrun.aws.json-Datei an.

    • Die Plattformen Docker AL2 und AL2 023 verwenden die folgenden Versionen der Datei.

      • Dockerrun.aws.json v3— Umgebungen, die Docker Compose verwenden.

      • Dockerrun.aws.json v1— Umgebungen, die Docker Compose nicht verwenden.

    • ECSläuft auf Amazon Linux 2 und ECSläuft auf AL2 023, verwendet die Dockerrun.aws.json v2 Datei. Die ausgemusterte Plattform ECS-The Multicontainer Docker Amazon Linux AMI (AL1) verwendete ebenfalls dieselbe Version.

Wenn sich Elastic Beanstalk bei der Onlineregistrierung authentifizieren kann, die als Host für das private Repository fungiert, können Ihre Images bereitgestellt und abgerufen werden.