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