

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

# 在 Step Functions 中为状态机创建 IAM 角色
<a name="procedure-create-iam-role"></a>

AWS Step Functions 可以执行代码和访问 AWS 资源（例如调用 AWS Lambda 函数）。为了保持安全性，您必须使用 IAM 角色为 Step Functions 授予对这些资源的访问权限。

本指南[用于了解 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)，然后选择 **Roles**、**Create role**。

1. 在**选择可信实体**页面的 **AWS 服务**下，从列表中选择 **Step Functions**，然后选择**下一步：权限**。

1. 在**已附加权限政策**页面上，选择**下一步：审核**。

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，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符字符 (`*`) 的 `aws:SourceArn` 全局上下文条件键。例如 `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. 选择**添加内联策略**。

1. 使用**可视化编辑器**或 **JSON** 选项卡为您的角色创建策略。

有关 AWS Step Functions 如何控制其他 AWS 服务的更多信息，请参阅[将服务与 Step Functions 集成](integrate-services.md)。

**注意**  
有关 Step Functions 控制台创建的 IAM 策略的示例，请参阅[Step Functions 如何为集成服务生成 IAM 策略](service-integration-iam-templates.md)。