AWS SAM YAML - подключать одну и ту же политику несколько раз или несколько таблиц к одной и той же политике DynamoDB - PullRequest
1 голос
/ 06 ноября 2019

Возникают проблемы с получением роли для доступа к двум таблицам. Пример YAML для template.yaml:

Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: path/to/something
      Handler: index.handler
      Runtime: nodejs10.x
      Events:
        Get:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /path/to/other/thing
            Method: post
      Policies:
        DynamoDBCrudPolicy:
          TableName:
            table1
            table2

Мне нужна эта функция, чтобы можно было читать / писать на table1 и table2, но это не работает. Я пытался:

- table1
- table2

Но это тоже не работает. Также попробовал:

Policies:
  - DynamoDBCrudPolicy:
    TableName:
      table1
  - DynamoDBCrudPolicy:
    TableName:
      table2

Но это тоже ошибки. Как мне сделать это правильно?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

Какая у вас ошибка? Похоже, вы пропустили отступ в TableName, попробуйте вместо этого:

Policies:
 - DynamoDBCrudPolicy: 
     TableName: table1
 - DynamoDBCrudPolicy: 
     TableName: table2

PS: я мог бы написать это в комментарии, но код не форматировал должным образом

0 голосов
/ 06 ноября 2019

То, что я хотел бы сделать, это создать роль для вашей лямбда-функции следующим образом:

Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: path/to/something
      Handler: index.handler
      Runtime: nodejs10.x
      Events:
        Get:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /path/to/other/thing
            Method: post
      Role: !GetAtt MyDynamoDBRole.Arn

, а затем прикрепить политику к этой роли. Примерно так:

  MyDynamoDBRole:    
    Type: AWS::IAM::Role
    Properties:
      Path: "/"
      Policies:
        -
          PolicyName: "myDynamoDBPolicy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              -
                Effect: "Allow"
                Action:
                  - "dynamodb:BatchGetItem"
                  - "dynamodb:BatchWriteItem"
                  - "dynamodb:PutItem"
                  - "dynamodb:GetItem"
                  - "dynamodb:Scan"
                  - "dynamodb:Query"
                  - "dynamodb:UpdateItem"
                  - "dynamodb:UpdateTable"
                  - "dynamodb:GetRecords"
                Resource: "arn:aws:dynamodb:us-east-1:123456789012:table/table1"
      AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
          -
            Effect: Allow
            Principal:
              Service:
              - dynamodb.amazonaws.com
            Action: sts:AssumeRole

Обратите внимание: что вам может потребоваться настроить конкретные разрешения в соответствии с вашим вариантом использования, приведенный выше код является просто примером, иллюстрирующим конструкцию, которой я являюсьпредлагая.

...