连接到ec2内部的mysql

我有一个数据库服务器db.example.com CNAME'd到其外部ec2域ec2-some-ip.aws.com

我有一个客户端ec2-another-ip.aws.com试图连接到我的db.example.com。 我授予特权:

grant all privileges on *.* to 'some_user'@'ec2-another-ip.aws.com';

并在客户端尝试:

mysql -u some_user -h db.example.com

只有得到:

 ERROR 1130 (00000): Host 'my-client-internal-mac.compute-1.internal' is not allowed to connect to this MySQL server 

所以它显然将其外部域映射到互联网域。 那么如何让mysql让我的客户端在下面给出限制。

注意我不能使用内部IP,因为所有这些服务器都是EBS根挂载的,我开始/停止它们,所以内部IP变化,但我映射一个外部弹性IP每次我旋转起来,所以它的外部IP总是一样的

简单的方法是授予访问someuser@% ,这意味着“来自任何主机的某个用户”。 这会降低安全性,但根据您的设置,可能会足够好。

特别是,如果您的EC2安全设置不允许公共端口3306访问,这应该没问题。 EC2防火墙将只允许您的帐户启动的机器访问。

ec2防火墙通过/拒绝的具体取决于安全组的设置。 希望默认安全组configuration为拒绝来自任何不属于同一安全组的机器(ec2或internet)的所有stream量。 在这里寻找一个很好的解释无论如何,很容易错误地打开你的ec2的MySQL数据库到所有的互联网,如果你不够在意…

我也在努力解决同样的问题:ec2 mysql客户端通过私有ip连接到ec2 mysql服务器。 即使你给mysql客户端分配了弹性IP,它也没有帮助,因为通信是通过每次重启都改变的私有IP完成的。 也许可以强制mysql客户端通过其公共ip接口连接。 这似乎是可能的,但另一方面,它可能是昂贵的,因为通过ec2的公共交stream付费!

所以目前我的数据库帐户是可以从任何主机在互联网(someuser @%)和安全委派给IP /安全组访问层。

把我的安全“委托给IP /安全组访问层”,我感到有些不舒服。 其实,我不确定这是什么意思。

此外,我并不认为这是一个好主意,让通配符MySQL授予打开,除非我的目标是被黑客攻击。

恕我直言,最安全的方法是使用弹性IP,并在MySQL授权表中对IP进行硬编码(ouch,但这是最好的方法)。

使用默认设置,Amazon安全组将阻止其他客户和外部世界连接到MySQL。 如果你有多个实例使用它,并被创build,重新启动等,那么做基于IP的访问控制是不实际的,因为将不断有新的IP。 我能想到的最好的办法是使用%.ec2.internal来过滤任何来自互联网的内容,作为EC2之后的第二道防线。