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 :
- Nom d'une stratégie gérée par AWS
- Nom d'un modèle de stratégie AWS SAM
- Un document de stratégie en ligne
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
Exemple de modèle AWS SAM au format YAML avec un modèle de stratégie 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 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 :
- L’ARN d’un rôle d'exécution Lambda auquel une stratégie d'autorisations IAM est attachée.
- Une référence à une ressource Rôle que vous avez définie dans le même modèle AWS SAM.
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.
Informations connexes
Modèle d'application sans serveur AWS (AWS SAM) (Repo AWS SAM GitHub)
Modèles de stratégie (Repo AWS SAM GitHub)
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?