

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

# 在 Step Functions 中為您的狀態機器建立 IAM 角色
<a name="procedure-create-iam-role"></a>

AWS Step Functions 可執行程式碼和存取 AWS 資源 （例如叫用 AWS Lambda 函數）。為了維護安全性，您必須使用 IAM 角色將這些資源的存取授予 Step Functions。

本指南[學習步驟函數的教學課程](learning-resources.md#tutorials)中的 可讓您利用自動產生的 IAM 角色，這些角色適用於您建立狀態機器 AWS 的區域。不過，您可以為狀態機器建立自己的 IAM 角色。

為狀態機器建立要使用的 IAM 政策時，政策應包含您希望狀態機器取得的許可。您可以使用現有的 AWS 受管政策做為範例，也可以從頭開始建立符合您特定需求的自訂政策。如需詳細資訊，請參閱《[IAM 使用者指南》中的建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) **

若要為狀態機器建立自己的 IAM 角色，請遵循本節中的步驟。

在此範例中，您會建立具有叫用 Lambda 函數許可的 IAM 角色。

## 為 Step Functions 建立角色
<a name="create-role-for-step-functions"></a>

1. 登入 [IAM 主控台](https://console.aws.amazon.com/iam/home)，然後選擇**角色**、**建立角色**。

1. 在**選取信任實體**頁面**AWS 的服務**下，從清單中選取**步驟函數**，然後選擇**下一步：許可**。

1. 在 **Attached permissions policy (連結許可政策)** 頁面上，選擇 **Next: Review (下一步：檢閱)**。

1. 在**檢閱**頁面上，`StepFunctionsLambdaRole`針對**角色名稱**輸入 ，然後選擇**建立角色**。

   IAM 角色會出現在角色清單中。

如需 IAM 許可和政策的詳細資訊，請參閱《*IAM 使用者指南*》中的[存取管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。

## 防止跨服務混淆代理人問題
<a name="prevent-cross-service-confused-deputy"></a>

混淆代理人問題屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。這種類型的冒充可能發生跨帳戶和跨服務。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。

為了防止混淆代理人， AWS 提供工具，協助您保護所有 服務的資料，其服務主體已獲得您帳戶中資源的存取權。本節著重於預防跨服務混淆代理人 AWS Step Functions；不過，您可以在 *IAM 使用者指南*的[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)區段中進一步了解此主題。

我們建議在資源政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件內容金鑰，以限制Step Functions提供其他服務存取 資源的許可。如果您想要僅允許一個資源與跨服務存取相關聯，則請使用 `aws:SourceArn`。如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

防範混淆代理人問題的最有效方法是使用 `aws:SourceArn` 全域條件內容索引鍵，以及資源的完整 ARN。如果您不知道資源的完整 ARN，或者如果您要指定多個資源，請將`aws:SourceArn`全域內容條件金鑰與萬用字元 (`*`) 用於 ARN 的未知部分。例如 `arn:aws:states:*:111122223333:*`。

以下是*信任政策*的範例，示範如何使用 `aws:SourceArn`和 `aws:SourceAccount`搭配 Step Functions，以防止混淆代理人問題。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
     {
        "Effect":"Allow",
        "Principal":{
           "Service":[
              "states.amazonaws.com"
           ]
        },
        "Action":"sts:AssumeRole",
        "Condition":{
           "ArnLike":{
              "aws:SourceArn":"arn:aws:states:us-east-1:111122223333:stateMachine:*"
           },
           "StringEquals":{
              "aws:SourceAccount":"111122223333"
           }
        }
     }
  ]
}
```

## 連接內嵌政策
<a name="attach-inline-policy"></a>

Step Functions 可以直接在 `Task` 狀態控制其他 服務。連接內嵌政策，以允許 Step Functions 存取您需要控制之服務的 API 動作。

1. 開啟 [IAM 主控台](https://console.aws.amazon.com/iam/home)，選擇**角色**，搜尋您的 Step Functions 角色，然後選取該角色。

1. 選取 **Add inline policy (新增內嵌政策)**。

1. 使用 **Visual editor (視覺編輯工具)** 或 **JSON** 標籤來建立角色的政策。

如需如何 AWS Step Functions 控制其他 AWS 服務的詳細資訊，請參閱 [將 服務與 Step Functions 整合](integrate-services.md)。

**注意**  
如需 Step Functions 主控台建立的 IAM 政策範例，請參閱 [Step Functions 如何為整合服務產生 IAM 政策](service-integration-iam-templates.md)。