

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Step Functions 中存取其他 AWS 帳戶 中的資源
<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，您可以重新組織、交換、新增或移除工作流程中的步驟，而不需要自訂任何程式碼。即使程序變更或應用程式演進，您也可以這樣做。

您也可以叫用巢狀狀態機器的執行，以便在不同的帳戶中使用。這樣做可以有效地分隔和隔離您的工作流程。當您在存取不同帳戶中另一個 Step Functions 工作流程的工作流程中使用[`.sync`](connect-to-resource.md#connect-sync)服務整合模式時，Step Functions 會使用消耗您指派配額的輪詢。如需詳細資訊，請參閱[執行任務 (.sync)](connect-to-resource.md#connect-sync)。

**注意**  
Step Functions 不提供跨區域 AWS SDK 整合和跨區域 AWS 資源存取。

## 重要跨帳戶資源概念
<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 `.sync` 應該等待，請在`Task`狀態定義的 `Resource` 欄位中附加尾碼。

## 叫用跨帳戶資源
<a name="invoke-cross-acct-resource"></a>

若要在工作流程中叫用跨帳戶資源，請執行下列動作：

1. 在包含 資源的目標帳戶中建立 IAM 角色。此角色會授予來源帳戶存取目標帳戶資源的許可，其中包含狀態機器。

1. 在`Task`狀態的定義中，指定要由狀態機器擔任的目標 IAM 角色，然後再叫用跨帳戶資源。

1. 修改目標 IAM 角色中的信任政策，以允許來源帳戶暫時擔任此角色。信任政策必須包含來源帳戶中定義之狀態機器的 Amazon Resource Name (ARN)。此外，在目標 IAM 角色中定義適當的許可來呼叫 AWS 資源。

1. 更新來源帳戶的執行角色，以包含擔任目標 IAM 角色所需的許可。

如需範例，請參閱教學[在 Step Functions 中存取跨帳戶 AWS 資源](tutorial-access-cross-acct-resources.md)課程中的 。

**注意**  
您可以將狀態機器設定為擔任 IAM 角色，以從多個 存取資源 AWS 帳戶。不過，狀態機器在特定時間只能擔任一個 IAM 角色。

![\[存取跨帳戶資源的概念\]](http://docs.aws.amazon.com/zh_tw/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` 欄位進一步控制誰可以擔任該角色。狀態機器的名稱只能包含 API AWS Security Token Service `AssumeRole`支援的字元。如需詳細資訊，請參閱《AWS Security Token Service API 參考》**中的 [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:*"
      ]
    }
  ]
}
```