Wie kann ich den IAM-Vertrauensrichtlinienfehler „Failed to update trust policy. Invalid principal in policy“ (Vertrauensrichtlinie konnte nicht aktualisiert werden. Ungültiger Prinzipal in Richtlinie) beheben?
Letzte Aktualisierung: 04.04.2022
Beim Versuch, meine Rollenvertrauensrichtlinie aus dem AWS Identity and Access Management (IAM) mithilfe der AWS-Managementkonsole zu bearbeiten, wurde ein Fehler ähnlich dem folgenden angezeigt:
„Failed to update trust policy. Invalid prinical in policy.“
Kurzbeschreibung
Diese Fehlermeldung weist darauf hin, dass der Wert eines Prinzipal-Elements in Ihrer IAM-Vertrauensrichtlinie nicht gültig ist. Stellen Sie zur Behebung dieses Problems Folgendes sicher:
- Ihre IAM-Rollenvertrauensrichtlinie verwendet unterstützte Werte mit korrekter Formatierung für das Prinzipal-Element.
- Wenn die IAM-Rollenvertrauensrichtlinie IAM-Identitäten (Benutzer, Benutzergruppen und Rollen) als Prinzipale verwendet, vergewissern Sie sich, dass der Benutzer oder die Rolle nicht gelöscht wurde.
Lösung
Überprüfen der unterstützten Werte für das Prinzipal-Element
Das Prinzipal-Element in der IAM-Vertrauensrichtlinie Ihrer Rolle muss die folgenden unterstützten Werte enthalten.
1. Stellen Sie sicher, dass die IAM-Richtlinie die richtige 12-stellige AWS-Konto-ID von AWS in folgender Form enthält:
"Principal": {
"AWS": "123456789012"
}
Hinweis: Das AWS-Konto kann auch mit dem Amazon-Ressourcenname (ARN) des Root-Benutzers angegeben werden. Zum Beispiel arn:aws:iam::123456789012:root.
2. Wenn die Prinzipale der IAM-Vertrauensrichtlinien IAM-Benutzer, Rollen oder Verbundbenutzer sind, muss der gesamte ARN wie folgt angegeben werden:
"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 Wenn die IAM-Vertrauensrichtlinie Platzhalter enthält, befolgen Sie diese Anweisungen.
Hinweis: Sie können einen Platzhalter „*“ nicht für einen Teil eines Prinzipal-Namens oder ARN verwenden.
Im folgenden Beispiel wurde ein Platzhalter in einer IAM-Vertrauensrichtlinie falsch verwendet:
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/user-*"
}
Um einen Teil des Prinzipal-Namens durch einen Platzhalters zu ersetzen, verwenden Sie ein Condition-Element mit dem globalen Bedingungsschlüssel aws:PrincipalArn und geben Sie einen ARN mit dem Platzhalter an.
Um Identitäten aus allen AWS-Konten anzugeben, verwenden Sie einen Platzhalter folgender Art:
"Principal": {
"AWS": "*"
}
Wichtig: Sie können in einer Vertrauensrichtlinie im Prinzipal-Element einen Platzhalter mit dem Effekt „Zulassen“ verwenden. Dadurch kann jedoch jeder IAM-Benutzer, jede übernommene Rollensitzung oder jeder Verbundbenutzer in jedem AWS-Konto in derselben Partition auf Ihre Rolle zugreifen. Für IAM-Benutzer und Rollenprinzipale in Ihrem AWS-Konto sind keine weiteren Berechtigungen erforderlich. Prinzipale in anderen AWS-Konten müssen über identitätsbasierte Berechtigungen verfügen, um Ihre IAM-Rolle zu übernehmen.
Mit dieser Methode können Prinzipale für Webidentitätssitzungen, Prinzipale für SAML-Sitzungen oder Serviceprinzipale nicht auf Ihre Ressourcen zugreifen.
Es hat sich bewährt, diese Methode nur mit dem Condition-Element und einem Bedingungsschlüssel wie aws:PrincipalArn zu verwenden, um Berechtigungen wie folgt einzuschränken:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*"
}
}
}
]
}
In diesem Beispiel einer Vertrauensrichtlinie wird der Bedingungsschlüssel aws:PrincipalArn verwendet, damit nur Benutzer mit übereinstimmenden Benutzernamen die IAM-Rolle übernehmen können.
4. Wenn Ihre IAM-Rolle eine AWS-Servicerolle ist, muss der gesamte Serviceprinzipal wie folgt angegeben werden:
"Principal": {
"Service": "ec2.amazonaws.com"
}
5. Sie können Prinzipale für SAML-Sitzungen mit einem externen SAML-Identitätsanbieter verwenden, um IAM-Benutzer zu authentifizieren. Die Vertrauensrichtlinie der IAM-Rolle muss über ein Prinzipal-Element folgender Art verfügen:
"Principal": {
"Federated": "arn:aws:iam::123456789012:saml-provider/provider-name"
}
6. Sie können Prinzipale für Webidentitätssitzungen zur Authentifizierung von IAM-Benutzern verwenden. Die Vertrauensrichtlinie der IAM-Rolle, die Zugriff ermöglicht, muss über ein Prinzipal-Element folgender Art verfügen:
"Principal": { "Federated": "cognito-identity.amazonaws.com" }
7. Wenn Sie verschiedene Arten von Prinzipalen in einer einzigen Anweisung verwenden, formatieren Sie die IAM-Vertrauensrichtlinie wie folgt:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/user-name",
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Der IAM-Benutzer oder die IAM-Rolle muss eine vorhandene Identität sein
Wenn die IAM-Rollenvertrauensrichtlinie IAM-Benutzer oder -Rollen als Prinzipale verwendet, stellen Sie sicher, dass diese IAM-Identitäten nicht gelöscht wurden. Der Fehler „Invalid principal in policy“ (Ungültiger Prinzipal in Richtlinie) tritt auf, wenn Sie die IAM-Vertrauensrichtlinie ändern und der Prinzipal gelöscht wurde.
Hinweis: Wenn der Prinzipal gelöscht wurde, notieren Sie die eindeutige ID des Prinzipals in der IAM-Vertrauensrichtlinie und nicht den ARN.
Zugehörige Informationen
War dieser Artikel hilfreich?
Benötigen Sie Hilfe zur Fakturierung oder technischen Support?