Comment accorder des autorisations à mes fonctions Lambda à l'aide de stratégies et de rôles dans les modèles AWS SAM ?

Dernière mise à jour : 12/10/2020

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 mes modèles AWS SAM?

Brève description

Dans vos modèles SAM AWS, utilisez une propriété AWS::Serverless::Function ou Role de la ressource Stratégie ainsi que PermissionsBoundary, pour définir un rôle d'exécution Lambda et ses autorisations.

Remarque : les modèles AWS SAM sont similaires aux modèles AWS CloudFormation. Toute ressource que vous pouvez déclarer dans un modèle AWS CloudFormation peut également être déclarée dans un modèle AWS SAM. Pour plus d'informations, consultez Anatomie du modèle AWS SAM.

Utilisez des stratégies pour créer un nouveau rôle d'exécution avec des autorisations qui sont uniquement étendues à votre fonction Lambda. Vous avez également la possibilité d’utiliserPermissionsBoundary pour définir une limite d'autorisations AWS Identity and Access Management (IAM) pour le rôle nouvellement créé.

Si votre cas d'utilisation nécessite un rôle d'exécution avec des autorisations trop spécifiques pour utiliser des stratégies prédéfinies, utilisez plutôt des rôles.

Remarque : les propriétés Stratégies et Rôles ne peuvent pas être utilisées ensemble.

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 avec une stratégie gérée par 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 DynamoDB Full Access to your Lambda Function
      - AmazonDynamoDBFullAccess
MyFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    CodeUri: ${codeuri}
    Handler: hello.handler
    Runtime: python2.7
    Policies:
      - SQSPollerPolicy:
          QueueName:
            !GetAtt MyQueue.QueueName

Exemple avec un document de stratégie en ligne :

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

Si vous souhaitez définir les autorisations maximales autorisées pour le rôle d'exécution de votre fonction Lambda, utilisez une limite d'autorisations IAM. Dans votre modèle AWS SAM au format YAML, pour la propriété PermissionsBoundary (Limite d'autorisations) entrez l'Amazon Resource Name (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.

Voici un exemple de modèle AWS SAM au format YAML avec le rôle 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' 
      Role: arn:aws:iam::111111111111:role/SAMPolicy

Empaquetage et déploiement de votre application

Après avoir défini les autorisations des fonctions Lambda dans votre modèle AWS SAM, procédez comme suit :

  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 ?