Passer au contenu

Comment puis-je résoudre l'erreur CloudFormation « Le rôle défini pour la fonction ne peut pas être endossé par Lambda » ?

Lecture de 2 minute(s)
0

Je souhaite résoudre l'erreur qui fait que ma fonction Lambda rejette le rôle AWS Identity and Access Management (IAM) qui lui confère les privilèges nécessaires sur AWS CloudFormation.

Brève description

Parfois, la fonction AWS Lambda n'accepte pas le rôle IAM qui lui a été défini sur CloudFormation.

Résolution

Vérifier si l'ARN du rôle IAM correct est transmis à la fonction Lambda

Si l’Amazon Resource Name (ARN) du rôle IAM pour la fonction existe déjà dans le compte, assurez-vous que sa syntaxe est correcte. Par exemple :

  • Vérifiez que le nom du rôle est correctement orthographié et respecte l’exigence de sensibilité à la casse.
  • Assurez-vous que le IAM_ROLE_NAME correspond exactement au IAM_ROLE_NAME existant dans le compte. Par exemple :
    Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/IAM_ROLE_NAME

Résoudre les problèmes liés au rôle IAM et à la stratégie associée

Vérifiez la stratégie IAM définie pour le rôle endossé par la fonction Lambda. Vérifiez que le rôle IAM dispose de toutes les autorisations nécessaires. Assurez-vous que la section Principal de la stratégie est correctement configurée, comme indiqué ci-dessous :

LambdaExecutionRole:    
  Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
          Action:
          - sts:AssumeRole

Résoudre la dépendance entre le rôle IAM et la fonction Lambda

Si le rôle IAM et la fonction Lambda sont créés dans des piles différentes, créez d'abord le rôle. Si la fonction Lambda de la pile est lancée en premier, la pile peut échouer avec cette erreur.

Il est recommandé de créer le rôle IAM dans la même pile que la fonction Lambda. Utilisez des fonctions intrinsèques, telles que GetAtt et !Ref, pour transmettre le rôle IAM à la fonction Lambda.

AWS OFFICIELA mis à jour il y a 3 ans