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

2 分钟阅读
0

我尝试代入跨账户 AWS Identity and Access Management(IAM)角色。但是,我收到了类似以下内容的错误: "An error occurred (AccessDenied) when calling the AssumeRole operation:" or "Invalid information in one or more fields.Check your information or contact your administrator."

解决方案

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

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

在以下示例中,您有两个账户,一个名为 Account_Bob,另一个名为 Account _AliceAccount_Bob 中还有一个名为 Bob 的 IAM 用户或角色,Account_Alice 中还有一个名为 Alice 的 IAM 角色。在这个情景中,Bob 将代入名为 Alice 的 IAM 角色。

在多个 AWS 账户中或跨账户使用 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 CLI 命令示例:

aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name assume-cross-account

有关更多信息,请参阅如何使用 AWS CLI 代入 IAM 角色?

为避免在代入跨账户 IAM 角色时出错,请确保在使用案例中遵循以下最佳实践:

  • 代入角色 Bob 必须具有执行 API 操作 AssumeRole 的权限。
  • 您必须以 Bob 的身份登录 AWS 账户。有关更多信息,请参阅为您的 AWS 账户 ID 使用别名
  • 所代入的角色 Alice 必须存在。确保它未被删除且 Amazon 资源名称(ARN)配置正确
  • 如果您使用角色链接,请确保不使用前一会话中的 IAM 凭证。有关详细信息,请参阅角色术语和概念角色链接部分。
  • 如果 Account_Bob 属于某个 AWS Organizations,则可能存在服务控制策略(SCP)限制 Account_BobAccount_Alice 使用 AssumeRole。确保编辑或删除限制 Account_BobAccount_Alice 使用 AssumeRole 的 SCP。有关更多信息,请参阅 Service control policies(SCPs)

相关信息

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

从用户切换到 IAM 角色(控制台)

切换到 IAM 角色(AWS CLI)