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 执行任务的其他权限

使用 Run a Job (.sync) 模式的任务需要额外的权限才能监控和接收来自连接服务的 API 的响应。

当作业在互联服务上运行时,Step Functions 使用两种方法来监控作业的状态:轮询事件

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

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

解决卡住的.sync 工作流程

对于同时支持轮询和事件的 Run a Job (.sync) 任务,即使角色缺少所需的轮询权限,您的任务也可以使用事件正常完成。

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

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

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

    注意

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

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

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

取消工作流程的权限

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

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

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

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