我有一个数据库服务器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之后的第二道防线。