Wie kann ich den Fehler “Lambda does not have permission to access the ECR image...” (Lambda hat keine Berechtigung, auf das ECR-Image zuzugreifen...) für eine Lambda-Funktion mit einem Container-Image beheben?

Lesedauer: 3 Minute
0

Ich habe versucht, eine AWS Lambda-Funktion mit einem Container-Image zu erstellen, aber ich habe einen Berechtigungsfehler für Amazon Elastic Container Registry (Amazon ECR) erhalten.

Kurze Beschreibung

Um eine Lambda-Funktion aus einem Container-Image zu erstellen, muss der Benutzer oder die Rolle, die die Funktion und das Amazon ECR-Repository erstellt, über Richtlinien verfügen, die den Zugriff ermöglichen.

Hinweis: Bevor Sie die Lambda-Funktion erstellen, erstellen Sie zunächst ein Lambda-Container-Image. Laden Sie das Image anschließend in ein Amazon ECR-Repository hoch.

Weitere Informationen finden Sie unter Bereitstellen von Lambda-Funktionen als Container-Images.

Auflösung

Gehen Sie wie folgt vor, um eine Policy-Erklärung für private Repositorys festzulegen.

Hinweis: Es hat sich bewährt, die geringsten Rechte nur für die Berechtigungen zu gewähren, die für die Ausführung einer Aufgabe erforderlich sind. Weitere Informationen finden Sie unter Anwenden von Berechtigungen mit den geringsten Rechten.

1. Erstellen Sie eine Lambda-Funktion aus der Amazon ECR-Image-URI im selben AWS-Konto

Im folgenden Beispiel müssen die Amazon ECR-Repository-Berechtigungen die API-Aktionen ecr:batchGetImage und ecr:getDownloadUrlForLayer für den Lambda-Service zulassen.

Beispiel für eine Amazon ECR-Repository-Richtlinie:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "LambdaECRImageRetrievalPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    }
  ]
}

2. Erstellen Sie eine Lambda-Funktion aus der Amazon ECR-Image-URI in einem Cross-Konto

Im folgenden Beispiel befinden sich die Lambda-Funktionen, die im AWS-Konto 111111111111 erstellt wurden, und das Amazon ECR-Repository befindet sich im AWS-Konto 222222222222.

Der Benutzer oder die Rolle, der die Lambda-Funktion erstellt oder aktualisiert hat, muss über die Berechtigungen ecr:batchGetImage und ecr:getDownloadUrlForLayer für das ECR-Repository verfügen.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ECR Repository Access Permissions",
      "Effect": "Allow",
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "arn:aws:ecr:us-east-1:222222222222:repository/hello-repository"
    }
  ]
}

Im folgenden Beispiel ermöglicht die CrossAccountPermission-Anweisung dem AWS-Konto 111111111111, Lambda-Funktionen zu erstellen und zu aktualisieren, die Images aus dem Amazon ECR-Repository verwenden.

Beispiel für eine kontenübergreifende Amazon-ECR-Repository-Richtlinie:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CrossAccountPermission",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    },
    {
      "Sid": "LambdaECRImageCrossAccountRetrievalPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Condition": {
        "StringLike": {
          "aws:sourceARN": "arn:aws:lambda:us-east-1:111111111111:function:*"
        }
      }
    }
  ]
}

Lambda setzt den Status einer Funktion schließlich auf inaktiv, wenn sie über einen längeren Zeitraum nicht aufgerufen wird.

Hinweis: Die LambdaecrimageCrossAccountRetrievalPolicy-Anweisung ist erforderlich, damit Lambda das Container-Image für das AWS-Konto 111111111111 abrufen kann.

Weitere Informationen finden Sie unter Kontoübergreifende Amazon ECR-Berechtigungen.

Verwandte Informationen

Einführung des kontoübergreifenden Amazon ECR-Zugriffs für AWS Lambda

Wie behebe ich Berechtigungsprobleme mit Lambda?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr