如果资讯代表黄金,那资料库就意味着宝库。Web应用程式会将其最有价值的资料保存在资料库中,如果该资料遭盗取或删除,将会有许多网站就此消失。本篇文章为您提供资料库安全的最佳实践法则,保护您架设在GCP上的资料库。
资料库的安全机制远在第一笔纪录被储存进资料库之前就被启动,所以在设计主机环境时,必须考虑到整体环境对资料库安全性的影响。资料库本身和外部环境都有很多需要考虑的事情,无论是防火墙规则的设定或是日志的纪录。
首要考虑
提到资料库安全性时,其中一个基本决策需要思考的是:自行部署资料库伺服器,还是使用Google的托管服务?这个决定视您现有的架构、员工的技术能力、企业政策和专业功能需求而定。
在缺乏一定要自行架设资料库的理由之下,我们建议的是采用托管的方式处理。托管的资料库服务在设计上是能处理Google级别的资料规模,并同时拥有Google的安全模型优势。采用共同责任模式可以让那些需要遵守PCI、SOX、HIPAA、GDPR和其他法规的企业组织大量减少其耗费的精力。即使不是每个企业组织都需符合这些法规,但我们还是建议以PCI SAQ A(支付卡行业自我评估问卷A类)作为最佳实践的基准。
存取控制
您应该尽可能对资料库的存取进行限制。自行架设的资料库应该透过VPC防火墙规则对存取加以限制,让只有经过授权的主机可以存取资料库。所有非特定需求的端口(port)和端点(endpoint)应该被禁止。如果可以的话,请确保对防火墙的更动都能记录下来,并为非计画中的更动增加警报通知。在GCP的防火墙规则中,这些都会自动设定。像Forseti Security这类的工具可以监控并管理资料库的安全配置,不论是使用Google资料库托管服务或是自行架设在Google Compute Engine虚拟机器的资料库都适用。
在准备启动资料库时,还须考虑其执行环境。对于托管的资料库服务,可以透过服务帐户自动更新密钥来简化对资料库的授权,对于那些自行架设在GCP上的资料库您可以使用云端密钥管理系统 (KMS)来进行密钥更新管理。
资料安全
在实施计画时,请不要遗漏了资料保存政策这件事情。您有义务将未使用的敏感资料归档或缩减。许多法规提供了具体指南来识别哪些是敏感资料。(如:HIPAA、PCI、GDPR、SOX)。您可能会发现从悲观安全模型(pessimistic security model) 的角度来思考是有帮助的,悲观安全模型假设您的应用程式将被破解且您的资料库将被泄露。这有助于您在资料保存、静态加密等方面的政策做出一些决定。
假设最坏的情况发生且您的资料库受到损害,您应该收到有关意外事件发生的警报通知,例如网路流出流量达到峰值的事件。藉由使用“canary”资料可能也对你的组织有帮助–所谓的“canary”资料是在正常情况下在现实世界中永远不会看到的应用程式特制讯息。您的应用程式应设计成可以察觉出有canary帐户登入,或有canary数值在网路上流通。如果找到canary,您的应用程式应向您发送警报通知并立即采取措施以阻止可能的危害。在某种程度上,canary资料类似于零售商店的防盗标签。这些安全设备具备检测特性,可以隐藏在产品内部。具有安全意识的零售商将在其商店中设置传感器,以检测未经授权的库存清除操作。
您应该开发并测试一项灾难复原的计划。建立资料库副本仅能解决某些故障造成的问题,但不能解决资料被窜改甚或删除的问题。一个好的灾难复原计画能让你复原资料库,即时遭受到资料遗失,硬体失效,网路不可用以及其他任何你可以预期的灾难事件。跟以往相同的是,必须定期测试和监控备份系统,以确保能从灾难事件后复原。
配置
如果您部署的资料库使用预设登入帐户,则您的首要任务应先更改或停用该帐户。此外,如果您的任何资料库帐户受密码保护,请确保这些密码够长且复杂;不要使用简单或空密码。如果您可以用云端KMS,那KMS肯定是您的首选。此外,请务必制定凭证更新计划并制定非周期性密钥更新的标准。
无论您使用哪种方法进行身份验证,都应该为不同权限,如读取、写入、最高管理,准备不同凭证。即使应用程式同时执行读取和写入操作,个别的凭证也可以限制错误代码或未经授权的存取所造成的损坏。
每个需要存取资料库的人都应拥有自己的私人凭证。分别为每个不同的应用程式创建服务帐户,并仅提供该服务所需的权限。云端身份识别与存取管理(IAM)是一种用于管理GCP用户权限的强大工具;应避免使用通用的管理员帐户登入,因为它们掩盖了用户的真实身份。用户凭证应将权限限制为履行其工作所需的最低权限。例如,一个专门制作资料报表的用户不应该具有能修改资料库纲要的权限。考虑透过检视表(view)、预存程序(stored procedure)、细化权限来进一步限制对用户需要知道的内容的存取,并进一步减少SQL资料隐码攻击(SQL injection)的漏洞。
日志的纪录是任何应用程式的关键部分。资料库应该要为所有关键事件产生日志,尤其是登入和管理操作的记录。这些日志应整合在与资料库不同主机环境的日志服务中,而且该日志服务是不可抹除与窜改的。无论是使用Stackdriver还是其他服务,对日志的凭证和读取存取权限都应与资料库凭证完全分开。
无论如何,您应该装备可以检测和阻止尝试暴力登入的监控系统或代理设备。如果您正在使用Stackdriver,则可以搭配Cloud Function webhook设置警报规则,用以追踪近期的登入尝试纪录,并主动建立防火墙来阻挡可能的滥用。
资料库应该要使用特定应用程式的帐户来操作,而不是root或admin。应该使用适当的文件权限和拥有权来保护主机文件,以防止未经授权的执行和更改。符合POSIX标准的操作系统提供chown and chmod来设置文件权限,Windows服务器也提供了几种工具。诸如Ubuntu的AppArmor等工具甚至更进一步将应用程式限制在一组有限的资源中。
应用程式注意事项
在设计应用程式时,一个重要的最佳实践法则是在存取资料库时使用加密连线,这能降低网路被监听时,无意间泄漏资料或凭证的可能性。Cloud SQL用户可以使用Google’s encrypting SQL proxy。某些加密方法还允许您的应用程式对资料库主机进行身份验证,以减少冒充或中间人攻击的威胁。
如果您的应用程式处理特别敏感的讯息,应该首先考虑是否有保留所有资料的需要。在某些情况下,处理这种敏感的资料,会受到法规所约束,在这种情况下,法规会代替您决定是否需要保留所有资料。即便如此,额外的控制措施是要非常谨慎的,以确保资料的安全性。除了自动静态加密之外,或许还可以在应用程式级别加密某些资料。如果你所需要知道只是:将来是否再次显示相同资料,您可以将资料转换成杂凑值。如果需要使用资料来训练机器学习模型,请参考有关在机器学习中管理敏感资料的文章。
应用程式的安全性可以被用来加强资料库资料的安全,但不至于能用来取代资料库安全。对于任何传送到资料库的输入资料,无论是欲储存的资料,还是用于查询的参数,都必须透过安全措施处理。所有应用程式的代码都应进行同侪审核。针对像是SQL资料隐码攻击(SQL injection)和跨网站指令码攻击(XSS)等常见漏洞的安全扫描应该是自动执行并且定期运行。
拥有资料库存取权限的人,其所使用的电脑都应遵守组织安全策略。资安史上一些最惨烈的案例是来自于恶意软体、怠于更新、错误处理的可携式资料存储设备的影响。一旦工作站被传染,它触及到的其他每个系统都可能被传染,这也适用于印表机,复印机和任何其他连接设备。
不论是什么情况,都不要将未经过处理的生产环境的资料用于开发或测试环境中。这一规范不仅提高资料库安全性,且可以降低非生产环境不经意发送电子邮件、计费、更改状态等的可能性。
自行架设资料库的问题
虽然Google 的共享责任模型能让托管资料库的使用者降低一些安全疑虑,但却不能提供自架资料库所拥有的完整的资料库控制权。在自行架设资料库的情况下,资料库管理者有责任确保能够防范不同的攻击。
如果您正在运行自行架设的资料库,请确保该服务在其自己的主机上运行时,不要同时运行其他应用程式的功能。资料库不应该与Web 主机、其他Web 可存取的服务共享主机。如果无法做到这一点,则服务和资料库应驻留在共享的受限网路中,并且让越少的其他主机存取。逻辑主机是运行应用程式本身的最低级别的主机或虚拟主机。在GCP 中,这可以是容器或虚拟机,而在地端环境中的逻辑主机可以是实体机、虚拟机、容器。
一个常见自行架设资料库的使用案例是在混合云中进行备份。例如,部署混合云资料库可以在云端中拥有主本及一至多个副本,并同时在地端备份。在这种情况下,请勿将资料库连接到公司LAN或其他广泛可用的网路。同时,应确认本地硬体安全性无虞,因此不能被盗或被篡改。适当的实体环境安全机制采用实体环境存取控制,自动产生存取日志和远端影像监控。
自行架设的资料库也需要您经常关注、确保更新。制定软体更新策略并为过期的软体程式设置定期警报通知。考虑使用系统管理( Ubuntu,Red Hat ) 或配置管理工具,可让您轻松对所有资料库实例批量执行操作、监控并升级软体版本以及配置新的资料库实例。确认有持续监控关键档案系统的周期外变更(例如包含配置设定和可执行档的目录)。
有数个规范制度皆建议使用入侵检测系统意即IDS。IDS的基本功能是监控未经授权的系统存取,并立即反应状况。并且有许多可运用的产品能在每个服务器上运作,也能在专属网域主机上运行。在IDS中的选择,可能会受到公司或应用程式特有的因素而影响。IDS还可以用作canary资料的监控系统。
所有资料库都有特定的控制设定,您必须调整这些设定以强化服务。您应阅读资料库制造商所写的文章,以取得加强伺服器安全性和软体安全性的建议。在下方的延伸阅读中放置了几个常用的加强资料库安全的指南连结。
应尽可能的加强底层作业系统的安全性,并停用对资料库没有帮助的应用程式。您可以透过沙盒化(sandbox)或容器化资料库达到进一步的隔离。
(原文翻译自Google Cloud )



