跳至内容

如何解决使用 AWS 管理控制台切换 IAM 角色时出现的问题?

2 分钟阅读
0

我使用 AWS 管理控制台尝试切换 AWS Identity and Access Management (IAM) 角色。但是,我收到了以下错误: “一个或多个字段中的信息无效。请检查您的信息或联系您的管理员”。

简短描述

由于策略配置不正确,您会收到“一个或多个字段中的信息无效”错误消息。当您的请求不符合信任策略的条件时,您也可能会收到错误消息。

解决方法

为您的 IAM 用户或角色配置 AssumeRole 权限

向用户授予切换角色的权限,请在您的 IAM 身份策略中添加 AWS Security Token Service (AWS STS) AssumeRole 操作。

策略示例:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume"  
   }
}

**注意:**将 arn:aws:iam::account_id_number:role/role-name-you-want-to assume 替换为 IAM 角色的 Amazon 资源名称 (ARN)

检查 IAM 角色的信任策略是否包含主体

更新信任策略以包括主体。主体可以是 IAM 用户或角色,也可以是 AWS 账户。

**注意:**如果您将一个账户添加为可信主体,则该账户中的所有身份都可以代入该角色。但是,这些身份必须具有 AssumeRole 权限。

例如,账户 ID 111222333444 中的 IAM 用户 Carlos 想要在账户 ID 444555666777 中代入 Maria 角色。

账户 ID 111222333444 是可信账户,账户 ID 444555666777 是信任账户。Maria 的 IAM 角色具有信任 Carlos 的信任策略。

Maria 的 IAM 角色的信任策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "arn:aws:iam::111222333444:user/Carlos"
      },
      "Condition": {}
    }
  ]
}

Carlos 还必须有一个 IAM 策略,才能在另一个账户中代入 Maria 的 IAM 角色。

Carlos 代入 Maria 的 IAM 角色的 IAM 策略示例:

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

要允许账户中的所有 IAM 身份代入该角色,请使用账户根主体。

在 Maria 的 IAM 角色的信任策略中,将 user/Carlos 替换为 root

"AWS": "arn:aws:iam::111222333444:root"

在 Maria 的 IAM 角色的信任策略中,您还可以使用通配符 (*),以便用户可以代入任何账户中的任何角色:

"Resource": "arn:aws:iam::444555666777:role/\\\*"

上述更改允许账户 111222333444 中的任何 IAM 用户或角色代入账户 ID 444555666777 中的 Maria 的 IAM 角色。为了最大限度地减少可以代入该角色的身份数量,最佳做法是仅指定需要访问权限的 IAM 用户或角色的 ARN。

有关详细信息,请参阅 Update a role trust policy

来自 SCP 或 IAM 策略的显式拒绝

如果您的账户是 AWS Organizations 的一部分,则管理账户可能会应用限制角色切换的服务控制策略 (SCP)。有关详细信息,请参阅 Best practices for the management account

检查 SCP 或 IAM 策略中是否对 AssumeRole 操作存在显式 Deny(拒绝)。如果存在显式 Deny(拒绝),拒绝将覆盖所有 Allow(允许)权限,从而阻止角色代入。在前面的示例中,如果存在显式 Deny(拒绝),Carlos 就无法代入 Maria 的 IAM 角色。

此外,请检查 SCP 是否根据 AWS 区域限制访问权限。AWS STS 是一项全球服务,因此您必须将其列在全球服务排除列表中。

有关详细信息,请参阅 Deny access to AWS based on the requested AWS Region

角色需要 sts:ExternalId 才能切换到 IAM 角色

如果 IAM 角色需要 sts:ExternalId 密钥,则您可以使用 AWS 管理控制台切换角色。编辑策略以使用带有 sts:ExternalId 参数的 AssumeRole 操作。

sts:ExternalId 密钥允许第三方访问 AWS 资源。

有关详细信息,请参阅 Access to AWS accounts owned by third parties

检查 IAM 角色信任策略中的条件

查看您在信任策略中配置的条件,例如到期日期或 ExternalId 要求。您的请求必须符合 IAM 角色策略的条件。

例如,如果当前日期晚于指定日期,则条件为 false,并且策略无法授予代入该角色的权限。

以下策略拒绝在 2016 年 5 月 1 日之后代入该角色的权限:

{
  "Effect": "Allow",
  "Action": "sts:AssumeRole",
  "Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume",
  "Condition": {
    "DateLessThan": {
      "aws:CurrentTime": "2016-05-01T12:00:00Z"
    }
  }
}

确保您的请求满足信任策略中的所有条件。

相关信息

如何为 IAM 用户提供代入 IAM 角色的链接?

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

AWS Organizations 服务控制策略与 IAM 策略之间有何区别?

AWS 官方已更新 6 个月前