

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

# 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 的事件。EventBridge 會使用受管規則將事件路由至 Step 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`、`Terminate`、 `Stop`或 `Delete` API 動作的許可，例如 `batch:TerminateJob`或 `eks:DeleteCluster`。如果您的角色缺少這些許可，Step Functions 將無法取消您的任務，而且您可能會在繼續執行時產生額外費用。如需停止任務的詳細資訊，請參閱[執行任務](connect-to-resource.md#connect-sync)。

**進一步了解整合模式**  
 若要了解同步任務，請參閱 [探索 Step Functions 中的服務整合模式](connect-to-resource.md)。