

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Step Functions 如何为集成服务生成 IAM 策略
<a name="service-integration-iam-templates"></a>

当您在 AWS Step Functions 控制台中创建状态机时，Step Functions 会根据状态机定义中使用的资源生成一个 AWS Identity and Access Management (IAM) 策略，如下所示：
+ 对于**优化集成**，Step Functions 将为状态机创建一个包含必要权限和角色的策略。

  提示：您可以在[集成优化的服务](integrate-optimized.md)下面的每个服务页面中查看示例策略。
+ 对于**标准集成**，Step Functions 将创建一个具有部分权限的 IAM 角色。

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

## 动态资源与静态资源
<a name="connect-iam-dynamic-static"></a>

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

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

## 使用 .sync 的任务的额外权限
<a name="connect-iam-sync-async"></a>

对于使用[运行作业（.sync）](connect-to-resource.md#connect-sync)模式的任务，需要额外的权限来监视和接收来自所连接服务的 API 的响应。

当作业在连接的服务（**轮询**和**事件**）上运行时，Step Functions 使用两种方法来监控作业的状态。

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

或者，您可以使用从 AWS 服务发送到 Amazon 的事件 EventBridge。事件通过托管规则路由到 Step EventBridge Functions，因此该角色需要`events:PutTargets``events:PutRule`、和`events:DescribeRule`的权限。如果角色中缺少这些权限，则在 Step Functions 得知您的任务已完成之前，可能会有一段延迟。有关 EventBridge 事件的更多信息，请参阅[来自 AWS 服务的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-event.html)。

## 排查 .sync 工作流卡住的问题
<a name="polling-events-troubleshooting"></a>

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

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

 要验证您的轮询权限配置是否正确，您可以通过以下方式在没有 EventBridge 事件的环境中运行执行 
+  删除中负责将事件转发 EventBridge 到 Step Functions 的托管规则。
**注意**  
 因为托管规则由账户中的所有状态机共享，因此应仅使用测试或开发账户，以避免对其他状态机造成意外影响。
+ 通过检查目标服务策略模板中用于 `events:PutRule` 的 `Resource` 字段，可以确定要删除的特定托管规则。下次创建或更新使用该服务集成的状态机时，将重新创建托管规则。
+  有关删除 EventBridge 规则的更多信息，请参阅[禁用或删除规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-delete-rule.html)。

## 取消工作流的权限
<a name="iam-cancel-tasks"></a>

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

取消任务需要 `Cancel`、`Stop`、`Terminate` 或 `Delete` API 操作的权限，例如 `batch:TerminateJob` 或 `eks:DeleteCluster`。如果您的角色中缺少这些权限，Step Functions 将无法取消您的任务，而且当任务继续运行时，可能会产生额外的费用。有关停止任务的更多信息，请参阅[运行任务](connect-to-resource.md#connect-sync)。

**了解有关集成模式的更多信息**  
 要了解有关同步任务的信息，请参阅[探索 Step Functions 中的服务集成模式](connect-to-resource.md)。