当我试图使用 AWS 管理控制台编辑我的 AWS Identity and Access Management(IAM)角色的信任策略时,收到错误“Failed to update trust policy. Failed to update trust policy.”。
简短描述
此错误消息表明您的 IAM 信任策略中 Principal 元素的值无效。要解决此错误,请确认以下事项:
- 您的 IAM 角色信任策略为 Principal 元素使用具有正确格式的支持值。
- 如果 IAM 角色信任策略使用 IAM 身份(用户、用户组和角色)作为主体,请确认未删除该用户或角色。
**注意:**如果标准 AWS 账户尝试添加 AWS GovCloud(美国)账号,则 AWS GovCloud(美国)账户也可能会收到此错误。您不能创建角色来在 AWS GovCloud(美国)账户和标准 AWS 账户之间委派访问权限。有关详细信息,请参阅 How IAM Differs for AWS GovCloud (US)。
解决方法
验证 Principal 元素的支持值
您角色的 IAM 信任策略中的 Principal 元素必须包含以下支持值。
1. 确保 IAM 策略包含正确的 AWS 12 位 AWS 账户 ID,如下所示:
"Principal": {
"AWS": "123456789012"
}
**注意:**也可以使用根用户 Amazon 资源名称(ARN)指定 AWS 账户。例如,arn:aws:iam::123456789012:root。
2. 如果 IAM 信任策略主体是 IAM 用户、角色或联合用户,则必须按如下方式指定整个 ARN:
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:user/user-name",
"arn:aws:iam::123456789012:role/role-name",
"arn:aws:sts::123456789012:assumed-role/role-name/role-session-name",
"arn:aws:sts::123456789012:federated-user/user-name"
]
}
3. 如果 IAM 信任策略包括通配符,请遵循以下准则。
注意:不能使用通配符“*”来匹配主体名称或 ARN 的一部分。
以下示例在 IAM 信任策略中错误地使用通配符:
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/user-*"
}
要使用通配符匹配部分主体名称,请使用 Condition 元素和全局条件键 aws:PrincipalArn。然后,使用通配符指定 ARN。
若要指定所有 AWS 账户的身份,请使用类似于下面内容的通配符:
"Principal": {
"AWS": "*"
}
**重要事项:**可以在 Principal 元素中使用通配符,并在信任策略中使用“允许”效果。但是,这让同一分区中任何 AWS 账户中的任何 IAM 用户、代入的角色会话或联合用户能够访问您的角色。您的 AWS 账户中的 IAM 用户和角色主体不需要任何其他权限。其他 AWS 账户中的主体必须具有基于身份的权限才能代入您的 IAM 角色。
此方法不允许 Web 身份会话主体、SAML 会话主体或服务主体访问您的资源。
最佳做法是,仅将此方法与 Condition 元素和条件键(如 aws:PrincipalArn)一起用于限制权限。例如,您的文件可能与以下内容类似:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*"
}
}
}
]
}
此示例信任策略使用 aws:PrincipalArn 条件键来仅允许与用户名匹配的用户代入 IAM 角色。
4. 如果 IAM 角色是 AWS 服务角色,则必须按照如下方式指定整个服务主体:
"Principal": {
"Service": "ec2.amazonaws.com"
}
5. 可以将 SAML 会话主体与外部 SAML 身份提供者一起用来对 IAM 用户进行身份验证。IAM 角色的信任策略必须具有类似于以下内容的 Principal 元素:
"Principal": {
"Federated": "arn:aws:iam::123456789012:saml-provider/provider-name"
}
6. 可以使用 Web 身份会话主体对 IAM 用户进行身份验证。提供访问权限的 IAM 角色的信任策略必须具有类似于以下内容的 Principal 元素:
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
}
7. 如果在单个语句中使用不同的主体类型,则 IAM 信任策略的格式类似于以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/user-name",
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
IAM 用户或角色必须是现有身份
如果 IAM 角色信任策略使用 IAM 用户或角色作为主体,请确认未删除这些 IAM 身份。如果修改了 IAM 信任策略并且删除了主体,则会出现“Invalid principal in policy”错误。
**注意:**如果主体被删除,请在 IAM 信任策略中记下主体的唯一 ID,而不是 ARN。
相关信息
如何使用 IAM 允许用户访问资源?
如何使用 AWS IAM 访问其他 AWS 账户中的资源?
为什么我的 IAM 基于资源的策略中存在未知的主体格式?