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.