我知道我需要配置 RDS 安全组以允许来自 EC2 安全组的连接。
我有一个在默认安全组中运行的 EC2 实例。因此我将 EC2 安全组添加到 RDS DB 安全组。当我尝试使用 mysql 客户端从我的 EC2 实例进行连接时,它给出了以下错误:
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxxx.xxxx.us-east-1.rds.amazonaws.com' (110)
我使用的命令是:
mysql -udbuser -p -hxxxx.xxxx.us-east-1.rds.amazonaws.com
我发现这个帖子和我遇到的问题一模一样,但没人回答
https://forums.aws.amazon.com/message.jspa?messageID=328603
我可以添加 CIDR/IP 规则,并且在我的笔记本电脑上工作正常。但是,我真的需要将我的 ec2 实例与我的 rds 连接起来。在此先感谢您的帮助。
答案1
我已通过将我的 EC2 服务器的公共 IP 地址添加到 DB 安全组默认策略来解决此问题。
答案2
为了扩展 Yuzhou 的答案,并回答 Amit 的问题,你可以创建新的安全组使用您的 EC2 实例的相应 IP 范围/子网。您可以使用确切的 IP,或使用您的 VPC 的子网作为范围。
创建后,您可以在管理控制台中右键单击您的 RDS 实例并选择“修改”。从那里,您可以更改关联的安全组。
答案3
Yuzhou Zhu 给出的答案是可行的,但更好的选择是将 EC2 实例的安全组添加到 RDS 数据库的安全组。在这种情况下,即使您不使用弹性 IP,在停止/启动 EC2(这可能会更改实例的公共 IP)后,您的解决方案仍将有效。
答案4
要扩展 mok 的答案,您需要指定将传入请求发送到 RDS 的源客户端> 源可以以安全组或 IP 的形式指定。就我而言,在开发过程中,我希望允许从任何地方访问,以便我可以从笔记本电脑进行故障排除。在发布生产之前,我将源更改为与 EC2 实例关联的安全组。之前我完全省略了源,因此我的 RDS 安全组无法创建,尽管是悄无声息的,这让问题更加神秘。以下是我的 CloudFormation 模板中的相关代码片段,
MyDatabaseSecurityGroup:
DependsOn: [MyVpc]
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Security group for Amazon RDS cluster
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
# TODO: After development phase completes, restrict access from EC2 only
# as opposed to the entire world by uncommenting below line
# and commenting out the one after it
#SourceSecurityGroupId: !Ref MyWebSecurityGroup
CidrIp: 0.0.0.0/0
VpcId: !Ref MyVpc