控制对 Lambda 函数 URL 的访问
注意
从 2025 年 10 月开始,新的函数 URL 将同时需要 lambda:InvokeFunctionUrl 和 lambda:InvokeFunction 权限。
您可以使用 AuthType 参数和附上特定函数的基于资源的策略来控制对 Lambda 函数 URL 的访问。这两个组件的配置决定了谁可以对函数 URL 调用或执行其他管理操作。
AuthType 参数确定了 Lambda 如何对函数 URL 的请求进行身份验证或授权。配置函数 URL 时,必须指定以下 AuthType 选项之一:
-
AWS_IAM– Lambda 根据 IAM 主体的身份策略和函数基于资源的策略使用 AWS Identity and Access Management (IAM) 对请求进行身份验证和授权。如果只希望经过身份验证的用户和角色使用函数 URL 调用函数,请选择此选项。
-
NONE– Lambda 在调用函数之前不会执行任何身份验证。但是,函数基于资源的策略始终有效,并且必须在函数 URL 接收请求之前授予公有访问权限。选择此选项可允许对函数 URL 进行未经身份验证的公有访问。
要了解更多关于安全性的洞察,可以使用 AWS Identity and Access Management Access Analyzer 获取对函数 URL 的外部访问的全面分析。IAM Access Analyzer 还可以监控 Lambda 函数的新权限或更新权限,以帮助您识别授予公有和跨账户访问的权限。可免费使用 IAM Access Analyzer。要开始使用 IAM Access Analyzer,请参阅使用 AWS IAM Access Analyzer。
该页面包含两种身份验证类型的基于资源的策略示例,以及如何使用 AddPermission API 操作或 Lambda 控制台创建这些策略。有关设置权限后如何调用函数 URL 的信息,请参阅调用 Lambda 函数 URL。
使用 AWS_IAM 身份验证类型
如果选择 AWS_IAM 身份验证类型,则需要调用 Lambda 函数 URL 的用户必须具有 lambda:InvokeFunctionUrl 和 lambda:InvokeFunction 权限。根据发出调用请求的人员,您可能需要使用基于资源的策略授予此权限。
如果发出请求的主体与函数 URL 的 AWS 账户 相同,则主体必须在其基于身份的策略中拥有 lambda:InvokeFunctionUrl 和 lambda:InvokeFunction 权限,或者在函数基于资源的策略中获授权限。换句话说,如果用户已经在其基于身份的策略中拥有 lambda:InvokeFunctionUrl 和 lambda:InvokeFunction 权限,则基于资源的策略为可选。策略评估遵循策略评估逻辑中概述的规则。
如果发出请求的主体位于不同的账户中,则主体必须同时具有基于身份的策略(该策略为其提供 lambda:InvokeFunctionUrl 和 lambda:InvokeFunction 权限)和基于资源的策略(基于其尝试调用的函数)中授予的权限。策略评估遵循确定是否允许跨账户请求中概述的规则。
以下基于资源的策略允许 AWS 账户 444455556666 中的 example 角色调用与函数 my-function 关联的函数 URL:lambda:InvokedViaFunctionUrl 上下文键将操作 lambda:InvokeFunction 限制为函数 URL 的调用。这意味着主体必须使用函数 URL 来调用该函数。如果不包含 lambda:InvokedViaFunctionUrl,则除了函数 URL 之外,主体还可以通过其他调用方法调用函数。
例 — 基于跨账户资源的策略
您可以按照以下步骤通过控制台创建这一基于资源的策略:
将 URL 调用权限授予另一个账户(控制台)
-
打开 Lamba 控制台的函数
页面。 -
选择要为其授予 URL 调用权限的函数的名称。
-
选择 Configuration(配置)选项卡,然后选择 Permissions(权限)。
-
在 Resource-based policy(基于资源的策略)下,选择 Add permissions(添加权限)。
-
选择 Function URL(函数 URL)。
-
对于 Auth type(身份验证类型),选择 AWS_IAM。
-
输入策略语句的语句 ID。
-
对于主体,请输入要向其授予权限的用户或角色的 Amazon 资源名称(ARN)。例如:
444455556666。 -
选择保存。
或者,也可以使用以下 add-permissionlambda:InvokeFunctionUrl 和 lambda:InvokeFunction 语句。例如:
aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeURL \ --actionlambda:InvokeFunctionUrl\ --principal 444455556666 \ --function-url-auth-type AWS_IAM
aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeFunction \ --actionlambda:InvokeFunction\ --principal 444455556666 \ --invoked-via-function-url
使用 NONE 身份验证类型
重要
当您的函数 URL 身份验证类型为 NONE 且您有基于资源的策略授予公有访问权限时,任何使用您函数 URL 的未经身份验证的用户都可以调用您的函数。
在某些情况下,您可能希望函数 URL 为公有。例如,您可能希望处理直接从 Web 浏览器发出的请求。要允许函数 URL 公有访问权限,请选择 NONE 身份验证类型。
如果选择 NONE 身份验证类型,Lambda 不会使用 IAM 对函数 URL 的请求进行身份验证。但是,函数必须拥有允许 lambda:InvokeFunctionUrl 和 lambda:InvokeFunction 的基于资源的策略。使用控制台或 AWS Serverless Application Model (AWS SAM) 创建具有身份验证类型 NONE 的函数 URL 时,Lambda 会自动创建基于资源的策略。如果直接使用 AWS CLI、AWS CloudFormation 或 Lambda API,则必须自己添加策略。
我们建议在使用 NONE 身份验证类型时,在基于资源的策略中包含 lambda:InvokedViaFunctionUrl 上下文键。此上下文键可确保只能通过函数 URL 调用函数,而不能通过其他调用方法进行调用。
请注意有关该策略的以下信息:
-
所有实体均可调用
lambda:InvokeFunctionUrl和lambda:InvokeFunction。这意味着拥有函数 URL 的任何人都可以调用函数。 -
lambda:FunctionUrlAuthType条件键值为NONE。这意味着,此策略仅在函数 URL 的身份验证类型也为NONE时允许访问。 -
该
lambda:InvokedViaFunctionUrl条件可确保只能通过函数 URL 调用该函数,而不能通过其他调用方法进行调用。
例 — NONE 身份验证类型默认基于资源的策略
使用 AWS CLI 创建基于资源的策略
除非使用控制台或 AWS SAM 创建身份验证类型为 NONE 的函数 URL,否则必须自己添加基于资源的策略。使用以下命令,创建 lambda:InvokeFunctionUrl 和 lambda:InvokeFunction 权限的语句。每条语句都必须添加到单独的命令中。
aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeURL \ --actionlambda:InvokeFunctionUrl\ --principal * \ --function-url-auth-type NONE
aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeFunction \ --actionlambda:InvokeFunction\ --principal * \ --invoked-via-function-url
注意
如果您删除身份验证类型为 NONE 的函数 URL,Lambda 不会自动删除关联的基于资源的策略。如果要删除此策略,您必须手动执行该操作。
如果函数基于资源的策略未授予 lambda:invokeFunctionUrl 和 lambda:InvokeFunction 权限,则用户在尝试调用函数 URL 时,将收到 403 禁止的错误代码。即使函数 URL 使用 NONE 身份验证类型,也会发生这种情况。
治理和访问控制
除了函数 URL 调用权限外,还可以控制对用于配置函数 URL 的操作的访问。Lambda 支持以下针对函数 URL 的 IAM policy 操作:
-
lambda:InvokeFunctionUrl– 使用函数 URL 调用 Lambda 函数。 -
lambda:CreateFunctionUrlConfig– 创建函数 URL 并设置其AuthType。 -
lambda:UpdateFunctionUrlConfig– 更新函数 URL 配置及其AuthType。 -
lambda:GetFunctionUrlConfig– 查看函数 URL 的详细信息。 -
lambda:ListFunctionUrlConfigs– 列出函数 URL 配置。 -
lambda:DeleteFunctionUrlConfig– 删除函数 URL。
要允许或拒绝对其他 AWS 实体的函数 URL 访问,请在 IAM policy 中包含这些操作。例如,以下策略授予 AWS 账户 444455556666 中的 example 角色在账户 123456789012 中更新函数 my-function 的函数 URL 的权限。
例 跨账户函数 URL 策略
条件键
要对函数 URL 进行精细访问控制,请使用条件上下文键。Lambda 支持函数 URL 的以下上下文键:
-
lambda:FunctionUrlAuthType– 定义了一个枚举值,描述函数 URL 使用的身份验证类型。该值可以是AWS_IAM或NONE。 -
lambda:InvokedViaFunctionUrl— 将lambda:InvokeFunction操作限制为通过函数 URL 进行调用。这可以确保只能使用函数 URL 调用该函数,而不能通过其他调用方法进行调用。有关使用lambda:InvokedViaFunctionUrl上下文键的基于资源的策略示例,请参阅使用 AWS_IAM 身份验证类型和使用 NONE 身份验证类型中的示例。
可以在与函数关联的策略中使用这些上下文键。例如,您可能希望限制谁可以对函数 URL 进行配置更改。要拒绝对 URL 身份验证类型 NONE 的任何函数的所有 UpdateFunctionUrlConfig 请求,可以定义以下策略:
例 带有显式拒绝的函数 URL 策略
要授予 AWS 账户 444455556666 中的 example 角色对 URL 身份验证类型 AWS_IAM 的函数进行 CreateFunctionUrlConfig 和 UpdateFunctionUrlConfig 请求的权限,可以定义以下策略:
例 带有显式允许的函数 URL 策略
您还可以在服务控制策略(SCP)中使用此条件键。使用 SCP 在 AWS Organizations 中管理整个企业的权限。例如,要拒绝用户创建或更新使用除 AWS_IAM 身份验证类型以外的任何身份验证类型的函数 URL,请使用以下服务控制策略: