gpt4 book ai didi

aws-lambda - 我无法通过VPN将mysql客户端连接到RDS

转载 作者:行者123 更新时间:2023-12-04 15:41:05 28 4
gpt4 key购买 nike

我一直在努力使用 AWS RDS。所有网络配置事情都让人非常痛苦,因为我没有网络技能,而且我也不喜欢它。

我的目标是在 RDS 上创建我的 mysql 数据库,能够通过任何 mysql 客户端连接到它,运行我的 SQL 脚本来创建数据库并执行我的 lambda 表达式以将数据插入到该数据库。

所以,

mysql 客户端 --> RDS (mysql) <-- lambdas

它们都需要相互连接。

经过数周的研究,试图了解 AWS 周围的所有网络事物,从一个地方复制到另一个地方的示例。

我有以下场景:

我的云形成模板中有 VPC、公有和私有(private)子网、安全组、EIP、RDS 和 VPN。

我可以正常部署一切,一切似乎都正常。

我可以连接到我的 VPN 并 ping 通我的 EIP 的私有(private) IP。

但我仍然无法将 mysql 客户端连接到 RDS。因此,我无法运行 SQL 脚本,也无法测试 lambda 来查看它们是否真正连接到我的 RDS。

这是我配置的一部分,我猜它可能与问题有关,但正如你可以想象的,我缺乏网络知识,这使得它变得更加困难。

我唯一想到的是 VPN 和 RDS 不属于同一子网。

完整配置:https://gist.github.com/serraventura/ec17d9a09c706e7ace1fd3e3be9972aa

RouteTableDB 始终仅连接到私有(private)子网,而 VPN (ec2) 仅连接到公共(public)子网。

  SubnetRouteTableAssociationPrivateDB1:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId:
Ref: RouteTableDB
SubnetId:
Ref: SubnetDBPrivate1

SubnetRouteTableAssociationPrivateDB2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId:
Ref: RouteTableDB
SubnetId:
Ref: SubnetDBPrivate2

SubnetRouteTableAssociationPrivate1:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId:
Ref: RouteTableDB
SubnetId:
Ref: SubnetPrivate1

SubnetRouteTableAssociationPrivate2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref RouteTableDB
SubnetId: !Ref SubnetPrivate2

RDS、VPN

RDSMySQL:
Type: AWS::RDS::DBInstance
Properties:
AllocatedStorage: ${self:custom.infra.allocatedStorage}
DBInstanceClass: ${self:custom.infra.dbInstanceClass}
Engine: ${self:custom.infra.engine}
DBInstanceIdentifier: ${self:custom.app.dbName}
DBName: ${self:custom.app.dbName}
MasterUsername: ${self:custom.app.dbUser}
MasterUserPassword: ${self:custom.app.dbPass}
DBSubnetGroupName:
Ref: myDBSubnetGroup
MultiAZ: ${self:custom.infra.multiAZ}
PubliclyAccessible: true
StorageType: gp2
VPCSecurityGroups:
- Ref: RDSSecurityGroup
DeletionPolicy: Delete

VPNEIP:
Type: AWS::EC2::EIP
Properties:
InstanceId:
Ref: VPNEC2Machine
Domain: vpc

VPNEC2Machine:
Type: AWS::EC2::Instance
Properties:
KeyName: ${self:custom.infra.ec2KeyPairName.${self:provider.region}}
ImageId: ${self:custom.infra.openVPNAMI.${self:provider.region}}
InstanceType: ${self:custom.infra.instanceType}
AvailabilityZone: ${self:provider.region}a
Monitoring: true
SecurityGroupIds:
- Ref: VPNSecurityGroup
SubnetId:
Ref: SubnetPublic1
Tags:
- Key: Name
Value: ${self:custom.companyName} OpenVPN ${self:provider.stage}

VPNRouteRecordSet:
Type: AWS::Route53::RecordSet
DependsOn:
- VPNEC2Machine
- VPNEIP
Properties:
HostedZoneName: ${self:custom.domains.base}.
Comment: Record for the VPN subdomain
Name: vpn-${self:provider.stage}.${self:custom.domains.base}.
Type: A
TTL: 60
ResourceRecords:
- Ref: VPNEIP

VPNSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow Access From machines to the VPN and Private Network
VpcId:
Ref: VPCStaticIP
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: ${self:custom.app.dbPort}
ToPort: ${self:custom.app.dbPort}
CidrIp: 0.0.0.0/0
Description: 'Postgres Port'
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
Description: 'SSH Port'
- IpProtocol: udp
FromPort: 1194
ToPort: 1194
CidrIp: 0.0.0.0/0
Description: 'OpenVPN Server Access Port'
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
Description: 'OpenVPN HTTPS Admin Port'
- IpProtocol: tcp
FromPort: 943
ToPort: 943
CidrIp: 0.0.0.0/0
Description: 'OpenVPN Server Port'
Tags:
- Key: Name
Value: ${self:custom.companyName} VPN SG ${self:provider.stage}

最佳答案

您的 RDS 实例正在接受来自 LambdaSecurityGroup 的 3306 入站连接,这对于附加了 LambdaSecurityGroup SG 的任何内容都适用,但您还需要允许来自 VPNSecurityGroup 的连接。

将您的 RDSSecurityGroupBlock 更改为如下所示,这样您就可以从 VPN 连接到 RDS:

  RDSSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow My SQL access from lambda subnets
VpcId:
Ref: VPCStaticIP
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '3306'
ToPort: '3306'
SourceSecurityGroupId:
Ref: LambdaSecurityGroup
- IpProtocol: tcp
FromPort: '3306'
ToPort: '3306'
SourceSecurityGroupId:
Ref: VPNSecurityGroup
Tags:
- Key: Name
Value: RDSSecurityGroup

顺便说一句,VPNSecurityGroup 正在接受来自任何地方的 3306、22、1194、443、943 连接。这可能是有意为之,但考虑到这些连接是出于管理目的而公开的,这不是最佳实践。您应该认真考虑将这些端口的 CidrIp 范围限定为受信任的 CidrIp 源,以避免任何潜在的不必要的暴露。您还可以考虑从那里删除 3306 block ,因为似乎没有必要在 VPN 本身上打开该端口。

编辑根据OP的评论,除了上述内容之外,您还需要将 PubliclyAccessible 更改为 False 来解决问题。

关于aws-lambda - 我无法通过VPN将mysql客户端连接到RDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737904/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com