使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何提供 Lambda 函數的精細存取權?

5 分的閱讀內容
0

我想要將特定 AWS Lambda 函數的讀取和寫入權限授予 AWS Identity and Access Management (IAM) 使用者。

解決方法

使用 IAM 政策設定 IAM 使用者建立、刪除、修改、調用和監控 Lambda 函數的權限,以及檢視 Lambda 函數的組態。

在下列政策範例中,將支援資源層級權限的 Lambda API 動作限制為資源元素中列出的特定 Lambda 函數。您可以使用 API 動作中的條件元素來識別 IAM 政策中的 Lambda 函數。

對於不支援資源層級權限的 API 動作,您必須在資源元素中使用萬用字元 (*)。您無法套用特定於 Lambda 的條件金鑰。如需詳細資訊,請參閱 AWS Lambda 的動作、資源和條件金鑰

資源元素會使用 ARN 來識別套用陳述式的資源。例如,如果動作調用時,資源值為函數 ARN。IAM 會將 ARN 與「調用」請求之 FunctionNameQualifier 參數中的函數 ARN 進行比對。如需有關不同版本 Lambda 中的 ARN 詳細資訊,請參閱使用版本

如果您使用多個 Lambda 版本,則不需要新增每個 Lambda ARN。而是請在資源元素中包含萬用字元 (*):

arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*

**注意:**將 AWS_REGION:AWS_ACCOUNT_ID 取代為您的 Lambda ARN,而且將 LAMBDA_FUNCTION_NAME 取代為 Lambda 函數名稱。

在下列範例 IAM 政策中,請取代下列值:

  • AWS_ACCOUNT_ID 取代為 AWS 帳戶 ID
  • LAMBDA_FUNCTION_NAME 取代為您的 Lambda 函數名稱
  • IAM_USER_NAME 取代為與您提供 Lambda 存取權的 IAM 使用者
  • WS_REGION 取代為您的 AWS 區域
  • KEY_ID 取代為您的 AWS Key Management Service (KMS) 金鑰
  • IAM_ROLE_NAME 取代為您的 IAM 角色
  • S3_BUCKET_NAME 取代為您的 Amazon Simple Storage Service (Amazon S3) 儲存貯體名稱

建立 Lambda 函數的權限

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,則請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

若要使用 AWS CLILambda 主控台建立 Lambda 函數,您必須具有 lambda:CreateFunctioniam:PassRole 權限。如需政策範例,請參閱適用於 Lambda 的身分型 IAM 政策

下列範例政策允許 API 呼叫者建立 Lambda 函數,然後將 IAM 角色傳遞為函數的 Lambda 執行角色:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

如果您將 Lambda 函數程式碼儲存在 S3 儲存貯體中,請新增政策,將 Amazon S3 權限授與 IAM 政策。

範例政策:

{  "Sid": "PermissionToUploadCodeFromS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::S3_BUCKET_NAME/FileName.zip"
}

**注意:**將 FileName.zip 取代為您的 Lambda 函數程式碼 .zip 檔案。

若要檢視和更新函數,您必須新增讀取層級 API 動作和權限。

範例政策:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionsToCreateAndUpdateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:GetFunction",
        "lambda:ListTags"
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

若要在 Lambda 函數建立流程期間建立 IAM 角色,請新增下列 IAM 權限:

{  "Sid": "PermmissionsToCreateAndUpdateARole",
  "Effect": "Allow",
  "Action": [
    "iam:CreateRole",
    "iam:CreatePolicy",
    "iam:PutRolePolicy",
    "iam:AttachRolePolicy"
  ],
  "Resource": "*"
}

刪除 Lambda 函數的權限

若要刪除 Lambda 函數,請將下列權限新增至 IAM 政策:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

若要使用 Lambda 主控台來刪除函數,請將 Lambda 讀取存取權限新增至 IAM 政策:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

檢視 Lambda 函數組態詳細資訊的權限

若要允許使用者檢視 Lambda 函數的組態詳細資訊,請將下列權限新增至 IAM 政策:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:GetFunction",
        "lambda:ListTags",
        "lambda:TagResource",
        "lambda:GetFunctionConfiguration",
        "lambda:GetPolicy",
        "lambda:GetAlias",
        "lambda:ListVersionsByFunction",
        "lambda:ListAliases"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:ListTags",
        "lambda:GetEventSourceMapping",
        "lambda:ListEventSourceMappings"
      ],
      "Resource": "*"
    }
  ]
}

