Windows Azure 数据安全(清理和泄漏)
免责声明:本文档中所述过程为 2012
年 1
月时起的情况,如有变更,恕不另行通知。
希望将应用程序部署到 Windows Azure 的企业客户(实际上是所有客户)最为关心的就是其数据的安全性。释放磁盘空间并将其重新分配给其他客户时,要确保新的所有者无法读取释放空间后磁盘上原来的数据,在数据保护中这一点有时会被忽视。一个极端的例子是,废弃处理从数据中心移除的驱动器或在其他任务中再次利用。释放之前先使用零或其他模式覆盖释放的空间,是确保这一点最简单的方式。这种覆盖可能会大大影响性能,因此 Azure 与大多数系统一样,会使用更为复杂但更有效的机制。
在本文中,我们将发现 Windows Azure 和 SQL Azure 软件为达到以下目的而实施的做法:防止在删除 Windows Azure 虚拟机实例、Windows Azure 虚拟机驱动器、Windows Azure 驱动器、Windows Azure 存储、SQL Azure 数据或 SQL Azure 实例本身时造成数据泄露或将一个客户的数据暴露给其他客户。这些机制的细节有所不同,但概念均类似,即:不允许任何用户从之前未写入数据的磁盘位置读取数据。
本文中的详细信息由 Windows Azure 首席软件工程师、杰出的安全架构师 Charlie Kaufman 提供。您可以在此处和此处找到
Charlie 的一些著作。Charlie,谢谢你!
关于数据保护的概念
在实践中,磁盘是稀疏分配的。这意味着在创建虚拟磁盘时,不会分配全部的磁盘空间量。而是创建一个表,将虚拟磁盘上的地址映射到物理磁盘上的区域,并且该表最初为空白。客户第一次在虚拟磁盘上写入数据时,将会分配物理磁盘空间并在表中设置标志。我们可以通过下面的一系列图表来了解其概念:
图 1:分配给用户的数据块
在上面的图 1 中,基于两个用户各自的写入请求为他们各分配两个数据块。
图 2:用户释放数据块
在上面的图 2 中,一个用户“删除”数据以释放数据块。数据块标记为可用,其他方面不受影响。
图 3:为用户分配最近释放的数据块
在上面的图 3 中,在新用户请求写入时为其分配最近释放的数据块以及之前未分配的数据块。之前释放的数据块仍然不受影响。实质上,该过程是这样的,当用户请求写入到磁盘时,必须确定已分配给该用户的现有磁盘上是否有足够的空间可存储新数据。如果有,新数据将覆盖现有块中的数据。如果没有,则将分配新的数据块并将数据写入到新块。可在下图中查看该逻辑。
图 4:用户请求将数据写入到磁盘
现在的问题是某个客户可能会读取其他客户已删除的数据,Azure 管理员也可能会读取客户已删除的数据。如果任何人尝试从虚拟磁盘上其尚未写入数据的区域进行读取,则不会为该区域分配物理空间,因此不会返回任何数据。我们可以在下图中查看该逻辑和结果。只有 Azure 管理员可以读取标记为可用的块,但管理员无法借助任何实用程序确定该块之前的所有者。
从概念上说,这适用于对读取和写入进行跟踪的任何软件。对于 SQL Azure,由 SQL 软件执行此操作。对于 Azure 存储,由 Azure 存储软件执行此操作。对于 VM 的非持久驱动器,由主机操作系统的 VHD 处理代码执行此操作。由于客户软件只能访问虚拟磁盘(从虚拟地址到物理地址的映射发生在客户 VM 之外),因此无法对已分配给其他客户的物理地址或闲置的物理地址发出读取或写入请求。
注意:在某些情况下,写入逻辑(参见图 4)会被修改, 第二次写入块时不会覆盖磁盘上的数据。反之,会分配一个新的块并将数据写入该新块中。旧的块将被标记为可用。这种方法通常称为基于日志的文件系统。也许听起来效率不高,但通过这种方法可将大部分数据写入到物理磁盘上的连续位置,可最大限度地减少寻找时间并实现更好的性能。这些细节对客户是透明但相关的,因为它意味着即使客户在释放磁盘之前使用零显式覆盖虚拟磁盘上的每一个块,那也不能保证客户的数据不会仍存在于物理磁盘上。
Windows Azure 虚拟机 (VM)
删除 VM 后,原本存储其本地虚拟磁盘内容的磁盘空间会标记为可用,但并未完全清零。该空间最终将用于存储其他 VM 的数据,但并未规定过期内容留在磁盘上的时间上限。但是,虚拟化机制是为了确保再次写入数据之前其他客户(或同一客户)无法读取磁盘上的这些点,从而确保不会产生数据泄漏威胁。为 VM 创建新的虚拟磁盘后,虚拟磁盘看似已经清零,之所以会造成这种假象是因为在读取未写入的虚拟磁盘区域时, 我们总是返回零。如果对 VM 实例进行重新初始化,则相当于是将其移动到新的硬件。
Windows Azure VM 驱动器和 Windows Azure 驱动器 (X-Drive)
在 Windows Azure 中,VM 实例可以访问的虚拟驱动器有两种。计算节点的本地磁盘, 即 Web role 和 Worker role 中的 C: 盘、D: 盘和 E: 盘。这些盘上的数据并非以冗余方式存储,必须将其视为短暂性数据。如果发生硬件故障,则会将 VM 实例移动到其他节点,虚拟磁盘的内容将重置为初始值。如果对 VM 实例进行重新初始化,则 C: 盘、D: 盘和 E: 盘将恢复为初始状态,这相当于是将其移动到新的硬件。
Windows Azure 驱动器(也称为“X-Drive”)被存储于 Windows Azure 存储中的 Blob。X-Drive 是持久性的,除非客户采取显式操作将其更换,否则不会被重置。此数据以冗余方式存储,即使发生硬件故障也不会丢失。删除 VM 实例不会删除关联的 X-Drive 中的数据。删除 Blob 本身(或删除包含 Blob 的存储帐户)才会删除 X-Drive。请参阅下一节,其中说明了如何处理 Windows Azure 存储中的数据删除。
Windows Azure 存储(表、Blob、队列)
在 Windows Azure 存储子系统中,一旦调用删除操作,则客户数据将不可用。所有存储操作(包括删除)旨在立即实现一致。成功执行删除操作将删除相关数据项的所有引用,并且无法通过存储 API 对其进行访问。删除的数据项的所有副本最终都将被回收。当关联的存储块重新用于存储其他数据时,物理信息将被覆盖(即重新初始化),就像标准的计算机硬盘驱动器一样。
SQL Azure
在 SQL Azure 中,删除的数据标记为删除,但不会被清零。如果删除了整个数据库,则相当于删除了其全部内容。在任何情况下,SQL Azure 实现均可通过禁止对基础存储的所有访问(除非通过 SQL Azure API)来确保使用过的数据不被泄露。该 API 允许用户读取、写入和删除数据,但绝不允许用户读取之前未写入的数据。
自动备份和取证
通常情况下,客户希望确保他们的数据不会在未经授权的情况下被访问。在某些情况下,他们甚至希望确保已删除的数据不会在未经授权的情况下被访问。数据一旦删除或更改,就无法再通过提供给客户的接口进行检索,但这些数据可能会在相当长的时期内继续保留在磁盘上,并且理论上可使用内部取证工具对其进行恢复(但已删除的数据存在的可能性会随着时间而降低)。最终,从生产环境删除的任何物理磁盘都将完全清除或销毁。
我们正在考虑在不久的将来推出一些功能,使客户无需进行显式备份即可恢复已删除的数据(以及还原已更改的数据)。使用这些工具就无法完全向客户保证这些数据在删除后不会被得到授权的相关方访问。任何此类工具都只能在有限的时间内(不超过 30 天)检索已删除的数据,除非客户选择更长的备份时间。撰写本文时,有一些未公开的工具,可允许在 14 到 21 天内恢复从 SQL Azure 数据库中删除的数据。对于 Azure 存储或 Azure 计算临时磁盘,尚无此类工具。
本文翻译自:
http://blogs.msdn.com/b/walterm/archive/2012/02/01/windows-azure-data-cleansing-and-leakage.aspx
Windows Azure 数据安全(清理和泄漏)的更多相关文章
- Windows Azure 安全最佳实践 - 第 7 部分:提示、工具和编码最佳实践
在撰写这一系列文章的过程中,我总结出了很多最佳实践.在这篇文章中,我介绍了在保护您的WindowsAzure应用程序时需要考虑的更多事项. 下面是一些工具和编码提示与最佳实践: · 在操作系统上运行 ...
- Windows Azure HandBook (3) 浅谈Azure安全性
<Windows Azure Platform 系列文章目录> 2015年3月5日-6日,参加了上海的Azure University活动.作为桌长与微软合作伙伴交流了Azure相关的技术 ...
- Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的China Azure. 我们在创建完Windows Azure Virtual Machi ...
- 连接到Windows Azure Point to Site VPN
Windows Azure支持两种模式的VPN接入: Site to Site,接入端需要有固定的公网IP地址,用于连接局域网和Windows Azure的虚拟网络. Point to Site,客户 ...
- 第三章 设计程序架构 之 设计实现Windows Azure 角色生命周期
1. 概述 Windows Azure 是微软的云计算平台.用于 在微软数据中心 通过全局网络 生成.发布和管理应用程序. 本章内容包括 startup tasks 以及 实现 Start, Run ...
- 关于Windows Azure的常见问题-一般问题FAQ
一般问题 什么是Windows Azure? Windows Azure 是一个灵活而开放的云平台,通过该平台,您可以在数据中心快速生成.部署和管理应用程序.Windows Azure 支持所有主流操 ...
- Windows Azure 基本操作手册
http://www.cnblogs.com/sennly/p/4139663.html 基本测试信息 登陆地址:https://manage.windowsazure.cn(Azure管理门户,适用 ...
- Windows Azure案例分析: 选择虚拟机或云服务?
作者 王枫 发布于2013年6月27日 随着云计算技术和市场的日渐成熟,企业在考虑IT管理和运维时的选择也更加多样化,应用也从传统部署方式,发展为私有云.公有云.和混合云等部署方式.作为微软核心的公有 ...
- Windows Azure 上 Linux VM 中的交换空间 – 第 2 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 在前一篇文章 Windows Azure 上Linux VM 中的交换空间第 1 部分中,我介绍了在默认情况下, ...
随机推荐
- Android经常使用UI组件 - TextView
TextView是Android里面用的最多的UI组件,一般使用在须要显示一些信息的时候,其不能输入,仅仅能初始设定或者在程序中改动. 实例:TextViewDemo 执行效果: 代码清单: 布局文件 ...
- CSS的三种样式:内联式,嵌入式,外部式以及他们的优先级
从CSS 样式代码插入的形式来看基本能够分为下面3种:内联式.嵌入式和外部式三种. 1:内联式css样式表就是把css代码直接写在现有的HTML标签中,如以下代码: <p style=" ...
- Android中activity保存数据和状态在哪个方法实现
以前只知道在Activity销毁之前,要把数据保存在 onSaveInstanceState(Bundle)方法中,后来学习了别人的微博,学到了很多细节问题,所以整理了一下,希望能帮到大家. 如果看官 ...
- Xcode5 创建模板和UIView 关联XIB
转自:http://www.cnblogs.com/china-ldw/p/3533896.html 在做ios应用开发的过程,难免遇到要创建 子view 和 自定义view的时候,归根到底,我们需要 ...
- java实现从实体到SQL语句的转换(二)
前面写过一篇生成insert语句的博客,今天把CRUD的都完善了一下,需要的上次写的获取实体信息的类,这里就不贴出来了[点击打开查看] 下面是完整的代码: package tan.code.utils ...
- mongodb进阶一之高级查询
上篇文章我们讲了mongodb的crud基本操作 http://blog.csdn.net/stronglyh/article/details/46812579 这篇我们来说说mongodb的进阶-- ...
- LVM的一般操作过程
1. 在磁盘分区上建立物理卷 #fdisk /dev/hdb #pvdisplay /dev/hdb1 //在已经建立好的分区或硬盘上建立物理卷 #pvcreate /dev/hdb1 2 ...
- Office 2010 垃圾邮件过滤设置
垃圾邮件过滤设置 有同事反馈给我,某些时候应该收到的邮件,却到了垃圾邮件里,给工作带来了不便,下面简单介绍一下outlook 2010 有关垃圾邮件的过滤设置. 1: 找到相关的邮件,点右键,在”垃圾 ...
- UVa 10330 Power Transmission / 最大流
最大流 这题有很多起点和终点 在取2个点(0和n+1) 作为唯一的起点和终点 此外每个点也有容量限制 建图时每条边上的容量为这条边和2个端的容量的最小值 然后EK就行 #include <cst ...
- python binary lib on win/各种python库的二进制包
虽然很不愿意在windows上折腾python,但有时linux不在身边的时候还得在windows上写代码.很久之前找到这个地址,后来忘了,今天搜了半天才把它找到,所以记录一下. http://www ...