本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Step Functions 如何为集成服务生成 IAM 策略
在 Amazon Step Functions 控制台中创建状态机时,Step Functions 将根据状态机定义中使用的资源生成 Amazon Identity and Access Management (IAM) 策略,如下所示:
-
如果状态机使用其中一个优化的集成,Step Functions 将为状态机创建一个包含必要权限和角色的策略。(例外:MediaConvert 集成要求您手动设置权限,请参阅IAM通话政策 AWS Elemental MediaConvert。)
-
如果您的状态机使用其中一个 Amazon 开发工具包集成,则将创建一个具有部分权限的 IAM 角色。之后,您可以使用 IAM 控制台添加任何缺失的角色策略。
以下示例显示 Step Functions 如何根据您的状态机定义生成 IAM 策略。示例代码中的项目(例如
)将替换为状态机定义中列出的静态资源。如果您有多个静态资源,则在 IAM 角色中每个资源都将有一个条目。[[resourceName]]
动态资源与静态资源
静态资源直接在状态机的任务状态中定义。在任务状态中包含要直接调用的资源信息时,Step Functions 只为这些资源创建 IAM 角色。
动态资源是传递到您的状态输入并使用路径访问的资源(请参阅使用JSONPath路径)。如果要将动态资源传递给任务,Step Functions 将创建一个具有更高特权的策略,该策略指定 "Resource": "*"
。
使用“运行作业”模式执的任务附加权限
对于使用运行作业模式(以 .sync
结尾的模式),需要额外的权限来监视和接收来自所连接服务的 API 操作的响应。与使用“请求响应”或“等待回调”模式的任务相比,相关策略包含的权限更多。有关同步任务的信息,请参阅 探索 Step Functions 中的服务集成模式。
注意
您需要为支持“运行任务 (.sync)”模式的服务集成提供额外权限:
当作业在连接的服务上运行时,Step Functions 使用两种方法来监控作业的状态,即轮询和事件。
轮询需要 Describe
或 Get
API 操作的权限,例如 ecs:DescribeTasks
或 glue:GetJobRun
。如果您的角色中缺少这些权限,则 Step Functions 可能无法确定您的作业状态。这是因为某些“运行作业”(.sync) 服务集成不支持 EventBridge 事件,而且某些服务仅在尽力的基础上发送事件。
从 Amazon 服务发送到 Amazon EventBridge 的事件使用托管规则定向到 Step Functions,并且需要 events:PutTargets
、events:PutRule
和 events:DescribeRule
的权限。如果您的角色中缺少这些权限,则在 Step Functions 得知您的任务已完成之前,可能会有一段延迟。有关 EventBridge 事件的更多信息,请参阅 Amazon 中的事件。
注意
对于同时支持轮询和事件的“运行任务” (.sync)任务,您的任务仍可使用事件正常完成。即使您的角色缺少轮询所需的权限,也可能发生这种情况。在这种情况下,您可能不会立即注意到轮询权限不正确或缺失。在极少数实例下,事件无法传送到 Step Functions 或由 Step Functions 处理,您的执行可能会卡住。要验证您的轮询权限配置是否正确,您可以通过以下方式在没有 EventBridge 事件的环境中运行执行:
-
删除 EventBridge 中负责将事件转发给 Step Functions 的托管规则。该托管规则由账户中的所有状态机共享,因此应仅在测试或开发账户中执行此操作,避免对其他状态机造成任何意外影响。通过检查目标服务策略模板中用于
events:PutRule
的Resource
字段,可以确定要删除的特定托管规则。下次创建或更新使用该服务集成的状态机时,将重新创建托管规则。有关删除 EventBridge 规则的更多信息,请参阅禁用或删除规则。 -
使用 Step Functions Local 进行测试,它不支持使用事件来完成运行作业 (.sync) 任务。要使用 Step Functions Local,请假设状态机使用的 IAM 角色。您可能需要编辑信任关系。将
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和AWS_SESSION_TOKEN
环境变量设置为假定角色的值,然后使用 java -jar StepFunctionsLocal.jar 启动 Step Functions Local。最后,使用带 --endpoint-url 参数的 Amazon CLI 创建状态机、启动执行并获取执行历史记录。有关更多信息,请参阅 使用 Step Functions Local 测试状态机(不支持)。
如果使用运行作业 (.sync) 模式的任务停止,Step Functions 会尽力尝试取消该任务。这需要 Cancel
、Stop
、Terminate
或 Delete
API 操作的权限,例如 batch:TerminateJob
或 eks:DeleteCluster
。如果您的角色中缺少这些权限,Step Functions 将无法取消您的任务,而且当任务继续运行时,可能会产生额外的费用。有关停止任务的更多信息,请参阅运行任务。