跳至内容

如何使用 IAM 访问另一个 AWS 账户中的资源?

2 分钟阅读
0

我想设置对另一个 AWS 账户中的 AWS Identity and Access Management (IAM) 角色的跨账户访问权限。

简短描述

**重要事项:**AWS 建议您使用带有临时凭证的 IAM 角色进行跨账户访问,而非使用具有长期凭证(访问密钥)的 IAM 用户。IAM 角色提供可自动轮换的临时安全凭证,从而降低与长期凭证相关的安全风险。

访问其他 AWS 账户中的资源,请与 IAM 角色建立信任关系。此方法使用 AssumeRole API 操作来获取临时安全凭证。

例如,您想从源账户访问目标账户。在源账户中配置 IAM 角色以代入目标账户中的 IAM 角色。有关使用 IAM 角色进行跨账户访问的更多信息,请参阅在您拥有的其他 AWS 账户中 IAM 用户的访问权限

**注意:**您还可以使用角色链接从源 IAM 角色代入目标 IAM 角色。角色链接仅适用于编程访问,例如 AWS 命令行界面 (AWS CLI) 或 API。角色链接不能与 AWS 管理控制台一起使用。

解决方法

**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要使用 IAM 访问其他 AWS 账户中的资源,请完成以下步骤。

源账户

完成以下步骤:

  1. 使用 JSON 编辑器创建 IAM 策略,授予代入目标角色的权限:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole"
          ],
          "Resource": [
            "arn:aws:iam::DESTINATION-ACCOUNT-ID:role/DESTINATION-ROLENAME"
          ]
        }
      ]
    }
    **注意:**将 DESTINATION-ACCOUNT-IDDESTINATION-ROLENAME 替换为您自己的值。
  2. 将 IAM 策略附加到 SourceRole。

目标账户

完成以下步骤:

  1. 在控制台上创建 IAM 角色
  2. 创建允许源账户角色代入此角色的自定义信任策略:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::SOURCE-ACCOUNT-ID:role/SOURCE-ROLENAME"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    **注意:**将 SOURCE-ACCOUNT-IDSOURCE-USERNAME 替换为您自己的值。
  3. 向该角色附加权限策略,授予对目标账户中所需特定资源的访问权限。

**注意:**如果您无权创建和编辑 IAM 角色,请向账户所有者寻求帮助以完成该流程。最佳做法是限制对您的账户和资源的访问权限,以便只有您信任的实体才能访问它们。

您可以根据需要修改此策略,允许将多个源实体代入多个目标角色。例如,您可以将目标账户信任策略的主体值更改为 "AWS": "SOURCE-ACCOUNT-ID"。这允许源账户中具有代入角色权限的所有实体代入目标账户角色。有关详细信息,请参阅如何指定主体以及创建或编辑策略

测试您的访问权限

要测试您的访问权限,请按照从用户切换到 IAM 角色(控制台)切换到 IAM 角色 (AWS CLI) 中的说明进行操作。有关详细信息,请参阅 IAM 教程: 使用 IAM 角色委托跨 AWS 账户的访问权限

相关信息

IAM 中的跨账户资源访问

如何使用 AWS CLI 代入 IAM 角色?

如何解决我在创建或更新 IAM 策略时收到的 "Has prohibited field Principal" 错误?

如何授予对 Amazon S3 存储桶中对象的跨账户访问权限?

当我尝试代入跨账户 IAM 角色时,如何解决 "AccessDenied" 或 "Invalid information" 错误?