Répondre

13

EDIT: mise à jour de la réponse pour Serverless Framework 1.x.

La solution consiste à définir les iamRoleStatements pour permettre à Lambda d'accéder aux ressources DynamoDB. Remarque: les informations d'identification utilisées par le Framework Serverless doivent disposer des autorisations sur les mêmes ressources DynamoDB.

  1. ajouter les iamRoleStatements dans votre serverless.yml:

    provider: 
        name: aws 
        runtime: nodejs4.3 
        stage: dev 
        region: us-east-1 
        iamRoleStatements: 
        - Effect: "Allow" 
         Action: 
         - "dynamodb:*" 
         Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/*" 
    
  2. Déployez les changements:

    > serverless deploy 
    

Pour accorder des autorisations dans un niveau de fonction (au lieu de permettre toutes les fonctions pour accéder à DynamoDB), voir mon autre réponse here.

+1

Merci pour l'exemple. J'ai utilisé arn: aws: dynamodb: $ {region}: *: table/* –

+0

Mis à jour pour la version 1.x sans serveur – Zanon

4

Bien que je ne connaisse pas le fonctionnement de Serverless, ce que vous recherchez est un IAM Role.

Vous pouvez attribuer un rôle à une instance EC2 ou AWS Lambda afin que le code que vous écrivez utilisant AWS SDK puisse récupérer automatiquement les informations d'identification AWS avec les autorisations associées à ce rôle. Pour AWS Lambda et votre cas d'utilisation, vous devez accorder le rôle que vous attribuez à AWS Lambda aux tables DynamoDB dont il a besoin pour s'exécuter.

Cela peut être trompeusement simple à utiliser, vous ne fournissez simplement pas d'informations d'identification et cela fonctionne (tant que le rôle a les permissions correctes)! AWS SDK prend soin de tout pour vous en récupérant automatiquement les informations d'identification associées au rôle. A partir du lien, vous avez fourni la question spécifique qui fait référence à cette question sous la meilleure pratique: Credentials from IAM Roles for EC2 Instances où elle fait référence à des instances EC2, mais cela s'applique également à AWS Lambda.