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?