教程:访问跨账户资源 Amazon - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程:访问跨账户资源 Amazon

借助 Step Functions 中的跨账户存取支持,您可以共享不同 Amazon Web Services 账户配置的资源。在本教程中,我们将引导您完成访问在名为生产的账户中定义的跨账户 Lambda 函数的过程。该函数从名为开发的账户中的状态机调用。在本教程中,开发账户被称为源账户,而生产账户是包含目标 IAM 角色的目标账户

首先,在 Task 状态定义中,指定状态机在调用跨账户 Lambda 函数前必须承担的目标 IAM 角色。然后,修改目标 IAM 角色中的信任策略,允许源账户临时承担目标角色。此外,要调用 Amazon 资源,请在目标 IAM 角色中定义相应的权限。最后,更新源账户的执行角色,指定担任目标角色所需的权限。

您可以配置状态机承担一个 IAM 角色,以便从多个 Amazon Web Services 账户访问资源。但是,根据 Task 状态的定义,状态机在给定时间只能承担一个 IAM 角色。

注意

目前,跨区域 Amazon SDK 集成和跨区域 Amazon 资源访问在 Step Functions 中不可用。

先决条件

  • 本教程以 Lambda 函数为例,演示如何设置跨账户存取。您可以使用任何其他 Amazon 资源,但请确保已在其他账户中配置该资源。

    重要

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

  • 在文本文件中记下跨账户资源的 Amazon 资源名称 (ARN)。本教程稍后将在状态机的 Task 状态定义中提供此 ARN。以下是 Lambda 函数 ARN 的示例:

    arn:aws:lambda:us-east-2:123456789012:function:functionName
  • 确保您已创建状态机需要承担的目标 IAM 角色。

第 1 步:更新 Task 状态定义以指定目标角色

在工作流的 Task 状态下,添加一个 Credentials 字段,其中包含状态机在调用跨账户 Lambda 函数之前必须承担的身份。

以下过程演示了如何访问名为 Echo 的跨账户 Lambda 函数。您可以按照以下步骤调用任何 Amazon 资源。

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 选择创作方法页面上,选择直观地设计工作流,并保留所有默认选择。

  3. 要打开 Workflow Studio,请选择下一步

  4. 操作选项卡上,将一个 Task 状态拖放到画布上。这将调用使用此 Task 状态的跨账户 Lambda 函数。

  5. 配置页面上,执行以下操作:

    1. 将状态重命名为 Cross-account call

    2. 对于函数名称,选择输入函数名称,然后在框中输入 Lambda 函数 ARN。例如,arn:aws:lambda:us-east-2:111122223333:function:Echo

    3. 对于提供 IAM 角色 ARN,指定目标 IAM 角色 ARN。例如,arn:aws:iam::111122223333:role/LambdaRole

      提示

      或者,您也可以在包含 IAM 角色 ARN 的状态 JSON 输入中指定现有键值对的参考路径。为此,选择从状态输入中获取运行时的 IAM 角色 ARN。有关使用引用路径指定值的示例,请参见

  6. 选择下一步

  7. 检查生成的代码页面上,选择下一步

  8. 指定状态机设置页面上,指定新状态机的详细信息,例如名称、权限和日志级别。

  9. 选择创建状态机

  10. 在文本文件中记下状态机的 IAM 角色 ARN 和状态机 ARN。您需要在目标账户的信任策略中提供这些 ARN。

现在,您的 Task 状态定义应类似于以下定义。

{ "StartAt": "Cross-account call", "States": { "Cross-account call": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole" }, "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo", }, "End": true } } }

第 2 步:更新目标角色的信任策略

IAM 角色必须存在于目标账户中,并且您必须修改其信任策略以允许源账户暂时承担此角色。此外,您可以控制谁能够担任目标 IAM 角色。

创建信任关系后,源账户中的用户可以使用 Amazon Security Token Service (Amazon STS) AssumeRoleAPI 操作。此操作提供临时安全证书,允许访问目标账户中的 Amazon 资源。

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在控制台的导航窗格上,选择角色,然后使用搜索框搜索目标 IAM 角色。例如,LambdaRole

  3. 选择信任关系选项卡。

  4. 选择编辑信任策略并粘贴以下信任策略。请务必替换 Amazon Web Services 账户 号码和 IAM 角色 ARN。sts:ExternalId 字段进一步控制谁可担任该角色。状态机的名称必须仅包含 Amazon Security Token Service AssumeRole API 支持的字符。有关更多信息,请参阅《Amazon Security Token Service API 参考》中的 AssumeRole

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ExecutionRole" // The source account's state machine execution role ARN }, "Condition": { // Control which account and state machine can assume the target IAM role "StringEquals": { "sts:ExternalId": "arn:aws:states:us-east-1:123456789012:stateMachine:testCrossAccount" //// ARN of the state machine that will assume the role. } } } ] }
  5. 保持此窗口处于打开状态,然后继续阅读下一个步骤以进行后续操作。

第 3 步:将所需权限添加到目标角色

IAM 策略中的权限确定是允许还是拒绝特定请求。目标 IAM 角色必须具有调用 Lambda 函数的正确权限。

  1. 选择 Permissions(权限)选项卡。

  2. 选择添加权限,然后选择创建内联策略

  3. 选择 JSON 选项卡,并使用以下权限替换现有内容。请务必替换您的 Lambda 函数 ARN。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:Echo" // The cross-account Amazon resource being accessed } ] }
  4. 选择查看策略

  5. 检查策略页面上,输入一个权限名称,然后选择创建策略

第 4 步:在执行角色中添加承担目标角色的权限

Step Functions 不会自动为所有跨账户服务集成生成AssumeRole政策。您必须在状态机的执行角色中添加所需的权限,使其能够在一个或多个 Amazon Web Services 账户中承担目标 IAM 角色。

  1. 访问 https://console.aws.amazon.com/iam/,在 IAM 控制台中打开状态机执行角色。要实现此目的,应按照以下步骤进行:

    1. 在源账户中打开第 1 步中创建的状态机。

    2. 状态机详细信息页面上,选择 IAM 角色 ARN

  2. 权限选项卡上,选择添加权限,然后选择创建内联策略

  3. 选择 JSON 选项卡,并使用以下权限替换现有内容。请务必替换您的 Lambda 函数 ARN。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/LambdaRole" // The target role to be assumed } ] }
  4. 选择查看策略

  5. 检查策略页面上,输入一个权限名称,然后选择创建策略