我正在使用我的Heroku实例使用Amazon RDS Postgres,因为它更具成本效益。但它有多安全?有人不能只登录我的数据库吗?他们不能只是窥探交通吗?它是不是比我使用Heroku的标准Postgres更安全?加密是否足够好?
仅供参考:没有办法强制在RDS上使用带有postgres的SSL
我正在使用以下方案进行连接:
postgres://randomusername:longpassword@url:myport/databasename?sslrootcert=path_to_cert&sslmode=requ
答案 0 :(得分:7)
但它有多安全?有人可以登录我的数据库吗?
不是没有密码(假设你正在使用MD5 auth),它只以散列形式传输。这并不特别强烈;没有双向握手,而且很容易发生重播攻击。所以你也应该使用SSL。
他们只能窥探流量吗?
如果您使用SSL,则不应该这样做。攻击者必须能够拦截流量,所以即使你明确地发送你的流量,它也不会像Joe Average那样偷看。
与使用Heroku的标准Postgres相比,它是不是更安全了?
只要您使用SSL连接,可能大致相同 - 但请注意,我并不是Heroku架构方面的专业知识。
最重要的是,如果Heroku使用安全组隔离应用程序dynos和数据库节点,以便数据库节点无法与外界通信或从任何地方接收连接除了dynos。他们不这样做,因为您可以通过SSL直接连接到您的数据库。
加密是否足够好?
如果您正在使用MD5密码验证,请不要。你应该使用SSL。
仅供参考:没有办法强制在RDS上使用带有postgres的SSL
不是服务器端(这是愚蠢的,它们应该允许您在hostssl
中配置hostnossl
和pg_hba.conf
条目)但是您可以强制它在客户端,就像您在示例连接设置。
您可以直接使用EC2实例,您可以根据需要配置PostgreSQL。它比使用RDS便宜,但你必须管理自己的备份,复制等。
我在我的Heroku实例中使用Amazon RDS Postgres,因为它更具成本效益。
有趣的是,Heroku的数据库服务也基于AWS EC2。
安全提示:
不要为您的应用程序使用超级用户帐户。超级用户只能手动用于设置。
如果可能,您的申请帐户不应拥有这些表格;您应该使用其他帐户来运行DDL。如果您的应用使用最少权限帐户进行正常操作,则可以限制攻击者可以执行的操作。
如果可以,请将您的数据库放在只能由Heroku应用程序服务器和您的个人ISP访问的EC2安全组中。这限制了诸如密码暴力攻击,DoS尝试等之类的事情(这可能是不可能的;您需要知道Heroku dynos的EC2安全组ID,或者他们知道的IP范围使用)。
为应用程序用户使用长期随机生成的密码
使用SSL,除非您是在严密访问控制的网络上。如果您没有使用RDS,我会告诉您在hostssl
中使用pg_hba.conf
条目,因此只会拒绝非SSL连接。由于您正在使用RDS,因此您必须确保客户端。
(与RDS不太相关,但是):立即应用补丁发布。当9.2.10出局时,不要再运行9.2.2。在RDS上,这意味着在更新可用时,会立即重新启动实例。