如何使用 AWS IAM 访问其他 AWS 账户中的资源?

上次更新日期:2022 年 4 月 5 日

我想在另一个 AWS 账户中代入 Identity and Access Management(IAM)角色。如何设置使用 IAM 跨账户访问?

简短描述

您可以与另一个 AWS 账户中的 IAM 角色建立信任关系,以便访问其资源。例如,您要从源账户访问目标账户。通过向 AssumeRole API 提供您的 IAM 用户权限,您可以将源账户的 IAM 角色代入到目标账户中。您必须在目标 IAM 角色的信任关系中指定您的 IAM 用户。

注意:您还可以将源 IAM 角色代入到目标 IAM 角色中,而不是通过角色链接使用 user to role(用户到角色)。角色链接仅适用于编程访问,例如 AWS Command Line Interface(AWS CLI)或 API,且无法与 AWS 管理控制台一起使用。

解决方法

按照以下说明为源账户创建 IAM 权限策略、将策略附加到一个用户以及为目标账户创建角色。

注意:如果您在运行 AWS CLI 命令时遇到错误,请确保使用的是最新版本的 AWS CLI

源账户

1.    创建与以下内容类似的 IAM 策略

注意:将 DESTINATION-ACCOUNT-ID 和 DESTINATION-ROLENAME 替换为您自己的值。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": [
        "arn:aws:iam::DESTINATION-ACCOUNT-ID:role/DESTINATION-ROLENAME"
      ]
    }
  ]
}

2.    将 IAM 策略附加到您的 IAM 用户权限。

按照此处的步骤将创建的策略附加到您的 IAM 用户权限。

目标账户

1.    创建 IAM 角色

2.    粘贴与以下内容类似的自定义信任策略:

注意:将 SOURCE-ACCOUNT-ID 和 SOURCE-USERNAME 替换为您自己的值。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::SOURCE-ACCOUNT-ID:role/SOURCE-USERNAME"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

注意:如果您无权创建和编辑 IAM 角色和用户,则需要其他账户的所有者帮助您完成此过程。最佳做法是,仅向您信任的实体授予对您的账户和资源的访问权限。

您可以修改此策略,根据需要允许将任意数量的源实体代入到任意数量的目标角色中。例如,您可以将目标账户信任策略的 Principal(委托人)值更改为 "AWS": "SOURCE-ACCOUNT-ID".。此操作可允许源账户中具有代入角色权限的所有实体代入到目标账户角色中。有关更多信息,请参阅指定委托人创建或编辑策略

测试您的访问权限

如要测试您的访问权限,请按照切换到角色(控制台)的说明进行操作。

-或者-

按照切换到 IAM 角色(AWS CLI)的说明进行操作。

有关更多信息,请参阅IAM 教程:使用 IAM 角色委派跨 AWS 账户的访问权限