本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Step Functions 中访问其它 AWS 账户中的资源
为访问工作流中不同 AWS 账户中配置的资源,Step Functions 提供了跨账户存取。使用 Step Functions 服务集成,可以调用任何跨账户 AWS 资源,即使该 AWS 服务不支持基于资源的策略或跨账户调用。
例如,假设您在同一个 AWS 区域拥有两个 AWS 账户,分别称为“开发”和“测试”。使用跨账户存取,“开发”账户中的工作流可以访问“测试”账户中的资源,如 Amazon S3 存储桶、Amazon DynamoDB 表和 Lambda 函数。
重要
IAM 角色和基于资源的策略仅在单个分区内跨账户委派访问权限。例如,假定您在标准 aws
分区的美国西部(加利福尼亚北部)中有一个账户。您在 aws-cn
分区的中国(北京)中也有一个账户。您不能使用中国(北京)的账户中 Amazon S3 基于资源的策略,来允许标准 aws
账户中用户的访问权限。
有关跨账户存取的更多信息,请参阅《IAM 用户指南》中的跨账户策略评估逻辑。
虽然每个 AWS 账户都能完全控制自己的资源,但借助 Step Functions,您就可以重组、交换、添加或删除工作流中的步骤,而无需定制任何代码。即使流程发生变化或应用程序不断发展,您也可以这样做。
您还可以调用嵌套状态机的执行,这样它们就可以在不同的账户中使用。这样做可以有效分离和隔离您的工作流。当您在工作流中使用 .sync 服务集成模式访问不同账户中的另一个 Step Functions 工作流时,Step Functions 会使用轮询来消耗您分配的配额。有关更多信息,请参阅 运行作业 (.sync)。
注意
目前,跨区域 AWS 开发工具包集成和跨区域 AWS 资源访问在 Step Functions 中不可用。
关键的跨账户资源概念
- 执行角色
-
Step Functions 用来运行代码和访问 AWS 资源(例如 AWS Lambda 函数的调用操作)的 IAM 角色。
- 服务集成
-
可以在工作流的
Task
状态内调用的 AWS 开发工具包集成 API 操作。 - 源账户
拥有状态机并已开始执行的 AWS 账户。
- 目标账户
进行跨账户调用的 AWS 账户。
- 目标角色
目标账户中的 IAM 角色,状态机在调用目标账户所拥有的资源时会假定该角色。
- 运行作业 (.sync)
一种服务集成模式,用于调用 AWS Batch 等服务。它还能使 Step Functions 状态机在进入下一状态前等待作业完成。要指示 Step Functions 应该等待,请在
Task
状态定义的Resource
字段中附加.sync
后缀。
调用跨账户资源
要在工作流中调用跨账户资源,请执行以下操作:
在包含资源的目标账户中创建 IAM 角色。此角色向包含状态机的源账户授予访问目标账户资源的权限。
在
Task
状态的定义中,指定在调用跨账户资源之前由状态机担任的目标 IAM 角色。修改目标 IAM 角色中的信任策略来允许源账户临时担任此角色。信任策略必须包含源账户中定义的状态机的 Amazon 资源名称(ARN)。此外,还要在目标 IAM 角色中定义调用 AWS 资源的相应权限。
更新源账户的执行角色,使其包含担任目标 IAM 角色所需的权限。
有关示例,请参阅教程中的在 Step Functions 中访问跨账户 AWS 资源。
注意
您可以配置状态机承担一个 IAM 角色,以便从多个 AWS 账户访问资源。但是,状态机在给定时间只能承担一个 IAM 角色。
![访问跨账户资源的概念](images/cross-account-support-concept.png)
跨账户存取 .sync 集成模式
在工作流中使用 .sync
服务集成模式时,Step Functions 会对调用的跨账户资源进行轮询,以确认任务是否完成。这会导致实际任务完成时间与 Step Functions 确认任务完成时间之间出现轻微延迟。目标 IAM 角色需要 .sync
调用所需的权限来完成轮询循环。为此,目标 IAM 角色必须拥有允许源账户承担的信任策略。此外,目标 IAM 角色还需要完成轮询循环所需的权限。
注意
嵌套快速工作流当前尚不支持 arn:aws:states:::states:startExecution.sync
。请改用 arn:aws:states:::aws-sdk:sfn:startSyncExecution
。
.sync 调用的信任策略更新
更新目标 IAM 角色的信任策略,如下面的示例所示。sts:ExternalId
字段进一步控制谁可担任该角色。状态机的名称必须仅包含 AWS Security Token Service AssumeRole
API 支持的字符。有关更多信息,请参阅 AWS Security Token Service API 参考中的 AssumeRole。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::
sourceAccountID
:role/InvokeRole
", }, "Condition": { "StringEquals": { "sts:ExternalId": "arn:aws:states:us-east-2:sourceAccountID
:stateMachine:stateMachineName
" } } } ] }
.sync 调用所需的权限
要授予状态机所需的权限,请更新目标 IAM 角色所需的权限。有关更多信息,请参阅 Step Functions 如何为集成服务生成 IAM 策略。示例策略中的 Amazon EventBridge 权限不是必需的。例如,要启动状态机,请添加以下权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:
region
:accountID
:stateMachine:stateMachineName
" ] }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StopExecution" ], "Resource": [ "arn:aws:states:region
:accountID
:execution:stateMachineName
:*" ] } ] }