连接到 ec2 内部的 mysql

连接到 ec2 内部的 mysql

我有一个数据库服务器db.example.comCNAME 到它的外部 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 总是相同的

答案1

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

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

答案2

EC2 防火墙究竟会通过/拒绝什么取决于安全组的设置。希望默认安全组配置为拒绝来自任何不属于同一安全组的计算机(EC2 或互联网)的所有流量。 看看这里一个很好的解释 无论如何,如果您不够小心,很容易错误地将您的 ec2 mysql db 开放到所有互联网......

我也遇到了同样的问题:ec2 mysql 客户端通过其私有 IP 连接到 ec2 mysql 服务器。即使您将弹性 IP 分配给 mysql 客户端也无济于事,因为通信是通过私有 IP 进行的,而私有 IP 每次重启都会更改。也许可以强制 mysql 客户端通过其公共 IP 接口进行连接。这似乎是可能的,但另一方面,这可能是昂贵的,因为通过 ec2 中的公共 IP 进行通信是付费的!

因此目前我的数据库帐户可从互联网上的任何主机(someuser@%)访问,并且安全性委托给 ip / security-group 访问层。

答案3

我对将我的安全“委托给 ip/安全组访问层”感到有点不舒服。实际上,我不确定这到底意味着什么。

此外,我点不是我认为最好将通配符 mysql 授权保持打开状态,除非我的目标是遭到黑客攻击。

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

答案4

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

相关内容