【问题标题】:Fargate service not respecting security groupsFargate 服务不尊重安全组
【发布时间】:2020-09-29 21:22:12
【问题描述】:

当通过安全组限制其入口时,我无法从 Fargate 容器连接到 RDS 实例。不过我可以连接 lambdas。

容器在访问 SQS 或 Internet 时没有问题。只有到达 RDS 端点的问题。

这是模板的摘录,其中数据库入口是打开的。 Fargate 可以毫无问题地连接。

  Service:
    Type: AWS::ECS::Service
    Properties:
      ServiceName: !Ref ServiceName
      Cluster: !Ref Cluster
      TaskDefinition: !Ref TaskDefinition
      PlatformVersion: 1.3.0
      DeploymentConfiguration:
        MinimumHealthyPercent: 100
        MaximumPercent: 200
      DesiredCount: 0
      LaunchType: FARGATE
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: DISABLED
          Subnets:
            - !Ref PrivateSubnet1
          SecurityGroups:
            - !Ref DatabaseAccessSecurityGroup

  DatabaseInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      Engine: mysql
      EngineVersion: 8.0.16
      AvailabilityZone: !GetAtt PrivateSubnet1.AvailabilityZone
      PubliclyAccessible: false
      ...
      VPCSecurityGroups:
        - !Ref DatabaseSecurityGroup

  DatabaseSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: Cloudformation managed Db subnet group
      SubnetIds:
        - !Ref PrivateSubnet1
        - !Ref PrivateSubnet2

  DatabaseSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !Ref VPC
      GroupName: database-sg
      GroupDescription: Database security group
      SecurityGroupIngress:
        - Description: Access to RDS
          # allowing all works with Fargate
          CidrIp: 0.0.0.0/0
          FromPort: 3306
          ToPort: 3306
          IpProtocol: tcp

  DatabaseAccessSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: database-access-sg
      GroupDescription: Security group for accessing db
      VpcId: !Ref VPC



但是,如果我将 DatabaseSecurityGroup 组入口更改为仅允许通过 DatabaseAccessSecurityGroup 入口,我在尝试通过 Fargate 连接时会出错。使用相同安全组的 Lambda 没有问题。

   SecurityGroupIngress:
     - Description: Access to RDS
       CidrIp: 0.0.0.0/0
       SourceSecurityGroupId: !GetAtt DatabaseAccessSecurityGroup.GroupId
       FromPort: 3306
       ToPort: 3306
       IpProtocol: tcp

有什么方法可以让 Fargate 服务遵守安全组规则?

【问题讨论】:

  • Fargate 确实“尊重”安全组规则。您描述的配置对我有用。你确定这里没有其他问题吗?
  • 如果这对您有用,那么这里肯定还有其他问题。我可以寻找什么?该容器可以访问开放的 Internet 和 SQS。使用相同安全组的 Lambda 可以访问数据库,但 Fargate 容器不能。
  • 这些 Lambda 是否在 ECS Fargate 任务正在运行的同一子网中的同一 VPC 中运行?
  • 我检查了这些。相同的子网和 vpc。但我意识到与我的 Fargate 任务关联的 eni 没有更新的安全组(没有数据库访问权限)!仍在寻找解决方案,但我想我找到了问题所在。
  • 您的DatabaseAccessSecurityGroup 没有任何入站规则。

标签: amazon-web-services aws-fargate


【解决方案1】:

之所以出现此问题,是因为我在 Cloudformation 模板中使用了 Service,但通过 ecs.runTask 启动任务,这覆盖了 Service 中的安全组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-04
    • 2019-02-28
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多