

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

# 在 Step Function AWS 账户 s 中访问其他资源中的资源
<a name="concepts-access-cross-acct-resources"></a>

Step Functions 提供对工作流程 AWS 账户 中不同配置的资源的跨账户访问权限。使用 Step Functions 服务集成，您可以调用任何跨账户 AWS 资源，即使该资源 AWS 服务 不支持基于资源的策略或跨账户调用。

例如，假设您拥有两个 AWS 账户名为 “开发和测试” 的同一个项目 AWS 区域。使用跨账户存取，“开发”账户中的工作流可以访问“测试”账户中的资源，如 Amazon S3 存储桶、Amazon DynamoDB 表和 Lambda 函数。

**重要**  
IAM 角色和基于资源的策略仅在单个分区内跨账户委派访问权限。例如，假定您在标准 `aws` 分区的美国西部（加利福尼亚北部）中有一个账户。您在 `aws-cn` 分区的中国（北京）中也有一个账户。您不能使用中国（北京）的账户中 Amazon S3 基于资源的策略，来允许标准 `aws` 账户中用户的访问权限。

有关跨账户存取的更多信息，请参阅**《IAM 用户指南》中的[跨账户策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)。

尽管每个 AWS 账户 步骤都可以完全控制自己的资源，但使用 Step Functions，您无需自定义任何代码即可重新组织、交换、添加或删除工作流程中的步骤。即使流程发生变化或应用程序不断发展，您也可以这样做。

您还可以调用嵌套状态机的执行，这样它们就可以在不同的账户中使用。这样做可以有效分离和隔离您的工作流。当您在工作流中使用 [`.sync`](connect-to-resource.md#connect-sync) 服务集成模式访问不同账户中的另一个 Step Functions 工作流时，Step Functions 会使用轮询来消耗您分配的配额。有关更多信息，请参阅 [运行作业 (.sync)](connect-to-resource.md#connect-sync)。

**注意**  
跨区域 AWS SDK 集成和跨区域 AWS 资源访问在 Step Functions 中不可用。

## 关键的跨账户资源概念
<a name="key-terms-cross-acct-access"></a>

**[执行角色](procedure-create-iam-role.md)**  
Step Functions 用来运行代码和访问 AWS 资源的 IAM 角色，例如 AWS Lambda 函数的 “调用” 操作。

**[服务集成](integrate-services.md)**  
可以在工作流程的某个`Task`状态内调用的 AWS SDK 集成 API 操作。

**源账户**  
 AWS 账户 拥有状态机并已开始执行的。

**目标账户**  
您可以 AWS 账户 向其拨打跨账户的电话。

**目标角色**  
目标账户中的 IAM 角色，状态机在调用目标账户所拥有的资源时会假定该角色。

**[运行作业 (.sync)](connect-to-resource.md#connect-sync)**  
一种用于调用服务的服务集成模式，例如 AWS Batch。它还能使 Step Functions 状态机在进入下一状态前等待作业完成。要指示 Step Functions 应该等待，请在 `Task` 状态定义的 `Resource` 字段中附加 `.sync` 后缀。

## 调用跨账户资源
<a name="invoke-cross-acct-resource"></a>

要在工作流中调用跨账户资源，请执行以下操作：

1. 在包含资源的目标账户中创建 IAM 角色。此角色向包含状态机的源账户授予访问目标账户资源的权限。

1. 在 `Task` 状态的定义中，指定在调用跨账户资源之前由状态机担任的目标 IAM 角色。

1. 修改目标 IAM 角色中的信任策略来允许源账户临时担任此角色。信任策略必须包含源账户中定义的状态机的 Amazon 资源名称（ARN）。此外，还要在目标 IAM 角色中定义调用 AWS 资源的相应权限。

1. 更新源账户的执行角色，使其包含担任目标 IAM 角色所需的权限。

有关示例，请参阅教程中的[在 Step Functi AWS ons 中访问跨账户资源](tutorial-access-cross-acct-resources.md)。

**注意**  
您可以配置状态机承担一个 IAM 角色，以便从多个 AWS 账户访问资源。但是，状态机在给定时间只能承担一个 IAM 角色。

![访问跨账户资源的概念](http://docs.aws.amazon.com/zh_cn/step-functions/latest/dg/images/cross-account-support-concept.png)


## 跨账户存取 .sync 集成模式
<a name="concepts-cross-acct-sync-pattern"></a>

在工作流中使用 `.sync` 服务集成模式时，Step Functions 会对调用的跨账户资源进行轮询，以确认任务是否完成。这会导致实际任务完成时间与 Step Functions 确认任务完成时间之间出现轻微延迟。目标 IAM 角色需要 `.sync` 调用所需的权限来完成轮询循环。为此，目标 IAM 角色必须拥有允许源账户承担的信任策略。此外，目标 IAM 角色还需要完成轮询循环所需的权限。

**注意**  
嵌套快速工作流当前尚不支持 `arn:aws:states:::states:startExecution.sync`。请改用 `arn:aws:states:::aws-sdk:sfn:startSyncExecution`。

### .sync 调用的信任策略更新
<a name="cross-acct-sync-pattern-policy-update"></a>

更新目标 IAM 角色的信任策略，如下面的示例所示。`sts:ExternalId` 字段进一步控制谁可担任该角色。状态机的名称必须仅包含 AWS Security Token Service `AssumeRole` API 支持的字符。有关更多信息，请参阅《AWS Security Token Service API Reference》**中的 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)。

```
{
  "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 调用所需的权限
<a name="cross-acct-sync-pattern-perms-update"></a>

要授予状态机所需的权限，请更新目标 IAM 角色所需的权限。有关更多信息，请参阅 [Step Functions 如何为集成服务生成 IAM 策略](service-integration-iam-templates.md)。例如，要启动状态机，请添加以下权限。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "states:StartExecution"
      ],
      "Resource": [
        "arn:aws:states:{{us-east-1}}:{{123456789012}}:stateMachine:{{myStateMachineName}}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "states:DescribeExecution",
        "states:StopExecution"
      ],
      "Resource": [
        "arn:aws:states:{{us-east-1}}:{{123456789012}}:execution:{{myStateMachineName}}:*"
      ]
    }
  ]
}
```