为什么我在尝试代入 IAM 角色时会收到“访问被拒绝”或“信息无效”错误?

上次更新时间:2020 年 6 月 16 日

我尝试代入 AWS Identity and Access Management (IAM) 角色。但我收到了与以下内容类似的错误消息:

“在调用 AssumeRole 操作时发生错误(访问被拒绝):”

-或者-

“一个或多个字段中的信息无效。请检查您的信息或联系管理员。”  

简短描述

要在另一个 AWS 账户中代入 IAM 角色,请先编辑一个账户(代入 IAM 角色的账户)中的权限。然后,编辑另一个账户(允许代入 IAM 角色的账户)中的信任策略。例如,假设您有两个账户,分别名为 Account_Bob 和 Account_Alice。您还有两个分别名为 Bob 和 Alice 的 IAM 用户或角色。在此情景中,Bob 将代入名为 Alice 的 IAM 角色。

要对多个账户或跨账户使用 AssumeRole API 调用,您必须具有信任策略来授权代入角色的权限,如下所示:

以下是 Bob 所需的权限示例:  

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

以下是 Alice 的信任策略示例:

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

解决方法

最佳实践是确保:

  • Bob 拥有代入角色的权限。
  • 您以 Bob 的身份登录 AWS 账户。有关更多信息,请参阅您的 AWS 账户 ID 及其别名
  • 如果 Account_Bob 是 AWS Organizations 的一部分,可能是因为服务控制策略 (SCP) 限制对 Account_Bob 或 Account_Alice 的代入角色访问权限。有关更多信息,请参阅服务控制策略 (SCP)
  • 如果您使用角色串联,可以使用上一个会话中的 IAM 凭证。有关更多信息,请参阅角色术语和概念中的角色串联部分。