如何为 Lambda 函数提供精细访问权限?
我想授予对由其 Amazon Resource Name(ARN)标识的特定 AWS Lambda 函数的读写权限。如何为 Lambda 函数提供精细访问权限?
简短描述
您可以使用 AWS Identity and Access Management (IAM) 策略为 Lambda 函数配置权限,以便:
- 创建 Lambda 函数
- 删除 Lambda 函数
- 查看 Lambda 函数的详细配置信息
- 修改 Lambda 函数
- 调用 Lambda 函数
- 监控 Lambda 函数
在以下策略示例中,支持资源级权限的 Lambda API 操作仅限于每个语句的 Resource 元素中列出的特定 Lambda 函数。对于支持这些元素的 API 操作,在 Condition 元素中使用了特定的函数名称。
对于不支持资源级权限的 API 操作,需要在 Resource 元素中使用通配符(“*”),并且不能应用任何 Lambda 服务特定的条件键。有关 Lambda 支持的 IAM 操作、资源和条件的更多信息,请参阅 AWS Lambda 的操作、资源和条件键。
语句的 Resource 元素的值使用 ARN 来标识该语句应用到的资源。例如,当 Action 为 Invoke 时,则 Resource 为函数 ARN。IAM 将此 ARN 与通过 Invoke 请求的 FunctionName 和 Qualifier 参数标识的函数的 ARN 进行匹配。有关更多信息,请参阅 AWS Lambda 函数版本。
**注意:**如果您使用多个版本和别名,您可能需要在资源元素中添加“arn:aws:lambda:region:AccountID:function:function_name:*”。
解决方法
创建 Lambda 函数所需的权限
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
要使用 AWS 命令行界面 (AWS CLI) 或开发工具包创建 Lambda 函数,需要拥有 lambda:CreateFunction 和 iam:PassRole 权限。有关示例策略,请参阅 AWS Lambda 的基于身份的 IAM 策略。以下策略允许 API 调用者创建 Lambda 函数,作为函数 Lambda 执行角色绕过 IAM 角色,然后将代码上传到本地机器中:
{ "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 或开发工具包删除 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 或开发工具包授予以下全部或部分权限。
{ "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 或开发工具包授予以下全部或部分权限。
{ "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 (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 或开发工具包手动调用 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 权限参考和 CloudWatch Logs 权限参考。
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前