《Windows Azure Platform 系列文章目录

 

  如果读者使用的是国内由世纪互联运维的Azure China服务,请参考笔者的博文Azure China (4) 管理Azure China Storage Account

  如果需要参考Azure China使用SAS Token的Sample Code,请参考笔者的博文:Azure China (10) 使用Azure China SAS Token

 

  在之前一章的内容中,我们可以了解到:用户可以把文件(比如照片、Word、Excel等)上传到Windows Azure Storage Blob中,然后通过Http匿名访问这个资源。

  但是这样会出现一个问题:我们没有对这个资源进行访问控制

  对于企业级应用来说,信息安全是非常重要的。如果一个企业应用部署到Windows Azure公有云上,文件资源都上传到Azure Storage Blob中,企业外部人员都可以通过Http匿名访问这些资源,显然这个信息安全是远远不够的。那么如何为Blob资源设置访问权限,使得只有经过授权的人才能访问它们呢?这个时候就需要使用Blob Service的功能:Shared Access Policy和Shared Access Signature。

  Shared Access功能首先需要将Container设置为不允许匿名访问的状态,即通过URL无法访问Blob信息。否则的话,Shard Access的功能就没有任何意义了。Shared Access安全机制由一系列定义为Shared Access Policy对象构成。每个Shared Access Policy定义了一种安全访问策略,它包括:

  • Permissions:定义允许对Blob使用的功能。这些功能可以复合设置,即同时拥有一个或一个以上的功能,通过"或"操作来实现。具体的Permission选项包括:
    • None:不允许任何操作
    • Read:允许读取操作
    • Write:允许写入操作
    • Delete:允许删除操作
    • List:允许列举Container下Blob的操作
  • SharedAccessStartTime:Blob允许操作的开始时间,如果不设置这个属性则为当前时间。
  • SharedAccessExpiryTime:Blob可操作的过期时间。

  这样在对Blob或Container进行操作的时候,首先需要获得一个Shared Access Signature。即通过刚才提到的Shared Access Policy创建一个Shared Access Signature,然后将这个Signature附加到访问Blob的url后面,就能够以安全的形式访问这个Blob了。如果超过了Shared Access Policy设定的过期时间,或者执行的操作了允许的范围,那么这个操作将会无法完成。

 

  接下来,请下载我的实例,并且用Visual Studio 2010打开,开始本次的演示。

  

  本次实例的主要功能是:创建不允许的匿名访问的Blob Container,然后把本地的照片上传到这个Container里。最后设置这个Container的访问权限和过期时间。

  核心代码在Default.aspx.cs,分别是:

  1.创建Container的时候,将Container访问级别设置为不允许匿名访问

 private void EnsureContainerExists()
        {
            var container = GetContainer();
            // 检查container是否被创建,如果没有,创建container
            container.CreateIfNotExist();
            
            //设置Container不能被访问
            container.SetPermissions(new BlobContainerPermissions()
            {
                PublicAccess = BlobContainerPublicAccessType.Off
            });
        }

  2.设置获取的访问权限以及过期时间,即对应的Shared Access Policy。由于这个Signature只是为了在后续网页呈现的时候访问Blob内容,因此可以设置以个比较短的过期时间。这样做的好处是,及时而已用看到了这个URL和Signature的内容,超过了时间限制后也无法访问这个Blob了,从而达到了保护照片以及防盗链的功能。设置过期时间为5秒钟,只允许读取权限。然后GetSharedAccessSignature方法将会返回一个字符串,即Shared Access Signature。

 var sas = blob.GetSharedAccessSignature(
                new SharedAccessPolicy()
                {
   //设置权限为读权限 Permissions
= SharedAccessPermissions.Read,
            //设置过期时间为5秒钟 SharedAccessExpiryTime
= DateTime.UtcNow.AddSeconds(5) }); var secureURl = blob.Uri.AbsoluteUri + sas; LblUrl.Text = secureURl.ToString();

  3.启动项目

Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
    




Windows Azure Platform 系列文章目录
Azure China (4) 管理Azure China Storage Account
Azure China (10) 使用Azure China SAS Token

 

  • 点击"浏览",选择本地机器上的照片文件
  • 选择中后,点击 "Upload Image"
  • 上传完毕,会在页面上显示这个图片访问的url

  4.快速选中这个url,在IE浏览器地址中输入,可以查看到上传成功的图片

Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
    




Windows Azure Platform 系列文章目录
Azure China (4) 管理Azure China Storage Account
Azure China (10) 使用Azure China SAS Token

 

  5.如果超过访问时间(5秒)访问这个图片资源,您会得到下图所示的错误信息。

  Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
    




Windows Azure Platform 系列文章目录
Azure China (4) 管理Azure China Storage Account
Azure China (10) 使用Azure China SAS Token

 

  注意:关于Blob Container的配置在CSCFG配置里面,你可以使用VS进行配置

  Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
    




Windows Azure Platform 系列文章目录
Azure China (4) 管理Azure China Storage Account
Azure China (10) 使用Azure China SAS Token

 

相关文章: