如何解决 Lambda 的权限问题?

2 分钟阅读
0

我有几个与我的 AWS Lambda 函数相关的权限问题。我应该采取哪些故障排除步骤?

简短描述

Lambda 函数权限问题是由于以下原因造成的:

  • Lambda 函数无权运行代码中的操作。
  • 负责调用 Lambda 函数的 AWS 服务没有足够的权限调用该函数。
  • 用户账户没有创建、更新或删除 Lambda 资源的适当权限。
  • 由于缺少 Amazon Elastic Compute Cloud (Amazon EC2) 权限,Lambda 无权创建弹性网络接口。

解决方法

权限注意事项

  • Lambda 函数的执行角色是一个 AWS Identity and Access Management (IAM) 角色,它向该函数授予访问 AWS 服务和资源的权限。您在创建函数时提供此角色,Lambda 将在调用您的函数时代入该角色。您可以创建一个执行角色,该角色有权向 Amazon CloudWatch 发送日志以及将跟踪数据上传到 AWS X-Ray。
  • 您可以随时向 Lambda 函数的执行角色添加或移除权限。您也可以将 Lambda 函数配置为使用其他角色。为您的函数使用 AWS 开发工具包调用的任何 AWS 服务添加权限。然后,为 Lambda 用于开启可选功能的 AWS 服务添加权限。
  • 您在创建 Lambda 函数时提供执行角色。当您调用新的 Lambda 函数时,Lambda 会通过代入执行角色自动为您的函数提供临时凭证。您不必在函数代码中调用 sts: AssumeRole。当您向 Lambda 函数添加权限时,还要更新该函数的代码或配置。通过更新函数的代码或配置,您的函数的正在运行的实例将被强制停止,这样可能会被替换掉。有关更多信息,请参阅使用 Lambda 的基于资源的策略
  • 使用基于资源的策略向其他 AWS 账户或组织授予每种资源的使用权限。基于资源的策略可以允许 AWS 服务代表您调用 Lambda 函数。
  • 要调用或管理 Lambda 函数,请授予账户权限。创建基于资源的单一策略,向 AWS Organizations 中的整个组织授予权限。使用基于资源的策略向 AWS 服务授予调用权限,以便调用函数以响应指定的账户活动。
  • 基于资源的策略适用于单个函数、版本、别名或层版本。基于资源的策略向一个或多个 AWS 服务和账户授予权限。对于需要访问多个资源的可信账户,或者要使用基于资源的策略不支持的 API 操作,请使用跨账户角色。有关更多信息,请参阅 Lambda 权限
  • 使用基于 IAM 身份的策略向您账户中的用户授予访问 Lambda 的权限。基于身份的策略可以直接应用于用户,也可以应用于与用户关联的群组和角色。授予其他账户中的用户在您的账户中担任角色和访问您的 Lambda 资源的权限。
  • Lambda 提供 AWS 托管策略,授予对 Lambda API 操作的访问权限。托管策略可能会向用于开发和管理 Lambda 资源的其他 AWS 服务授予访问权限。Lambda 根据需要更新这些托管策略,以确保您的用户在新功能发布时可以访问这些功能。有关更多信息,请参阅适用于 Lambda 的基于身份的 IAM 策略

问题排查步骤

1.    如果 Lambda 函数应该调用另一个函数或其他 AWS 服务但失败了,请检查 Lambda 执行角色。
有关更多信息,请参阅 Lambda 执行角色

2.    验证 AWS 服务或用户是否已设置了 lambda:InvokeFunction 操作的权限。
有关更多信息,请参阅 AWS Lambda 的操作、资源和条件键

3.    在跨账户场景中,访问源账户和目标账户以检查担任 IAM 角色调用 Lambda 函数所需的权限。
有关更多信息,请参阅如何配置 Lambda 函数以代入其他 AWS 账户中的 IAM 角色?

4.    要连接到 VPC,您的 Lambda 函数的执行角色必须具有以下权限:
ec2:CreateNetworkInterface
ec2:DescribeNetworkInterfaces
ec2:DeleteNetworkInterface

5.    通过将非工作权限集与您的任何工作设置进行比较来解决权限问题。您也可以参阅 AWS 文档来验证权限。

6.    源账户需要获得调用 Lambda 函数的权限。查看 Lambda 函数所需的事件源映射权限。事件源映射使用函数执行角色中的权限来读取和管理事件源中的项目。权限、事件结构、设置和轮询行为因事件源而异。有关更多信息,请参阅故障排除 AWS Lambda 身份和访问

7.    查看您的 AWS CloudTrail 日志,跟踪对 Lambda 发出的 API 调用。查看 CloudTrail 收集的信息以确定:
向 Lambda 发出的请求。
发出请求的 IP 地址。
谁提出了请求。
提出请求的时间。
有关更多信息,请参阅使用 CloudTrail 记录 Lambda API 调用

8.    如果您仍然无法解决问题,请向 AWS Support 提交案例。在案例中提供以下信息:

  • Lambda 函数 ARN。
  • 包含所有 AWS 服务的 Lambda 函数设置的工作流程。
  • 有关问题是间歇性还是持续性的详细信息。
  • 有关问题是否为跨账户场景的详细信息。
  • 涉及的权限和/或 IAM 角色名称。
  • 从问题发生时起,以 .txt 格式填写的 CloudWatch 日志。这些 CloudWatch 日志用于识别 Lambda 函数错误,包括超时问题、init 持续时间和权限问题。
  • 问题的确切时间戳,时区或时间戳采用 UTC 时间。

注意:出于安全和隐私原因,AWS Support 代表无权访问客户 CloudWatch 日志。


相关信息

如何使用 AWS Lambda 的基于资源的策略授予对 AWS 服务的访问权限?

如何配置 Lambda 函数以代入其他 AWS 账户中的 IAM 角色?

AWS 官方
AWS 官方已更新 1 年前
没有评论