Odpowiedz

13

EDIT: zaktualizowano odpowiedź dla Serverless Framework 1.x.

Rozwiązaniem jest ustawienie iamRoleStatements, aby umożliwić Lambda dostęp do zasobów DynamoDB. Uwaga: poświadczenia używane przez Serverless Framework muszą mieć uprawnienia do tych samych zasobów DynamoDB.

  1. dodać iamRoleStatements w 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. wdrożyć zmiany:

    > serverless deploy 
    

Aby nadać uprawnienia w poziomie funkcji (zamiast pozwalać wszystkie funkcje dostępu do DynamoDB), zobacz moją drugą odpowiedź here.

+1

Dzięki za przykład. Użyłem arn: aws: dynamodb: $ {region}: *: table/* –

+0

Zaktualizowano dla wersji bez serwera 1 .x – Zanon

4

Podczas gdy nie jestem zaznajomiony ze sposobem bezserwerowym, to czego szukasz, to IAM Role.

Możesz przypisać rolę do instancji EC2 lub AWS Lambda, aby kod, który piszesz, który korzysta z pakietu SDK AWS, automatycznie będzie w stanie pobrać poświadczenia AWS z uprawnieniami związanymi z tą rolą. W przypadku AWS Lambda i przypadku użycia należy przyznać rolę, do której przypisany jest dostęp AWS Lambda do tabel DynamoDB, które należy uruchomić.

To może być łatwe w użyciu, po prostu nie podajesz poświadczeń i działa (tak długo, jak rola ma odpowiednie uprawnienia)! Pakiet SDK AWS dba o wszystko, automatycznie pobierając poświadczenia powiązane z rolą.

Z podanego linku szczegółowe pytanie, które odnosi się do tego zgodnie z najlepszą praktyką, to Credentials from IAM Roles for EC2 Instances, gdzie odnosi się do instancji EC2, ale dotyczy to również AWS Lambda.