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

Lecture de 4 minute(s)
0

Je souhaite accorder des autorisations aux fonctions AWS Lambda dans mon application de modèle d’application sans serveur AWS (AWS SAM). Comment définir un rôle d’exécution Lambda avec des autorisations limitées 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 ressources AWS::Serverless::Function suivantes :

  • Policies : vous pouvez créer un nouveau rôle d’exécution à l’aide de politiques prédéfinies englobant votre fonction Lambda.
  • Role : vous pouvez définir un rôle Gestion des identités et des accès AWS (AWS IAM) à utiliser comme rôle d’exécution de la fonction.
  • PermissionsBoundary : vous pouvez définir une limite d’autorisations IAM pour le rôle d’exécution créé.

Remarque : les propriétés Policies et Role ne peuvent pas être utilisées ensemble. La propriété Role est utile lorsque votre rôle d’exécution nécessite des autorisations trop spécifiques pour faire appel à des politiques prédéfinies.

Résolution

Spécification de politiques pour un nouveau rôle d’exécution Lambda

Pour la propriété Policies, saisissez une combinaison des éléments suivants :

Remarque : les modèles de politiques AWS SAM sont limitées à des ressources AWS spécifiques. Consultez le tableau de modèles de politiques pour obtenir une liste de modèles de politiques et des autorisations qu’ils accordent à vos fonctions Lambda.

Voici quelques exemples de modèles AWS SAM au format YAML où la propriété Policies est définie :

Exemple de modèle AWS SAM au format YAML avec une politique 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 the Lambda service access to poll your DynamoDB Stream
      - AmazonDynamoDBFullAccess

Exemple de modèle AWS SAM au format YAML avec un modèle de politique AWS SAM (SQSPollerPolicy) défini

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 politique 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écification d’une limite d’autorisations IAM

Pour définir les autorisations maximales autorisées pour le rôle d’exécution de votre fonction Lambda, vous pouvez utiliser 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écification de l’Amazon Resource Name (ARN) d’une limite d’autorisations

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

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

Remarque : vous pouvez uniquement définir PermissionsBoundary lorsque vous créez un nouveau rôle avec votre modèle AWS SAM. Vous ne pouvez pas définir de limite d’autorisations pour un Rôle existant que vous spécifiez.

Spécification d’un rôle d’exécution Lambda

Pour la propriété Role, saisissez l’une des informations suivantes :

Remarque : si vous ne spécifiez aucun Rôle dans votre modèle AWS SAM, un rôle d’exécution est créé lorsque vous déployez votre application. Ce rôle d’exécution inclut toutes les Politiques que vous définissez.

Exemple de modèle AWS SAM au format YAML avec la propriété de 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 la ligne de commande AWS SAM (AWS SAM CLI), exécutez la commande sam build pour créer votre application et la mettre en package.
**Remarque :**si des erreurs surviennent lors de l’exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente de l’AWS CLI.

2.    Exécutez la commande sam deploy pour déployer votre package d’application AWS SAM.

Pour en savoir plus, consultez les pages Création d’applications et Déploiement d’applications sans serveur.


Informations connexes

Démarrer avec AWS SAM

Modèle d’application sans serveur AWS (AWS SAM) (référentiel AWS SAM de GitHub)

Modèles de politiques (référentiel AWS SAM de GitHub)

Politiques gérées et politiques en ligne

Validation de fichiers de modèle AWS SAM

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans