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

2 分钟阅读
0

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

简短描述

此错误可能是由于以下原因造成的:

  • AssumeRole 操作权限不正确
  • IAM 信任策略不正确
  • 来自策略的显式拒绝
  • 账户 ID 或角色名称不正确
  • 需要外部 ID 才能切换角色
  • 信任策略条件不正确

解决方法

按照以下说明验证 IAM 策略配置,以根据您的场景切换 IAM 角色。

AssumeRole 操作权限缺失或不正确

要切换到 IAM 角色,IAM 实体必须具有 AssumeRole 操作权限。IAM 实体必须有一个策略具有类似于以下内容的 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"  
}

确保资源与您要切换到的 IAM 角色的 Amazon 资源名称(ARN)相匹配。有关详细信息,请参阅授予用户切换角色的权限

IAM 角色信任策略不信任 IAM 用户的账户 ID

IAM 角色信任策略定义了可以代入角色的主体验证信任策略是否将 IAM 用户的账户 ID 列为可信主体实体。例如,账户 ID 为 111222333444、名为 Bob 的 IAM 用户想要切换到账户 ID 为 444555666777、名为 Alice 的 IAM 角色。账户 ID 111222333444 是可信账户,账户 ID 444555666777 是信任账户。IAM 角色 Alice 有信任 Bob 的信任策略,类似于以下内容:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "<111222333444>"
      },
      "Condition": {}
    }
  ]
}

**注意:**最佳做法是遵循最低权限原则,仅为用户所需的角色指定完整的 ARN。

有关详细信息,请参阅修改角色信任策略(控制台)

来自服务控制策略(SCP)或 IAM 策略的显式拒绝

如果您的 AWS 账户是某个 AWS Organizations 的一部分,那么您的管理账户可能有 SCP。确保 SCP 对 AssumeRole 操作没有显式拒绝。检查是否有基于 AWS 区域拒绝 API 操作的 SCP。AWS Security Token Service(AWS STS)是一项全球服务,必须包含在全球服务排除列表中。确保没有任何来自 IAM 策略的显式拒绝,因为“拒绝”语句的优先级高于“允许”语句。

有关详细信息,请参阅根据请求的 AWS 区域拒绝访问 AWS

验证 AWS 账户 ID 和 IAM 角色名称

在切换角色页面上验证账户 ID 和 IAM 角色名称是否正确。账户 ID 是一个 12 位数的标识符,IAM 角色名称是您要代入的角色的名称。

有关详细信息,请参阅在控制台中切换角色的注意事项

需要外部 ID 来切换到 IAM 角色

管理员可以使用外部 ID 向第三方授予对 AWS 资源的访问权限。您无法在 AWS 管理控制台中将 IAM 角色切换为需要 ExternalId 条件键值的角色。您只能调用支持 ExternalId 键的 AssumeRole 操作,来切换到 IAM 角色。

有关详细信息,请参阅向第三方授予对您的 AWS 资源的访问权限时如何使用外部 ID

IAM 角色信任策略的有效条件

验证您是否满足 IAM 角色的信任策略中指定的所有条件。条件可以指定到期日期、外部 ID,或者请求只能来自特定 IP 地址。在以下示例策略中,如果当前日期是指定日期之后的任何时间,则条件为 false。该策略无法授予代入 IAM 角色的权限。

"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 角色的链接?

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

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

AWS 官方
AWS 官方已更新 1 年前