**注意:**根據您要授與的讀取存取權等級,您可以新增所有先前的權限,或僅新增其中部分權限。如果您使用的是 Lambda 層級,您也可以新增 lambda:GetLayerVersionlambda:ListLayerVersions 權限。

若要使用 Lambda 主控台檢視函數的組態詳細資訊,請將下列權限新增至 IAM 政策:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

Lambda 主控台在 Lambda 函數上使用標籤,可讓您依標籤篩選 Lambda 函數。若要使用標籤,請將下列權限新增至 IAM 政策:

{  "Sid": "PermissionsToFilterFunctionsByTags",
  "Effect": "Allow",
  "Action": [
     "tag:GetResources"
  ],
  "Resource": "*"
}

Lambda 主控台會顯示與 Lambda 函數相關聯的 IAM 角色,以及該函數的角色可存取資源的詳細資訊。若要檢視詳細資訊,請將下列權限新增至 IAM 政策:

{  "Sid": "PermissionsToViewRolesAndPolicies",
  "Effect": "Allow",
  "Action": [
    "iam:GetPolicy",
    "iam:GetPolicyVersion",
    "iam:GetRolePolicy",
    "iam:ListRoles",
    "iam:ListRolePolicies",
    "iam:ListAttachedRolePolicies"
  ],
  "Resource": "*"
}

如果您有其他要求,則可能需要授與其他 AWS 服務的額外權限

修改 Lambda 函數的權限

若要允許使用者修改 Lambda 函數,請將下列權限新增至 IAM 政策:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:AddPermission",
        "lambda:RemovePermission",
        "lambda:CreateAlias",
        "lambda:UpdateAlias",
        "lambda:DeleteAlias",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration",
        "lambda:PutFunctionConcurrency",
        "lambda:DeleteFunctionConcurrency",
        "lambda:PublishVersion",
        "lambda:UpdateFunctionEventInvokeConfig",
        "lambda:PutFunctionEventInvokeConfig"
      ],
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

**注意:**根據您要授與的寫入存取權等級,您可以新增所有先前的權限,或僅新增其中部分權限。

若要限制存取權,請將 lambda:AddPermissionlambda:RemovePermission 新增至包含在附加政策中的主體。您也可以將 lambda:UpdateEventSourceMappinglambda:DeleteEventSourceMapping 限制為特定的事件來源映射。

若要使用客戶自管金鑰來加密環境變數,請將下列 AWS KMS 權限新增至 IAM 政策中:

{  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}

若要使用 Lambda 主控台來修改 Lambda 函數的組態,請將下列權限新增至 IAM 政策:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

調用 Lambda 函數的權限

若要手動調用 Lambda 函數,請將下列權限新增至 IAM 政策:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

若要使用 Lambda 主控台來列出 Lambda 函數,請將下列權限新增至 IAM 政策:

{  "Sid": "PermissionsToViewFunctionsConfigInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings",
    "lambda:GetFunction",
    "lambda:ListTags"
  ],
  "Resource": "*"
}

若要允許其他服務調用 Lambda 函數,請針對 Lambda 使用資源型政策。您也可以使用函數政策,以提供對 Lambda 函數的跨帳户存取權。

下列範例政策可讓來自不同 AWS 帳戶的使用者手動調用 Lambda 函數:

{  "Version": "2012-10-17",  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

注意:External_AWS_ACCOUNT_ID 取代為用您要允許調用函數的帳戶。

監控 Lambda 函數的權限

若要在 Lambda 主控台的 Monitoring (監控) 標籤中檢視 Amazon CloudWatch 指標,請將下列權限新增至 IAM 政策:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionForCloudWatchMetrics",
       "Effect": "Allow",
       "Action": [
          "cloudwatch:GetMetricStatistics",
          "cloudwatch:GetMetricData"
        ],
        "Resource": "*"
     }
  ]
}

若要授予特定 CloudWatch 指標和 CloudWatch Logs Insights 的權限,請參閱 Amazon CloudWatch 權限參考資料CloudWatch 日誌權限參考資料