Direkt zum Inhalt

Wie behebe ich den Fehler „Lambda does not have permission to access the ECR image“ bei einem Lambda-Funktionscontainer-Image?

Lesedauer: 3 Minute
0

Ich habe versucht, eine AWS-Lambda-Funktion mit einem Container-Image zu erstellen. Ich habe jedoch einen Amazon Elastic Container Registry (Amazon ECR)-Berechtigungsfehler erhalten, der dem folgenden ähnelt: „Lambda does not have permission to access the ECR image. Check the ECR permissions“

Kurzbeschreibung

Um eine Lambda-Funktion aus einem Container-Image zu erstellen, musst du AWS Identity and Access Management (IAM)-Richtlinien konfigurieren, die den Zugriff zulassen. Der/die IAM-Benutzer:in oder die IAM-Rolle, der/die die Funktion und das Amazon-ECR-Repository erstellt, muss über Zugriffsberechtigungen verfügen.

Hinweis: Bevor du die Lambda-Funktion erstellst, erstelle zunächst ein Lambda-Container-Image. Lade das Image anschließend in ein Amazon-ECR-Repository hoch.

Lösung

Befolge die Schritte, um eine private Repository-Richtlinienanweisung in Amazon ECR festzulegen. Füge dann eine Richtlinienanweisung hinzu, um eine Lambda-Funktion aus dem Amazon-ECR-Image-URI in demselben AWS-Konto oder kontoübergreifend zu erstellen.

Hinweis: Es hat sich bewährt, mithilfe von IAM-Richtlinien ](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)die geringste Berechtigung[ zu erteilen.

Eine Richtlinienanweisung in demselben Konto hinzufügen

In der folgenden Richtlinie müssen die Amazon-ECR-Repository-Berechtigungen den API-Aktionen ecr:BatchGetImage und ecr:GetDownloadUrlForLayer den Zugriff auf den Lambda-Service erlauben.

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"
            ]
        }
    ]
}

Wichtig: Wenn das Amazon-ECR-Repository die vorherigen Berechtigungen nicht enthält, fügt Lambda sie automatisch hinzu. Lambda kann nur Berechtigungen hinzufügen, wenn der Prinzipal, der Lambda aufruft, über die Berechtigungen ecr:getRepositoryPolicy und ecr:setRepositoryPolicy verfügt. Weitere Informationen findest du unter Amazon-ECR-Repository-Richtlinien.

Eine Richtlinienanweisung kontoübergreifend hinzufügen

Der/die Benutzer:in oder die Rolle, der/die die Lambda-Funktion erstellt oder aktualisiert, muss über die Berechtigungen ecr:BatchGetImage und ecr:GetDownloadUrlForLayer für das ECR-Repository verfügen.

In der folgenden Richtlinie wurden die Lambda-Funktionen im Konto 111111111111 erstellt, und das Amazon-ECR-Repository befindet sich im Konto 222222222222.

Beispiel für eine IAM-Richtlinie, die dem/der Benutzer:in oder der Rolle den Zugriff auf das kontoübergreifende Amazon-ECR-Repository gewährt:

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

Hinweis: Ersetze arn:aws:ecr:us-east-1:222222222222:repository/your-repository durch den Amazon-Ressourcennamen (ARN) der ECR-Repository-Ressource.

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

Ein Beispiel für eine kontoübergreifende Amazon-ECR-Repository-Richtlinie ermöglicht es der Lambda-Funktion, das Container-Image abzurufen:

{
    "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:your-function:*"
                }
            }
        }
    ]
}

Hinweis: Ersetze arn:aws:ecr:us-east-1:222222222222:repository/your-repository durch deinen LAMBDA-Funktions-ARN.

Weitere Informationen findest du unter Kontoübergreifende Amazon-ECR-Berechtigungen.

Ähnliche Informationen

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

Wie behebe ich Berechtigungsprobleme mit Lambda?

AWS OFFICIALAktualisiert vor 8 Monaten