如何提供 Lambda 函數的精細存取權?
我想授予特定 AWS Lambda 函數的讀取和寫入存取權,該函數由其 Amazon Resource Name (ARN) 識別。如何提供 Lambda 函數的精細存取權?
簡短說明
您可以使用 AWS Identity and Access Management (IAM) 政策為 Lambda 函數設定權限,以執行以下作業:
- 建立 Lambda 函數
- 刪除 Lambda 函數
- 檢視 Lambda 函數組態的詳細資訊
- 修改 Lambda 函數
- 調用 Lambda 函數
- 監控 Lambda 函數
在下列政策範例中,支援資源層級權限的 Lambda API 動作僅限於每個陳述式資源元素中列出的特定 Lambda 函數。若 API 動作支援這些元素,則會在條件元素中使用特定函數名稱。
不支援資源層級權限的 API 動作需要在資源元素中使用萬用字元 (「**\ * **」),且無法套用任何 Lambda 服務的特定條件金鑰。如需 Lambda 支援的 IAM 動作、資源和條件的詳細資訊,請參閱 AWS Lambda 的動作、資源和條件金鑰。
陳述式資源元素的值會使用 ARN 來識別陳述式適用的資源。例如,當動作 為調用時,資源為函數 ARN。IAM 將此 ARN 與「「調用」請求 FunctionName和Qualifier 參數所識別的函數的 ARN 進行匹配。如需詳細資訊,請參閱 AWS Lambda 函數版本。
**注意:**如果您使用多個版本和別名,則可能需要在資源元素中包含「arn:aws:lambda:region:AccountID:function:function_name:*」。
解決方案
建立 Lambda 函數所需的權限
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確定您使用的是最新的 AWS CLI 版本。
若要使用 AWS Command Line Interface (AWS CLI) 或 SDK 建立 Lambda 函數,必須擁有lambda:CreateFunction 和 iam:PassRole權限。如需政策範例,請參閱適用於 AWS Lambda 的 Identity-based IAM 政策。下列政策允許 API 呼叫者建立 Lambda 函數、將 IAM 角色傳遞為函數的 Lambda 執行角色,然後從本機電腦上傳程式碼:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionToCreateFunction", "Effect": "Allow", "Action": [ "lambda:CreateFunction" ], "Resource": [ "arn:aws:lambda:region:AccountID:function:function_name" ] }, { "Sid": "PermissionToPassARole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::AccountID:role/role_name" } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
如果您從 Amazon Simple Storage Service (Amazon S3) 儲存貯體上傳程式碼 ,請將類似下列內容的政策新增到現有 IAM 政策,以授予 Amazon S3 所需的權限:
... { "Sid": "PermissionToUploadCodeFromS3", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::S3BucketName/FileName.zip" } ...
**注意:**更新政策以包含相關的 S3 儲存貯體和檔案名稱。
由於在 Lambda 主控台中建立函數時無法提供程式碼,因此需要 API 權限,例如讀取層級 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:UpdateFunctionCode" ], "Resource": [ "arn:aws:lambda:region:AccountID:function:function_name" ] }, { "Sid": "PermissionToListExistingRoles", "Effect": "Allow", "Action": [ "iam:ListRoles" ], "Resource": "*" }, { "Sid": "PermissionToPassARole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::AccountID:role/role_name" } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
若要在 Lambda 函數建立程序期間建立 IAM 角色,請新增類似下列內容的其他 IAM 權限:
... { "Sid": "PermmissionsToCreateAndUpdateARole", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:CreatePolicy", "iam:PutRolePolicy", "iam:AttachRolePolicy" ], "Resource": "*" } ...
刪除 Lambda 函數所需的權限
若要使用 AWS CLI 或 SDK 刪除 Lambda 函數,請新增類似下列內容的權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionToDeleteFunction", "Effect": "Allow", "Action": [ "lambda:DeleteFunction" ], "Resource": [ "arn:aws:lambda:region:AccountID:function:function_name" ] } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
若要使用 Lambda 主控台刪除 Lambda 函數,請新增類似下列內容的 Lambda 讀取存取權限:
{ "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:region:AccountID:function:function_name" ] } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
檢視 Lambda 函數的組態詳細資訊所需的權限
若要授予使用者檢視 Lambda 函數組態詳細資訊的權限,請新增類似下列內容的權限:
**注意:**視您要授予的讀取存取權限層級而定,在使用 AWS CLI 或 SDK 時,您可能需要授予下列全部或部分權限。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ActionsWhichSupportResourceLevelPermissions", "Effect": "Allow", "Action": [ "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:GetPolicy", "lambda:GetAlias", "lambda:ListVersionsByFunction", "lambda:ListAliases" ], "Resource": [ "arn:aws:lambda:region:AccountID:function:function_name" ] }, { "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions", "Effect": "Allow", "Action": [ "lambda:ListTags", "lambda:GetEventSourceMapping", "lambda:ListEventSourceMappings" ], "Resource": "*" } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
若要使用 Lambda 主控台檢視函數的組態詳細資訊,請新增類似下列內容的權限:
... { "Sid": "PermissionsToViewFunctionsInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings" ], "Resource": "*" } ...
Lambda 主控台使用標記 Lambda 函數,可讓您依標籤篩選 Lambda 函數。若要使用 AWS 標記服務,請新增類似下列內容的權限:
... { "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": "*" } ...
**注意:**視您的需求以及與 Lambda 函數整合的服務而定,您可能需要授予其他 AWS 服務的其他權限。如需詳細資訊,請參閱 AWS Lambda 權限。
修改 Lambda 函數所需的權限
若要授予使用者修改 Lambda 函數的權限,請新增類似下列內容的權限:
**注意:**視您要授與的寫入存取權層級而定,在使用 AWS CLI 或 SDK 時,可能需要授予下列全部或部分權限。
{ "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" ], "Resource": "arn:aws:lambda:region:AccountID:function:function_name" }, { "Sid": "ActionsWhichSupportCondition", "Effect": "Allow", "Action": [ "lambda:CreateEventSourceMapping", "lambda:UpdateEventSourceMapping", "lambda:DeleteEventSourceMapping" ], "Resource": "*", "Condition": { "StringEquals": { "lambda:FunctionArn": "arn:aws:lambda:region:AccountID:function:function_name" } } }, { "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions", "Effect": "Allow", "Action": [ "lambda:UntagResource", "lambda:TagResource" ], "Resource": "*" } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
您可以使用 lambda:AddPermission 和 lambda:RemovePermission,對已傳遞政策中包含的主體進一步限制存取權。您也可以將 lambda:UpdateEventSourceMapping 和 lambda:DeleteEventSourceMapping 限制為特定的事件來源映射。如需詳細資訊,請參閱 AWS Lambda 以身分為基礎的 IAM 政策。
若要指定客戶受管 AWS Key Management Service (KMS) (AWS KMS) 金鑰來加密環境變數,請使用類似下列內容的 IAM 政策程式碼片段新增其他 KMS 權限:
... { "Sid": "PermissionsForCryptoOperations", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:CreateGrant" ], "Resource": "arn:aws:kms:region:AccountID:key/keyID" }, { "Sid": "PermissionsToListExistingKeys", "Effect": "Allow", "Action": [ "kms:ListKeys", "kms:ListAliases" ], "Resource": "*" } ...
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
若要使用 Lambda 主控台修改 Lambda 函數的組態,請新增類似下列內容的權限:
... { "Sid": "PermissionsToViewFunctionsInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings" ], "Resource": "*" } ...
調用 Lambda 函數所需的權限
若要使用 AWS CLI 或 SDK 手動調用 Lambda 函數以進行測試,請新增類似下列內容的權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionToInvoke", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:region:AccountID:function:function_name" } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
若要使用 Lambda 主控台列出 Lambda 函數,請新增類似下列內容的權限:
... { "Sid": "PermissionsToViewFunctionsConfigInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings", "lambda:GetFunction" ], "Resource": "*" } ...
若要允許其他服務調用 Lambda 函數,請針對 AWS Lambda 使用以資源為基礎的政策 。您也可以使用函數政策提供對 Lambda 函數的跨帳戶存取權。下列範例政策可用來允許來自不同 AWS 帳戶的使用者手動調用 Lambda 函數:
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "PermissionToInvoke", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ExternalAccountID:user/username" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:region:AccountID:function:function_name" } ] }
**注意:**更新政策以包含您的相關地區、帳戶 ID、函數名稱和 ARN 等。
監視 Lambda 函數所需的權限
若要在 Lambda 主控台的**「監控」**檢視中檢視 Amazon CloudWatch 指標,請新增類似下列內容的權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionForCloudWatchMetrics", "Effect": "Allow", "Action": [ "cloudwatch:GetMetricStatistics", "cloudwatch:GetMetricData" ], "Resource": "*" } ] }
若要授予特定 CloudWatch 指標和 CloudWatch Logs Insights 的權限,請參閱 Amazon CloudWatch 權限參考資料和日誌權限參考資料。
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 個月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前