Comment puis-je résoudre l'erreur de politique d'approbation IAM « Failed to update trust policy. Invalid principal in policy » (Impossible de mettre à jour la politique d'approbation. Mandataire non valide dans la politique) ?

Date de la dernière mise à jour : 04/04/2022

Lorsque j'ai essayé de modifier ma politique d'approbation de rôle AWS Identity and Access Management (IAM) à l'aide de la Console de gestion AWS, j'ai reçu une erreur similaire à la suivante :

"Failed to update trust policy. Invalid principal in policy » (Impossible de mettre à jour la politique d'approbation. Mandataire non valide dans la politique).

Brève description

Ce message d'erreur indique que la valeur d'un élément Mandataire de votre politique d'approbation IAM n'est pas valide. Pour résoudre cette erreur, confirmez les éléments suivants :

  • Votre politique d'approbation des rôles IAM utilise des valeurs prises en charge avec une mise en forme correcte pour l'élément Mandataire.
  • Si la politique d'approbation des rôles IAM utilise des identités IAM (utilisateurs, groupes d'utilisateurs et rôles) en tant que mandataires, confirmez que l'utilisateur ou le rôle n'a pas été supprimé.

Résolution

Vérifier les valeurs prises en charge pour l'élément Mandataire

L'élément Principal de la politique d'approbation IAM de votre rôle doit inclure les valeurs prises en charge suivantes.

1.    Assurez-vous que la politique IAM inclut l'ID de compte AWS à 12 chiffres correct similaire à ce qui suit :

"Principal": {
"AWS": "123456789012"
}

Remarque : le compte AWS peut également être spécifié à l'aide de l'utilisateur racine Amazon Resource Name (ARN). Par exemple, arn:aws:iam::123456789012:root.

2.    Si les principaux de la politique d'approbation IAM sont des utilisateurs IAM, des rôles ou des utilisateurs fédérés, l'ARN complet doit être spécifié de la manière suivante :

"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    Si la politique d'approbation IAM inclut un caractère générique, suivez ces instructions.

Remarque : vous ne pouvez pas utiliser un caractère générique « * » pour faire correspondre une partie d'un nom de principal ou d'un ARN.

L'exemple suivant présente une utilisation incorrecte d'un caractère générique dans une politique d'approbation IAM :

"Principal": {
  "AWS": "arn:aws:iam::123456789012:user/user-*"
}

Pour faire correspondre une partie du nom d'un mandataire à l'aide d'un caractère générique, utilisez un élément Condition avec la clé de condition globale aws:PrincipalArn et spécifiez un ARN avec le caractère générique.

Pour spécifier les identités de tous les comptes AWS, utilisez un caractère générique similaire au suivant :

"Principal": {
  "AWS": "*"
}

Important : vous pouvez utiliser un caractère générique dans l'élément Mandataire avec un effet Autoriser dans une politique d'approbation. Toutefois, cela permet à tout utilisateur IAM, toute session de rôle assumé ou tout utilisateur fédéré de n'importe quel compte AWS de la même partition d'accéder à votre rôle. Pour les principaux utilisateurs et rôles IAM au sein de votre compte AWS, aucune autre autorisation n'est requise. Pour les mandataires d'autres comptes AWS, ils doivent disposer d'autorisations basées sur l'identité pour assumer votre rôle IAM.

Cette méthode n'autorise pas les mandataires de session d'identité web, les mandataires de session SAML ou les mandataires de service à accéder à vos ressources.

Il est recommandé d'utiliser cette méthode uniquement avec l'élément Condition et une clé de condition telle que aws:PrincipalArn pour limiter les autorisations similaires à ce qui suit :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*"
        }
      }
    }
  ]
}

Cet exemple de politique d'approbation utilise la clé de condition aws:PrincipalArn pour autoriser uniquement les utilisateurs avec un nom d'utilisateur correspondant à assumer le rôle IAM.

4.    Si votre rôle IAM est une fonction du service AWS, le principal de service complet doit être spécifié de la manière suivante :

"Principal": {
  "Service": "ec2.amazonaws.com"
}

5.    Vous pouvez utiliser des principaux de session SAML avec un fournisseur d'identité SAML externe pour authentifier les utilisateurs IAM. La politique d'approbation du rôle IAM doit comporter un élément Principal similaire à ce qui suit :

"Principal": {
  "Federated": "arn:aws:iam::123456789012:saml-provider/provider-name"
}

6.    Vous pouvez utiliser les principaux de session d'identité web pour authentifier les utilisateurs IAM. La politique d'approbation du rôle IAM qui fournit l'accès doit comporter un élément Principal similaire au suivant :

"Principal": { "Federated": "cognito-identity.amazonaws.com" }

7.    Si vous utilisez différents types de principal dans une même instruction, formatez la politique d'approbation IAM de la manière suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/user-name",
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

L'utilisateur ou le rôle IAM doit être une identité existante

Si la politique d'approbation des rôles IAM utilise des utilisateurs IAM ou des rôles en tant que mandataires, confirmez que ces identités IAM ne sont pas supprimées. L'erreur « Invalid principal in policy » (Mandataire non valide dans la politique) se produit si vous modifiez la politique d'approbation IAM et que le mandataire a été supprimé.

Remarque : si le mandataire a été supprimé, notez l'ID unique du mandataire dans la politique d'approbation IAM, et non l'ARN.