Доступ к DynamoDB из контейнера Fargate в частных подсетях - PullRequest
0 голосов
/ 03 июля 2019

Я создаю следующую инфраструктуру для моего проекта, которая использует FastAPI для разработки API.Здесь есть два микросервиса: / user / * и / admin / *, которые считывают и обновляют данные, хранящиеся в DynamoDB.

Настройка следующая: у меня есть VPC с 2 AZ, каждый из которых содержит публичныйи частная подсеть.Каждая общедоступная подсеть имеет шлюз NAT для частной подсети в том же AZ.Интернет-шлюз подключен к VPC.Конечная точка VPC для DynamoDB создана.Кластер ECS создается с Fargate, являющимся типом запуска, а служба работает в двух частных подсетях.

Шаблон CloudFormation создается, но запрос API возвращает внутреннюю ошибку сервера.Я считаю, что проблема в том, что контейнер не имеет надлежащего доступа к таблице DynamoDB.

Ниже приведена роль IAM, которую я создал и прикрепил к контейнеру ECS (ECSTaskExecutionRole):

ECSTaskExecutionRole:
    Type: AWS::IAM::Role
    # Role for ECS task
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: [ecs-tasks.amazonaws.com]
            Action: ['sts:AssumeRole']
      Path: /
      Policies:
        - PolicyName: AmznECSTaskExecutionRolePolicy
          PolicyDocument:
            Statement:
            - Effect: Allow
              Action:
                # ECS tasks to download images from ECR
                - ecr:GetAuthorizationToken
                - ecr:BatchCheckLayerAvailability
                - ecr:GetDownloadUrlForLayer
                - ecr:BatchGetImage
                # ECS tasks to upload logs to CloudWatch
                - logs:CreateLogGroup
                - logs:CreateLogStream
                - logs:PutLogEvents
                - logs:DescribeLogStreams
                # ECS tasks to use DynamoDB
                - dynamodb:Batch*
                - dynamodb:Delete*
                - dynamodb:DescribeTable
                - dynamodb:GetItem
                - dynamodb:PutItem
                - dynamodb:Update*
              Resource: '*'

И ниже указана конечная точка VPC для DynamoDB:

DynamoDBVpcEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      VpcId: !Ref VPC
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.dynamodb"
      VpcEndpointType: Gateway
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action: '*'
            Principal: '*'
            Resource: '*'
      RouteTableIds:
        - !Ref VPCPrivateRouteTable1
        - !Ref VPCPrivateRouteTable2

Я также убедился, что таблица маршрутов для частных подсетей содержит пару для конечной точки DynamoDB.

Любая помощь будет принята с благодарностью!Спасибо.

...