J'ai essayé de modifier la stratégie d’approbation pour mon utilisateur ou mon rôle d'identité AWS Identity and Access Management (IAM) et j'ai reçu l'erreur suivante : « Failed to update trust policy. Invalid principal in policy. »
Brève description
Ce message d'erreur indique que la valeur d'un élément Principal de votre politique de confiance IAM n'est pas valide. Pour résoudre cette erreur, vérifiez les points suivants :
- Votre stratégie d’approbation de rôle IAM utilise des valeurs prises en charge avec un format correct pour l'élément Principal.
- Si la stratégie d’approbation de rôle IAM emploie des utilisateurs ou des rôles IAM comme principaux, vérifiez que l'utilisateur ou le rôle n'a pas été supprimé.
Remarque : Si le compte AWS GovCloud (États-Unis) tente d’ajouter le numéro de compte AWS standard, les comptes AWS GovCloud (États-Unis) peuvent également recevoir cette erreur. Vous ne pouvez pas créer de rôle pour déléguer l'accès entre un compte AWS GovCloud (États-Unis) et un compte AWS standard. Pour plus d'informations, consultez la section Comment IAM diffère pour AWS GovCloud (États-Unis).
Résolution
Vérifier les valeurs prises en charge pour l'élément principal
L'élément Principal de la stratégie d’approbation IAM de votre rôle doit inclure les valeurs prises en charge suivantes.
-
Assurez-vous que la stratégie IAM inclut l'ID de compte AWS à 12 chiffres correct, similaire à l’ID suivant :
"Principal":
{"AWS": "123456789012"
}
Remarque : Vous pouvez également utiliser l'utilisateur racine Amazon Resource Name (ARN) pour spécifier le compte AWS. Par exemple, arn:aws:iam::123456789012:root.
-
Si les principaux de la stratégie d’approbation IAM sont des utilisateurs, des rôles ou des utilisateurs fédérés IAM, l'ARN complet doit être spécifié comme suit :
"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"
]
}
-
Si la stratégie d’approbation IAM inclut des caractères génériques, suivez ces instructions.
Remarque : Vous ne pouvez pas utiliser un caractère générique « * » pour représenter 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 stratégie d’approbation IAM :
"Principal":
{ "AWS": "arn:aws:iam::123456789012:user/user-*"
}
Pour représenter une partie du nom de principal à l'aide d'un caractère générique, utilisez un élément Condition avec la clé de condition globale aws:PrincipalArn. Puis, 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 Principal avec un effet Autoriser dans une stratégie d’approbation. Cela permet toutefois à tout utilisateur IAM, à toute session de rôle endossé ou à tout utilisateur fédéré de n'importe quel compte AWS situé sur la même partition d'accéder à votre rôle. Les principaux utilisateurs et rôles IAM de votre compte AWS ne nécessitent aucune autre autorisation. Les principaux des autres comptes AWS doivent disposer d'autorisations basées sur l'identité pour assumer votre rôle IAM. Cette méthode n'autorise pas les principaux de session d'identité Web, les principaux de session SAML ou les principaux 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. Cet exemple de stratégie d’approbation utilise la clé de condition aws:PrincipalArn pour autoriser uniquement les utilisateurs dont le nom d'utilisateur correspond à endosser le rôle IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*"
}
}
}
]
}
-
Si votre rôle IAM est un rôle de service AWS, le principal de service complet doit être spécifié comme suit :
"Principal": {
"Service": "ec2.amazonaws.com"
}
-
Vous pouvez utiliser les principaux de session SAML avec un fournisseur d'identité SAML externe pour authentifier les utilisateurs IAM. La stratégie d’approbation du rôle IAM doit comporter un élément Principal similaire au suivant :
"Principal": {
"Federated": "arn:aws:iam::123456789012:saml-provider/provider-name"
}
-
Vous pouvez utiliser les principaux de session d'identité Web pour authentifier les utilisateurs IAM. La stratégie 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"
}
-
Si vous utilisez différents types de principaux dans une même instruction, formatez la stratégie d’approbation IAM comme suit :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/user-name",
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Vérifiez que la stratégie d’approbation ne contient pas de préfixes AIDA ou AROA
Si votre stratégie d’approbation contient un élément Principal avec un ARN pour les entités IAM, l'ARN devient un ID principal unique lorsqu'il est enregistré. Cet ID principal unique contient le préfixe AIDA pour les utilisateurs IAM et AROA pour les rôles IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"AIDAW4GTDFISYQEXAMPLE",
"AROAW4GTDFISYQEXAMPLE"
]
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
La présence d’un ID principal unique dans une stratégie d’approbation basée sur les ressources indique que l'utilisateur ou le rôle IAM a été supprimé. L'ID principal apparaît car AWS ne peut pas établir de mappage vers un ARN valide. Si vous modifiez la stratégie d’approbation basée sur les ressources, vous devez soit supprimer l'ID principal, soit le remplacer par un ARN principal valide. L'ARN est remplacé par le nouvel ID unique de l'utilisateur ou du rôle une fois que vous avez enregistré la stratégie.
Pour plus d'informations, consultez la section Pourquoi existe-t-il un format principal inconnu dans ma stratégie basée sur les ressources IAM ?
Informations connexes
Comment utiliser AWS Identity and Access Management (IAM) pour autoriser l'utilisateur à accéder aux ressources ?
Comment puis-je accéder aux ressources d'un autre compte AWS à l'aide d'AWS IAM ?