Step Functions 如何为集成服务生成 IAM 策略 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Step Functions 如何为集成服务生成 IAM 策略

在 Amazon Step Functions 控制台中创建状态机时,Step Functions 将根据状态机定义中使用的资源生成 Amazon Identity and Access Management(IAM)策略,如下所示:

  • 对于优化集成,Step Functions 将为状态机创建一个包含必要权限和角色的策略。

    提示:您可以在集成优化的服务下面的每个服务页面中查看示例策略。

  • 对于标准集成,Step Functions 将创建一个具有部分权限的 IAM 角色。

    您必须添加状态机与服务交互所需的所有缺失角色策略。

动态资源与静态资源

静态资源直接在状态机的任务状态中定义。在任务状态中包含要直接调用的资源信息时,Step Functions 可以只为这些资源创建 IAM 角色。

动态资源在启动状态机时作为输入传递,或者作为输入传递给各个状态,并使用 JSONata 或 JSONPath 进行访问。当您将动态资源传递给任务时,Step Functions 无法自动缩小权限范围,因此 Step Functions 将创建一个具有更高宽松度的策略,该策略指定:"Resource": "*"

使用 .sync 的任务的额外权限

对于使用运行作业(.sync)模式的任务,需要额外的权限来监视和接收来自所连接服务的 API 的响应。

当作业在连接的服务(轮询事件)上运行时,Step Functions 使用两种方法来监控作业的状态。

轮询需要 DescribeGet API 操作的权限。例如,对于 Amazon ECS,状态机必须具有 ecs:DescribeTasks 的允许权限,对于 Amazon Glue,状态机需要 glue:GetJobRun 的允许权限。如果角色中缺少必需的权限,则 Step Functions 可能无法确定您的作业状态。使用轮询方法的其中一个原因是,某些服务集成不支持 EventBridge 事件,而且某些服务仅在尽力的基础上发送事件。

或者,您可以使用从 Amazon 服务发送到 Amazon EventBridge 的事件。EventBridge 使用托管规则将事件路由到 Step Functions,因此该角色需要 events:PutTargetsevents:PutRuleevents:DescribeRule 的权限。如果角色中缺少这些权限,则在 Step Functions 得知您的任务已完成之前,可能会有一段延迟。有关 EventBridge 事件的更多信息,请参阅 Amazon 中的事件

排查 .sync 工作流卡住的问题

对于同时支持轮询和事件的“运行作业”(.sync)任务,即使角色缺少轮询所需的权限,您的任务仍可以通过事件正常完成。

在前面的场景中,您可能没有注意到轮询权限缺失或不正确。在极少数情况下,事件无法传送到 Step Functions 或由 Step Functions 处理,您的执行可能会卡住。

要验证您的轮询权限配置是否正确,您可以通过以下方式在没有 EventBridge 事件的环境中运行执行

  • 删除 EventBridge 中负责将事件转发给 Step Functions 的托管规则。

    注意

    因为托管规则由账户中的所有状态机共享,因此应仅使用测试或开发账户,以避免对其他状态机造成意外影响。

  • 通过检查目标服务策略模板中用于 events:PutRuleResource 字段,可以确定要删除的特定托管规则。下次创建或更新使用该服务集成的状态机时,将重新创建托管规则。

  • 有关删除 EventBridge 规则的更多信息,请参阅禁用或删除规则

取消工作流的权限

如果使用运行作业 (.sync) 模式的任务停止,Step Functions 会尽力尝试取消该任务。

取消任务需要 CancelStopTerminateDelete API 操作的权限,例如 batch:TerminateJobeks:DeleteCluster。如果您的角色中缺少这些权限,Step Functions 将无法取消您的任务,而且当任务继续运行时,可能会产生额外的费用。有关停止任务的更多信息,请参阅运行任务

了解有关集成模式的更多信息

要了解有关同步任务的信息,请参阅探索 Step Functions 中的服务集成模式