我尝试代入跨账户 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 _Alice。Account_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_Bob 或 Account_Alice 使用 AssumeRole。确保编辑或删除限制 Account_Bob 和 Account_Alice 使用 AssumeRole 的 SCP。有关更多信息,请参阅 Service control policies(SCPs)。
相关信息
如何获取数据以帮助排查 IAM 权限访问遭到拒绝或未经授权的问题?
从用户切换到 IAM 角色(控制台)
切换到 IAM 角色(AWS CLI)