微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何赋予状态机中的 Lambda 函数访问权限来描述状态机?

如何解决如何赋予状态机中的 Lambda 函数访问权限来描述状态机?

我有一个 LambdaInvoke,它是状态机的一部分。我已将 input_path="$$.Execution" 指定为 give it the state machine execution ARN。现在,如何让属于 LambdaFunctionLambdaInvoke 访问它所属的 states:DescribeExecution 上的 StateMachine

由于“资源之间的循环依赖”,state_machine.grant_read(lambda_invoke.lambda_function)lambda_function.role.add_to_policy(aws_iam.PolicyStatement(resources=[state_machine.state_machine_arn],actions=["states:DescribeExecution"]) 都导致 CloudFormation 失败。依赖列表:

  1. 上面Lambda函数角色的认策略
  2. 一个 Lambda 函数的角色的认策略启动状态机
  3. 启动状态机的 Lambda 函数
  4. 状态机
  5. 步骤 1 中的 Lambda 函数
  6. 包含启动状态机的 Lambda 函数的堆栈

解决方法

无论 StateMachine 是如何启动的,都有两种不同的角色,一种用于 Lambda 函数,另一种用于 StateMachine。我们以向 sqs 发送消息为例。您可以直接使用带有 StateMachine 集成的 sqs 执行此操作,或者您可以使用 Lambda 来为您执行此操作。

状态机角色

赋予 StateMachine 的角色需要用于日志记录等目的,但也取决于您使用的集成,例如,如果您有 sqs:sendMessage,则需要有 sqs附加政策以实现这一点。如果您在 Lambda Functions 中使用 StateMachine,则需要为 lambda:InvokeFunction 制定政策。

Lambda 函数角色 假设您有一个 Lambda,它向 SQS 发送消息,您没有在定义文件中使用 arn:aws:states:::sqs:sendMessage...,那么您的 StateMachine 角色需要 lambda:InvokeFunction权限,但您的 Lambda 需要 sqs 的权限。

现在对于您的用例,您的 Lambda 需要具有 states:DescribeExecution 的权限,而不是 sqs。如果您的 Lambda 函数在控制台中成功运行,并且您的 StateMachine 有权执行该函数,那么一切都应该可以运行。

如果您有一个 Lambda 启动一个 StateMachine,它只需要访问启动一个 StateMachine

循环依赖问题

你真的没有循环依赖问题,你有权限问题。除了为每次启动 StateMachine 时创建一个新角色之外,您不能将 Lambda 范围限定为一个实例,原因是您无法在 IAM 的条件键上下文中引用任何内容{1}} json,因此该方法不起作用。您可以将 Lambda 限制为仅针对特定 StateMachine 执行,但同样适用于所有用户。

实际上并不需要由 Lambda 启动的 StateMachine 来描述它从哪个 StateMachine 启动。原因是您可以简单地将 StateMachine 的状态传递给该函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。