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 部分中,我介绍了在默认情况下, ...
随机推荐
- iOS创建本地通知和删除对应的通知,工作日通知
本文的代码主要是:创建本地通知,删除对应的本地通知,创建工作日闹钟 直接上代码: // // ViewController.m // LocalNSNotification // // Created ...
- Rsync、Unison及DRBD的比较
一.Rsync Rsync(remote synchronize),顾名思义,可以知道这是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的 “Rsync算法”来 ...
- 一个Java程序的执行过程(转)
我们手工执行java程序是这样的: 1.在记事本中或者是UE的文本编辑器中,写好源程序: 2.使用javac命令把源程序编译成.class文件: 编译后的.class(类字节码)文件中会包含 ...
- 多线程之线程通信条件Condition
Condition是Locks锁下的还有一种线程通信之间唤醒.堵塞的实现.它以下的await,和signal可以实现Object下的wait,notify和notifyAll的所有功能,除此之外改监视 ...
- javascript每日一练(十四)——弹性运动
一.弹性运动 运动原理:加速运动+减速运动+摩擦运动: <!doctype html> <html> <head> <meta charset="u ...
- Android:ViewPager04
目录结构层次: 注意点: 1.MyAdapter.java一定要 extends PagerAdapter 2.MyAdapter要覆写以下几个方法: a.public int getCount(){ ...
- [转]php连接postgresql
首先推荐一下postgres数据库,免费,强大,甚至某些方面比商业数据库还要好,大家可以试试. 安装: 附安装图解(网上找的):http://blog.sina.com.cn/s/blog_5edb7 ...
- 演练5-6:Contoso大学校园管理系统6
在上一次的教程中,我们处理了关联数据问题.这个教程演示如何处理并发问题.你将使用Department实体创建一个页面,这个页面在支持编辑和删除的同时,还可以处理并发错误.下面的截图演示了Index页面 ...
- Android圆形图片自定义控件
Android圆形图片控件效果图如下: 代码如下: RoundImageView.java package com.dxd.roundimageview; import android.content ...
- jsp各部分编码的含义
服务器JSP编码 pageEncoding 是jsp文件本身的编码, 第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,(jsp文件的编码,pageEncoding是 ...