为什么我在尝试代入 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"
}
]
}
解决方法
最佳实践是确保:
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
- Bob 拥有代入角色的权限。
- 您以 Bob 的身份登录 AWS 账户。有关更多信息,请参阅您的 AWS 账户 ID 及其别名。
- 如果 Account_Bob 是 AWS Organizations 的一部分,可能是因为服务控制策略 (SCP) 限制对 Account_Bob 或 Account_Alice 的代入角色访问权限。有关更多信息,请参阅服务控制策略 (SCP)。
- 如果您使用角色串联,可以使用上一个会话中的 IAM 凭证。有关更多信息,请参阅角色术语和概念中的角色串联部分。