如何解決 IAM 信任政策錯誤 "Failed to update trust policy.Invalid principal in policy" (無法更新信任政策。政策中的主體無效。)?
上次更新日期︰2022 年 4 月 4 日
當我嘗試使用 AWS 管理主控台,編輯 AWS Identity and Access Management (IAM) 角色信任政策時,收到如下錯誤:
"Failed to update trust policy.Invalid principal in policy." (無法更新信任政策。政策中的主體無效。)
簡短描述
此錯誤訊息指出 IAM 信任政策中的 Principal 元素的值無效。若要解決此問題,請確認下列動作:
- 您的 IAM 角色信任政策針對 Principal 元素使用支援的值搭配正確的格式。
- 如果 IAM 角色信任政策使用 IAM 身分 (使用者、使用者群組和角色) 作為主體,請確認未刪除使用者或角色。
解決方案
驗證 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。