【发布时间】: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