Comment accorder des autorisations IAM à une fonction Lambda à l'aide d'un modèle AWS SAM ?

Date de la dernière mise à jour : 11/10/2021

Je souhaite accorder des autorisations aux fonctions AWS Lambda dans mon application AWS Serverless Application Model (AWS SAM). Comment définir un rôle d'exécution Lambda avec des autorisations étendues dans un modèle AWS SAM ?

Brève description

Pour définir un rôle d'exécution Lambda dans un modèle AWS SAM, vous pouvez utiliser les propriétés de ressource AWS::Serverless::Function suivantes :

  • Stratégies : vous permet de créer un nouveau rôle d'exécution à l'aide de stratégies prédéfinies pouvant être étendues à votre fonction Lambda.
  • Rôle : vous permet de définir un rôle AWS Identity and Access Management (IAM) à utiliser comme rôle d'exécution de la fonction.
  • PermissionsBoundary (Limite d’autorisations) : vous permet de définir une limite d'autorisations IAM pour le rôle d'exécution que vous créez.

Remarque : les propriétés Stratégies et Rôles ne peuvent pas être utilisées ensemble. L'utilisation de la propriété Rôle est utile lorsque votre rôle d'exécution nécessite des autorisations trop spécifiques pour utiliser des stratégies prédéfinies.

Résolution

Spécifier des stratégies pour un nouveau rôle d'exécution Lambda

Pour la propriété Stratégies, entrez une combinaison des éléments suivants :

Remarque : les modèles de stratégie AWS SAM sont étendus à certaines ressources AWS. Consultez le tableau des modèles de stratégie pour obtenir la liste des modèles de stratégie et les autorisations qu'ils accordent à vos fonctions Lambda.

Voici quelques exemples de modèles AWS SAM au format YAML avec des stratégies définies :

Exemple de modèle AWS SAM au format YAML avec une stratégie gérée AWS nommée

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31' b
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Policies:
      # Give the Lambda service access to poll your DynamoDB Stream
      - AmazonDynamoDBFullAccess
MyFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    CodeUri: ${codeuri}
    Handler: hello.handler
    Runtime: python2.7
    Policies:
      - SQSPollerPolicy:
          QueueName:
            !GetAtt MyQueue.QueueName

Exemple de modèle AWS SAM au format YAML avec un document de stratégie en ligne défini

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Policies:
      - Statement:
        - Sid: SSMDescribeParametersPolicy
          Effect: Allow
          Action:
          - ssm:DescribeParameters
          Resource: '*'
        - Sid: SSMGetParameterPolicy
          Effect: Allow
          Action:
          - ssm:GetParameters
          - ssm:GetParameter
          Resource: '*'

(Facultatif) Spécifiez une limite d'autorisations IAM

Pour définir les autorisations maximales autorisées pour le rôle d'exécution de votre fonction Lambda, utilisez une limite d'autorisations IAM.

Pour définir une limite d'autorisations IAM, procédez comme suit dans votre modèle AWS SAM au format YAML :

Spécifiez l'Amazon Resource Name (ARN) d'une limite d'autorisations

Pour la propriété PermissionsBoundary (Limites d’autorisations), saisissez l'ARN d'une limite d'autorisations. Par exemple :

Properties:
  PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries

Remarque : Vous pouvez définir une PermissionsBoundary (Limite d'autorisations) uniquement si vous créez un nouveau rôle avec votre modèle AWS SAM. Vous ne pouvez pas définir une limite d'autorisations pour un rôle existant que vous spécifiez.

Spécifier un rôle d'exécution Lambda

Pour la propriété Rôle, entrez l'un des éléments suivants :

Remarque : si vous ne spécifiez pas de rôle dans votre modèle AWS SAM, un rôle d'exécution avec les stratégies que vous définissez est créé lorsque vous déployez votre application. Ce rôle d'exécution inclut toutes les stratégies que vous définissez.

Exemple de modèle AWS SAM au format YAML avec la propriété Rôle définie

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources: 
  MyFunction:
    Type: 'AWS::Serverless::Function' 
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip' 
      Role: arn:aws:iam::111111111111:role/SAMPolicy

Empaquetage et déploiement de votre application

1.    Dans l'interface de ligne de commande AWS SAM (AWS SAM CLI), utilisez la commande sam build pour générer et empaqueter votre application.
Remarque : si vous recevez des erreurs lors de l'exécution des commandes AWS CLI, assurez-vous que vous utilisez la version la plus récente d'AWS CLI.

2.    Utilisez la commande sam deploy pour déployer votre package d'application AWS SAM.

Pour plus d'informations, consultez Création d'applications avec des dépendances et Déploiement d'applications sans serveur.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?