如何解決具有容器鏡像的 Lambda 函數的“Lambda 無權存取 ECR 鏡像......”錯誤?

2 分的閱讀內容
0

我嘗試使用容器鏡像創建 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 跨帳戶許可

相關資訊

為 AWS Lambda 引入跨帳戶 Amazon ECR 存取權

如何疑難排解 Lambda 的權限問題?

AWS 官方
AWS 官方已更新 1 年前