[为一个漫长而漫无边际的问题道歉。我希望能引起一些比我更有知识的人的讨论/建议。如果这真的不适合SO,请给我一个提示,在哪里提出这类问题。]
我有一个ASP.NET MVC 4应用程序。我正在使用Azure Web角色来托管它(至少目前为止)。我的应用程序是一个专门的医疗访谈,收集用户的敏感信息,并生成一份报告,该报告可通过医生和患者查看并通过附加到未加密电子邮件的加密PDF文件传送给医生和患者。敏感数据保留24小时,以便医生回来检索报告,之后记录被删除(我知道实际上并没有从持久存储中删除数据)。
所以我开始思考我需要担心的安全边界,以保密机密数据。虽然我是一位非常有经验的桌面应用程序开发人员,但我对这整个网络编程都很陌生。
我需要担心的第一个明显的安全边界是服务器和用户之间的通信层。我有一个有效的,配置正确的SSL证书,并且处理登录用户的网站的所有部分(包括访谈和报告工作流)都在HTTPS端点上运行。
我假设/希望Azure的SSL实现正确,并且我无法或应该采取任何措施来加强主机本身。
为方便用户,我允许访问者浏览到http://mywebsite.com,并在登录时重定向到标有[RequiresHttps]的页面。我知道这种HTTP到HTTPS的重定向是易受SSLStrip man-in-the-middle attack攻击,其中服务器看到安全的HTTPS连接,但警惕的用户会注意到URL是HTTP而不是HTTPS。我计划保留这个便利功能,但我会通过使用扩展验证证书来缓解它,这为大多数用户提供了一个快乐的绿色地址栏。我会在主登录用户页面上放置一些内容,提醒用户验证绿色地址栏。
我将弄清楚如何配置ASP.NET以便我的所有cookie都被加密。
我启用了远程桌面(在Azure部署向导中),这样就可以打开一个门户,如果有人可以找出我的用户名和密码,可能会受到攻击。 C'est la vie。
我需要担心的下一个安全边界 - 这是我需要帮助的地方 - 在未经授权的人获得对数据库的访问权限时保护敏感数据。我对数据库管理的了解非常局限于复制和粘贴连接字符串以及编写简单的SQL查询。
我正在使用Entity Framework和Azure SQL数据库来处理我的所有数据库内容。我使用烘焙到我的代码中的密钥加密数据实体中的敏感数据。据推测,数据库本身是加密的,只是掌握数据库文件的人(Azure SQL数据库接口可以通过Web连接访问,但只能从可信的IP地址访问)需要找出我的SQL用户名和密码来拉取数据库文件数据输出。
有人可能会欺骗我的应用来泄露敏感信息。我的工作流程只允许登录用户读写自己的记录。为了让攻击者能够访问加密的敏感数据,他们需要获取我的加密密钥或找出一种方法来调用我的代码。我没有混淆.NET代码; 我认为我的可执行文件是安全的。我还假设我的包含我的数据库凭据的明文web.config是安全的。这些是好的假设吗?
所以,就我的初学者大脑而言,这已经把我带到了安全的道路上。有什么意见或建议吗?我做了任何不正确的假设或忽略了任何明显的假设吗?
答案 0 :(得分:1)
很多这与非Azure相关。让我从Windows Azure的角度讨论几点。
存储数据:我建议将加密的pdf移动到blob存储。然后,您可以为加密的pdf提供链接,而不是附加加密的文件本身。另外,你可以制作blob(存储pdf)私有,这样就无人可以了。然后,创建共享访问签名,实质上是具有时间限制权限的特殊签名URL。然后,您可以设置24小时阅读窗口。通过电子邮件提供此链接,并在接下来的24小时内,可以下载并(使用正确的密码)解密。 24小时后,链接停止工作。你也可以删除那一点的blob(是的,它会消失)。
使用RDP,您需要选择一个非常好的密码。除了RDP之外,我看不到有人可以访问您的Web角色实例。
使用Windows Azure SQL数据库,我建议不要让外部世界访问它。只是限制对Windows Azure服务的访问。 Windows Azure SQL数据库 NOT 对数据进行加密,也不支持加密字段。您需要自己进行加密。
更大的问题您需要回答:您可以将医疗信息存储在云中吗?您是否违反了任何类型的合规或法律规定?你需要做这个功课并弄明白。明确数据是引起关注的问题,合规性方面(我不是律师,因此我不会在此提出任何建议)。使用Windows Azure,您可以获得已签名的BAA,这意味着如果您使用的是Windows Azure计算和存储,则可以实现与您的应用程序的HIPAA合规性。目前,Windows Azure SQL数据库不属于HIPAA合规性窗口。有关合规性的详细信息,请参阅Windows Azure Trust Center。
答案 1 :(得分:0)
安全性中最重要的是智能配置和信任。这是两个不同的东西,两者都是任何架构所必需的。
回归技术。
Azure云服务:您说您将使用基于https的SSL站点。这是第一次设置安全性而且有效。除此之外,请确定follow the best practices.
Azure SQL数据库:您可以使用防火墙规则保护/保护Azure SQL数据库。当您要将数据库连接到Azure云服务时,您可以单独允许Microsoft Azure服务,即只能从云访问。因此整个数据库完全密封到外部世界。在设置或维护期间,您可以启用本地IP以使用数据库,然后您可以再次删除该访问权限并还原到仅限云模式。 Azure默认情况下没有加密工具。还有一个很好的强密码。
远程桌面:使用较短时间的安全证书。不要通过RD对您的应用进行任何更改,请进行干净的重新部署。如果通过RD对您的应用程序进行任何修改,则在任何数据中心活动期间将丢弃所有更改,因为结构控制器可能会拉下实例并在不同位置重新启动。
Azure实施了大量认证和合规性。这确实是世界级的云服务。