我使用 AWS 管理控制台尝试切换 AWS Identity and Access Management (IAM) 角色。但是,我收到了以下错误: “一个或多个字段中的信息无效。请检查您的信息或联系您的管理员”。
简短描述
由于策略配置不正确,您会收到“一个或多个字段中的信息无效”错误消息。当您的请求不符合信任策略的条件时,您也可能会收到错误消息。
解决方法
为您的 IAM 用户或角色配置 AssumeRole 权限
要向用户授予切换角色的权限,请在您的 IAM 身份策略中添加 AWS Security Token Service (AWS STS) AssumeRole 操作。
策略示例:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume"
}
}
**注意:**将 arn:aws:iam::account_id_number:role/role-name-you-want-to assume 替换为 IAM 角色的 Amazon 资源名称 (ARN)。
检查 IAM 角色的信任策略是否包含主体
更新信任策略以包括主体。主体可以是 IAM 用户或角色,也可以是 AWS 账户。
**注意:**如果您将一个账户添加为可信主体,则该账户中的所有身份都可以代入该角色。但是,这些身份必须具有 AssumeRole 权限。
例如,账户 ID 111222333444 中的 IAM 用户 Carlos 想要在账户 ID 444555666777 中代入 Maria 角色。
账户 ID 111222333444 是可信账户,账户 ID 444555666777 是信任账户。Maria 的 IAM 角色具有信任 Carlos 的信任策略。
Maria 的 IAM 角色的信任策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "arn:aws:iam::111222333444:user/Carlos"
},
"Condition": {}
}
]
}
Carlos 还必须有一个 IAM 策略,才能在另一个账户中代入 Maria 的 IAM 角色。
Carlos 代入 Maria 的 IAM 角色的 IAM 策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::444555666777:role/Maria"
}
]
}
要允许账户中的所有 IAM 身份代入该角色,请使用账户根主体。
在 Maria 的 IAM 角色的信任策略中,将 user/Carlos 替换为 root:
"AWS": "arn:aws:iam::111222333444:root"
在 Maria 的 IAM 角色的信任策略中,您还可以使用通配符 (*),以便用户可以代入任何账户中的任何角色:
"Resource": "arn:aws:iam::444555666777:role/\\\*"
上述更改允许账户 111222333444 中的任何 IAM 用户或角色代入账户 ID 444555666777 中的 Maria 的 IAM 角色。为了最大限度地减少可以代入该角色的身份数量,最佳做法是仅指定需要访问权限的 IAM 用户或角色的 ARN。
有关详细信息,请参阅 Update a role trust policy。
来自 SCP 或 IAM 策略的显式拒绝
如果您的账户是 AWS Organizations 的一部分,则管理账户可能会应用限制角色切换的服务控制策略 (SCP)。有关详细信息,请参阅 Best practices for the management account。
检查 SCP 或 IAM 策略中是否对 AssumeRole 操作存在显式 Deny(拒绝)。如果存在显式 Deny(拒绝),拒绝将覆盖所有 Allow(允许)权限,从而阻止角色代入。在前面的示例中,如果存在显式 Deny(拒绝),Carlos 就无法代入 Maria 的 IAM 角色。
此外,请检查 SCP 是否根据 AWS 区域限制访问权限。AWS STS 是一项全球服务,因此您必须将其列在全球服务排除列表中。
有关详细信息,请参阅 Deny access to AWS based on the requested AWS Region。
角色需要 sts:ExternalId 才能切换到 IAM 角色
如果 IAM 角色需要 sts:ExternalId 密钥,则您可以使用 AWS 管理控制台切换角色。编辑策略以使用带有 sts:ExternalId 参数的 AssumeRole 操作。
sts:ExternalId 密钥允许第三方访问 AWS 资源。
有关详细信息,请参阅 Access to AWS accounts owned by third parties。
检查 IAM 角色信任策略中的条件
查看您在信任策略中配置的条件,例如到期日期或 ExternalId 要求。您的请求必须符合 IAM 角色策略的条件。
例如,如果当前日期晚于指定日期,则条件为 false,并且策略无法授予代入该角色的权限。
以下策略拒绝在 2016 年 5 月 1 日之后代入该角色的权限:
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::account_id_number:role/role-name-you-want-to-assume",
"Condition": {
"DateLessThan": {
"aws:CurrentTime": "2016-05-01T12:00:00Z"
}
}
}
确保您的请求满足信任策略中的所有条件。
相关信息
如何为 IAM 用户提供代入 IAM 角色的链接?
如何使用 IAM 访问另一个 AWS 账户中的资源?
AWS Organizations 服务控制策略与 IAM 策略之间有何区别?