Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何解決具有容器鏡像的 Lambda 函數的“Lambda 無權存取 ECR 鏡像......”錯誤?
我嘗試使用容器鏡像創建 AWS Lambda 函數,但是我收到了 Amazon Elastic Container Registry (Amazon ECR) 許可錯誤。
簡短描述
若要從容器映像建立 Lambda 函數,建立函數和 Amazon ECR 儲存庫的使用者或角色必須具有允許存取的政策。
**注意:**在您建立 Lambda 函式之前,請先建立 Lambda 容器映像檔。然後,將鏡像上傳到 Amazon ECR 儲存庫。
如需詳細資訊,請參閱將 Lambda 函數部署為容器鏡像。
解決方案
請依照下列步驟設定私人儲存庫原則陳述式。
**注意:**最佳做法是僅授予執行任務所需的最低權限。如需詳細資訊,請參閱應用最低權限權限。
1.從同一個 AWS 帳戶中的 Amazon ECR 鏡像 URI 建立 Lambda 函數
在下列範例中,Amazon ECR 儲存庫許可必須允許對 Lambda 服務執行 ecr:BatchGetImage 和 ecr:GetDownloadUrlForLayer API 動作。
Amazon ECR 儲存庫政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] } ] }
2.在跨帳戶中從 Amazon ECR 鏡像 URI 創建一個 Lambda 函數
在下列範例中,AWS 帳戶** 111111111111** 和 Amazon ECR 儲存庫中建立的 Lambda 函數位於 AWS 帳戶** 222222222222中**。
建立或更新[ Lambda 函數的使用者或角色在 ECR 存放庫上必須具有 ecr:BatchGetImage和 ecr:GetDownloadUrlForLayer](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr/get-download-url-for-layer.html)權限。
{ "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" } ] }
在下列範例中,CrossAccountPermission陳述式允許 AWS 帳戶** 111111111111** 建立和更新使用來自 Amazon ECR 儲存庫鏡像的 Lambda 函數。
範例 Amazon ECR 儲存庫跨帳戶政策:
{ "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 最終會將函數的狀態設定為非作用中。
注意:若要讓 Lambda 帳戶 111111111111 擷取容器鏡像,Lambda 必須提供LambdaECRImageCrossAccountRetrievalPolicy聲明。
如需詳細資訊,請參閱 Amazon ECR 跨帳戶許可。

