如何解决如何赋予状态机中的 Lambda 函数访问权限来描述状态机?
我有一个 LambdaInvoke
,它是状态机的一部分。我已将 input_path="$$.Execution"
指定为 give it the state machine execution ARN。现在,如何让属于 LambdaFunction
的 LambdaInvoke
访问它所属的 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 失败。依赖列表:
- 上面Lambda函数角色的默认策略
- 另一个 Lambda 函数的角色的默认策略启动状态机
- 启动状态机的 Lambda 函数
- 状态机
- 步骤 1 中的 Lambda 函数
- 包含启动状态机的 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 举报,一经查实,本站将立刻删除。