Wie kann ich einem sekundären Konto erlauben, Bilder an mein Amazon ECR-Image-Repository zu übermitteln oder von dort abzurufen?

Lesedauer: 4 Minute
0

Ich möchte einem sekundären Konto erlauben, Bilder an mein Amazon Elastic Container Registry (Amazon ECR)-Image-Repository zu übermitteln oder von dort abzurufen.

Behebung

Sie können Bilder in oder aus einem Amazon ECR-Repository in einem anderen Konto übertragen oder abrufen. Zunächst müssen Sie eine Richtlinie erstellen, die es dem sekundären Konto ermöglicht, API-Aufrufe für das Repository auszuführen. Verwenden Sie dann ein vom sekundären Konto generiertes Docker-Authentifizierungstoken, um Push- und Pull-Befehle für das Repository des primären Kontos zu verwenden.

Erstellen Sie eine Richtlinie, die es dem sekundären Konto ermöglicht, API-Aufrufe für das Bild-Repository auszuführen

1.Öffnen Sie die Amazon ECR-Konsole für Ihr primäres Konto.

2.Wählen Sie den per Hyperlink verknüpften Repository-Namen des Repositorys aus, das Sie ändern möchten.

3.Wählen Sie im linken Navigationsbereich unter „Amazon ECR – Repositorys“ die Option Berechtigungen aus.

4.Um innerhalb Ihres primären Kontos eine Repository-Richtlinie für Ihr sekundäres Konto hinzuzufügen, wählen Sie „Richtlinien-JSON bearbeiten“. Geben Sie Ihre Richtlinie in den Code-Editor ein und wählen Sie dann Speichern.

Wichtig: Geben Sie in Ihrer Richtlinie die Kontonummer des sekundären Kontos und die Aktionen an, die das Konto für das Repository ausführen kann. Um den Zugriff auf eine bestimmte Rolle zu ermöglichen, geben Sie die Rolle arn als Prinzipal an. Zum Beispiel AWS: arn:aws:iam::account-id:role/ecsInstanceRole. Die Rolle muss im sekundären Konto vorhanden sein, bevor Sie die Repository-Richtlinie speichern. Wenn sie nicht existiert, erhalten Sie eine Fehlermeldung, die der folgenden ähnelt: Ungültige Repository-Richtlinie bereitgestellt.

Die folgende Beispiel-Repository-Richtlinie ermöglicht es einem bestimmten Konto, Images zu übertragen und abzurufen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:root"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

5.Geben Sie in der Aufgabendefinition das Image ein, das Sie mit Amazon ECS verwenden möchten. Ihr Bild wird im Amazon ECR-Repository des primären Kontos gehostet.
**Hinweis:**Stellen Sie sicher, dass Ihr sekundäres Konto über Amazon ECR-Berechtigungen verfügt, die in der verwalteten Richtlinie „AmazonEC2ContainerRegistryPowerUser“ aufgeführt sind. Diese Berechtigungen sind erforderlich, um Pull oder Push von Ihrem primären Konto aus durchzuführen.

Generieren Sie ein temporäres Docker-Authentifizierungstoken aus dem sekundären Konto und führen Sie einen Test-Push oder -Pull durch

**Hinweis:**Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.

Das sekundäre Konto kann keine Richtlinienaktionen im Repository ausführen, bis es ein temporäres Authentifizierungstoken erhält, das 12 Stunden lang gültig ist. Das Token ermöglicht es dem sekundären Konto, Docker-Push- und Pull-Befehle für das Repository des primären Kontos zu verwenden. Der Befehl get-login-password ruft das Autorisierungstoken ab und dekodiert es, das Sie dann zur Authentifizierung in einen Docker-Login-Befehl weiterleiten können.

**Hinweis:**Das Konto, das das Token erhält, muss über die entsprechenden API-Berechtigungen für AWS Identify and Access Management (IAM) verfügen, um das Repository zu ändern. Beispiele finden Sie unter Von AWS verwaltete Richtlinien für Amazon Elastic Container Registry. Um Probleme mit Docker zu beheben, aktivieren Sie den Debug-Modus auf Ihrem Docker-Daemon. Dieser Befehl wird mit der neuesten Version von AWS CLI Version 2 oder in v1.17.10 oder höher von AWS CLI Version 1 unterstützt. Weitere Informationen finden Sie unter get-login-password.

1.Führen Sie den folgenden Befehl aus, um ein Docker-Authentifizierungstoken für ein Konto zu generieren, das Bilder außerhalb von Amazon ECS überträgt und abruft. Ersetzen Sie aws_account_id durch Ihre primäre Konto-ID und ersetzen Sie regionID durch Ihre Regions-ID.

Mithilfe der AWS-CLI:

aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

Verwenden von AWS-Tools für Windows PowerShell:

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

Sie erhalten die folgende Ausgabe:

aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2.Führen Sie einen Test-Image-Pull oder -Push auf das primäre Konto durch:

docker pull AccountID.dkr.ecr.Region.amazonaws.com/ImageName::TagName

Hinweis: Ersetzen Sie AccountID und Region durch Ihre Konto-ID und Region. Ersetzen Sie imageName und tagName durch den Namen Ihres Bildes und Tags.

3.Stellen Sie sicher, dass das Bild erfolgreich heruntergeladen wurde:

docker images | grep ImageName

Hinweis: Ersetzen Sie imageName durch den Namen Ihres Bildes.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren