Direkt zum Inhalt

Wie erlaube ich einem sekundären Konto, Bilder in meine Amazon-ECR-Bild-Repositorys mithilfe von Push oder mithilfe von Pull zu übertragen?

Lesedauer: 5 Minute
0

Ich möchte einem sekundären AWS-Konto erlauben, Bilder an meine Amazon Elastic Container Registry (Amazon ECR)-Bild-Repositorys mithilfe von Push oder mithilfe von Pull zu übertragen.

Kurzbeschreibung

Damit ein sekundäres Konto Bilder aus dem Amazon ECR-Repository mithilfe von Push oder mithilfe von Pull übertragen kann, erstelle eine Registrierungs- oder Repository-Richtlinie in deinem Hauptkonto. Um Zugriff auf alle Repositorys in der AWS-Region oder auf mehrere verschiedene Repositorys zu gewähren, konfiguriere eine Richtlinie auf Registrierungsebene. Um den Zugriff auf nur ein Repository zu gewähren oder den Zugriff für verschiedene Identitäten innerhalb eines einzelnen Repositorys einzuschränken, konfiguriere eine Richtlinie auf Repository-Ebene. Konfiguriere die Richtlinie so, dass bestimmte API-Aufrufe vom sekundären Konto aus zulässig sind.

Generiere dann vom sekundären Konto aus ein Docker-Authentifizierungstoken, um Bilder aus dem Repository des primären Kontos mithilfe von Push oder mithilfe von Pull zu übertragen.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Berechtigungen auf Registrierungsebene konfigurieren

Voraussetzung: Deine Amazon-ECR-Registrierung muss eine V2-Richtlinie verwenden. Wenn du eine V1-Richtlinie verwendest, wechsle zu V2. Weitere Informationen zur V2-Richtlinie findest du unter Amazon ECR erweitert die Registrierungsrichtlinie auf alle ECR-Aktionen.

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-ECR-Konsole für das primäre Konto.
  2. Wähle im Navigationsbereich unter Privates Registry die Option Features & Settings (Funktionen und Einstellungen) aus.
  3. Wähle Berechtigungen aus.
  4. Wähle JSON bearbeiten.
  5. Gib die Richtlinie in den Editor ein. Beispielrichtlinie, die es dem sekundären Konto ermöglicht, Bilder über alle Repositorys in der Region hinweg mithilfe von Push oder mithilfe von Pull zu übertragen:
     {
      "Version": "2012-10-17",
      "Statement": [
        {
          "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"
          ],
          "Resource": "*"
        }
      ]
    }
    Hinweis: Ersetze account-id durch die sekundäre Konto-ID. Gib unter Aktion die Aktionen ein, die das Konto im Repository ausführen kann. Um den Zugriff auf eine bestimmte Rolle zu ermöglichen, gib den Amazon-Ressourcennamen (ARN) der Rolle für den Prinzipal an, z. B. AWS: arn:aws:iam::account-id:role/ecsInstanceRole. Bevor du die Registrierungsrichtlinie speicherst, stelle sicher, dass die von dir eingegebene Rolle im sekundären Konto vorhanden ist. Wenn die Rolle nicht vorhanden ist, erhältst du die Fehlermeldung „invalid registry policy provided“.
  6. Wähle Speichern aus.

Berechtigungen auf Repository-Ebene konfigurieren

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-ECR-Konsole für das primäre Konto.
  2. Wähle im Navigationsbereich unter Privates Registry die Option Repositorys aus.
  3. Wähle das Repository aus, das du ändern möchtest.
  4. Wähle im Navigationsbereich die Option Berechtigungen aus.
  5. Wähle Richtlinien-JSON bearbeiten.
  6. Gib im Richtlinien-Editor deine Richtlinienanweisung ein.
    Beispiel für eine Repository-Richtlinie, die es einem Konto ermöglicht, Bilder mithilfe von Push oder mithilfe von Pull zu übertragen:
    {  "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"
          ]
        }
      ]
    }
    Hinweis: Ersetze account-id durch die sekundäre Konto-ID. Gib unter Aktion die Aktionen ein, die das Konto im Repository ausführen kann. Um den Zugriff auf eine bestimmte Rolle zu ermöglichen, gib den Amazon-Ressourcennamen (ARN) der Rolle für den Prinzipal an, z. B. AWS: arn:aws:iam::account-id:role/ecsInstanceRole. Bevor du die Registrierungsrichtlinie speicherst, stelle sicher, dass die von dir eingegebene Rolle im sekundären Konto vorhanden ist. Wenn die Rolle nicht vorhanden ist, erhältst du die Fehlermeldung „invalid registry policy provided“.
  7. Wähle Speichern aus.
  8. Wenn du Amazon ECS verwendest, um den Container im sekundären Konto auszuführen, lege das Bild fest, das du mit Amazon ECS verwenden möchtest. Das Amazon-ECR-Repository des Hauptkontos hostet das Bild.

Hinweis: Stelle sicher, dass die von AmazonEC2ContainerRegistryPowerUser verwaltete Richtlinie die Amazon-ECR-Berechtigungen für das sekundäre Konto beinhaltet. Du musst über diese Berechtigungen verfügen, um die Übertragung mithilfe von Pull oder mithilfe von Push von deinem Hauptkonto aus durchführen zu können.

Ein temporäres Docker-Authentifizierungstoken generieren

Hinweis: Das Konto, das das Token erhält, muss über die erforderlichen API-Berechtigungen für AWS Identify and Access Management (IAM) verfügen, um das Repository zu ändern. Beispiele findest du unter Von AWS verwaltete Richtlinien für Amazon ECR. Um Probleme mit Docker zu beheben, aktiviere den Debug-Modus auf dem Docker-Daemon.

Führe die folgenden Schritte aus:

  1. Um ein Docker-Authentifizierungstoken für ein Konto zu generieren, das Bilder außerhalb von Amazon ECS mithilfe von Push und Pull überträgt, führe den folgenden AWS-CLI-Befehl get-login-password aus:

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

    -oder-
    Führe den folgenden Befehl von AWS-Tools für Windows PowerShell aus:

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

    Hinweis: Ersetze AWS-ACCOUNT-ID durch deine primäre Konto-ID und REGION-ID durch deine Region. Das temporäre Authentifizierungstoken ist 12 Stunden gültig.
    Beispielausgabe:

    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
    
    or
    
    Login Succeeded
  2. Führe den folgenden Befehl aus, um ein Testbild mithilfe von Pull oder mithilfe von Push vom oder zum primären Konto zu übertragen:

    docker pull ACCOUNT-ID.dkr.ecr.REGION.amazonaws.com/REPOSITORY-NAME:TAG-NAME

    Hinweis: Ersetze ACCOUNT-ID durch deine primäre Konto-ID, REGION durch deine Region, REPOSITORY-NAME durch deinen Repository-Namen und TAG-NAME durch den Tag-Namen für dein Bild.

  3. Führe den folgenden Befehl aus, um zu überprüfen, ob du das Bild erfolgreich heruntergeladen hast:

    docker images | grep IMAGE-NAME

    Hinweis: Ersetze IMAGE-NAME durch den Namen deines Bildes.