为什么我在尝试接受跨账户 IAM 角色时收到 "AccessDenied" 或 "Invalid information" 的错误讯息?

1 分钟阅读
0

我尝试代入跨账户 AWS Identity and Access Management (IAM) 角色。但我收到了与以下内容类似的错误消息: “在调用 AssumeRole 操作时发生错误(AccessDenied):” -或者- “一个或多个字段中的信息无效。请检查您的信息或联系管理员。”

简短描述

要在另一个 AWS 账户中代入 IAM 角色,请先编辑一个账户(代入 IAM 角色的账户)中的权限。然后,编辑另一个账户(允许代入 IAM 角色的账户)中的信任策略。

例如,假设您有两个账户,分别名为 Account_Bob 和 Account_Alice。您在 Account_Bob 中还有一个名为 Bob 的 IAM 用户或角色,在 Account_Alice 中还有一个名为 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"
    }
  ]
}

解决方法

为避免在代入跨账户 IAM 角色时出现错误,请记住以下几点:

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

  • 代入角色 Bob 必须拥有 AssumeRole 的权限。
  • 您必须以 Bob 的身份登录 AWS 账户。有关更多信息,请参阅您的 AWS 账户 ID 及其别名
  • 所扮演的角色 Alice 必须存在。确保未将其删除,并且 ARN 配置正确
  • 如果您使用角色串联,请确保您并未使用上一个会话中的 IAM 凭证。有关更多信息,请参阅角色术语和概念中的角色串联部分。
  • 如果 Account_Bob 是 AWS Organizations 的一部分,可能是因为服务控制策略(SCP)限制对 Account_Bob 或 Account_Alice 的代入角色访问权限。有关更多信息,请参阅服务控制策略 (SCP)

相关信息

如何获取数据以帮助排查 IAM 权限访问遭到拒绝或未经授权的问题?

切换到角色(控制台)

切换到 IAM 角色 (AWS CLI)

相关视频

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