Comment puis-je résoudre les erreurs de fédération IAM « AccessDenied » ou « Not authorized to perform AssumeRoleWithWebIdentity » provenant de mon fournisseur d'identité ?

Lecture de 4 minute(s)
0

J'ai utilisé une stratégie ou un rôle AWS Identity and Access Management (IAM) avec fédération provenant de mon fournisseur d'identité (IdP). J'ai reçu l'erreur « AccessDenied » ou « Not authorized AssumeRoleWithWebIdentity ».

Brève description

L'erreur AssumeRoleWithWebIdentity de l’action d'API s’est produite car la stratégie d’approbation IAM n'est pas configurée correctement ou le rôle IAM dans l'IdP n'est pas configuré correctement.

Résolution

Pour résoudre ce problème, suivez les instructions pour créer un rôle IAM pour la fédération OpenID Connect (OIDC). Puis, suivez ces instructions pour configurer la stratégie d’approbation du rôle IAM.

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente de l'AWS CLI.

Stratégie d’approbation du rôle IAM

Assurez-vous que la stratégie d’approbation du rôle IAM est correctement configurée pour votre IdP.

Exemple de stratégie d’approbation de rôle pour l’IdP GitHub

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::012345678910:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/GitHubRepo:ref:refs/heads/GitHubBranch"
        }
      }
    }
  ]
}

Configuration du rôle IAM

Assurez-vous que le rôle IAM est configuré avec l’Amazon Resource Name (ARN) correct pour votre IdP. Les étapes de configuration du rôle IAM varient en fonction des différents IdP et services AWS.

Par exemple, pour obtenir l'ARN du rôle IAM du compte de service pour Amazon Elastic Kubernetes Service (Amazon EKS), exécutez la commande suivante :

kubectl describe serviceaccount serviceaccount_name -n namespace_name

À partir de la sortie, vérifiez que l'ARN du rôle IAM est celui que vous souhaitez endosser. Si l'ARN du rôle IAM est correct, suivez les étapes pour attribuer le rôle IAM à votre compte de service Kubernetes. Si l'ARN du rôle IAM est incorrect, suivez les étapes pour mettre à jour l'ARN dans la section Créer et associer un rôle.

Pour plus d'informations, consultez la section Créer un fournisseur OIDC IAM pour votre cluster.

Historique des événements CloudTrail

Les échecs AssumeRoleWithWebIdentity de l’action d’API sont enregistrés dans l'historique des événements AWS CloudTrail. Vous pouvez consulter tous les services et intégrations pris en charge et les types d'événements, tels que les activités de création, de modification, de suppression et non modifiables, au cours des 90 derniers jours. Il n'est pas nécessaire de configurer un suivi pour utiliser l'historique des événements CloudTrail.

Comparez la valeur de PrincipalId journalisée dans l'historique des événements CloudTrail dans la stratégie d’approbation du rôle pour confirmer les valeurs transmises dans la requête d'API.

Par exemple, si la valeur de arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com:sts.amazonaws.com:repo:reponame-rn/new-repo:environment:dev est journalisée dans le PrincipalId de l'événement CloudTrail, appliquez la stratégie d’approbation suivante :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:reponame-rn/new-repo:environment:dev"
        }
      }
    }
  ]
}

Pour plus d'informations, consultez la section Affichage des événements de gestion récents à l'aide de la console.

Bonnes pratiques de configuration

Pour résoudre les problèmes de configuration, suivez les bonnes pratiques suivantes :

  • ARN de principal incomplet dans la stratégie d’approbation du rôle : L'ARN de principal fédéré de la stratégie d’approbation doit inclure l'ARN complet et le nom du fournisseur OIDC. Par exemple, si vous utilisez un IdP GitHub, l'ARN du principal est au format arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com.
  • Partitions ARN incorrectes : La configuration de l’ARN doit inclure la partition appropriée pour le rôle et le fournisseur OIDC. Par exemple, les ARN des fournisseurs OIDC de la partition AWS GovCloud sont au format arn:aws-us-gov:iam::123456789012:oidc-provider/token.actions.githubusercontent.com.
  • Clés de condition non disponibles : Tous les IdP ne sont pas compatibles avec les clés de condition disponibles pour la fédération OIDC. Assurez-vous de valider la compatibilité de la clé de condition avec le fournisseur OIDC. Pour plus d'informations, consultez la section Clés disponibles pour la fédération AWS OIDC.
  • Chemin de rôle manquant dans la configuration de l'IdP : Le rôle IAM complet et le chemin ARN doivent être configurés pour votre IdP. Par exemple, le nom du rôle IAM GitHubRole dans l’ARN de chemin administrateur est configuré comme arn:aws:iam::123456789012:role/administrator/GitHubRole.

Informations connexes

Comment puis-je résoudre l'erreur d'appel d'API AWS STS AssumeRoleWithWebIdentity « InvalidIdentityToken » ?

Comment puis-je résoudre les erreurs liées à la fédération OIDC IdP dans IAM ?

Configuration d'OpenID Connect dans Amazon Web Services (sur le site Web de GitHub)

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois