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

简介:

  《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.启动项目

 

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

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

 

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

  

 

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

  

 

分类:  Azure Storage

本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/archive/2012/01/20/2553501.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Java Unix 应用服务中间件
使用java service wrapper把windows flume做成服务
使用java service wrapper把windows flume做成服务
|
6月前
|
关系型数据库 MySQL Windows
windows安装mysql报错Remove of the Service Denied!
windows安装mysql报错Remove of the Service Denied!
|
9月前
|
C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(上)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……
|
9月前
|
调度 C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
|
数据采集 安全 Windows
解决关于Windows Defender Antivirus Service自启造成运行python程序时,Windows的cpu和内存占用过高问题
启用“关闭Windwos defender”服务解决阿里云Windows服务器的卡顿问题,并列举了网上一些错误的解决方法。
9947 2
解决关于Windows Defender Antivirus Service自启造成运行python程序时,Windows的cpu和内存占用过高问题
|
Docker Windows 容器
解决 windows:An attempt was made to access a socket in a way forbidden by its access permissions
解决 windows:An attempt was made to access a socket in a way forbidden by its access permissions
1337 1
解决 windows:An attempt was made to access a socket in a way forbidden by its access permissions
|
2月前
|
Java 数据库连接 数据库
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
|
6月前
|
Windows
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
106 0
|
11月前
|
Windows
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
Windows 11 蓝屏 Stop code - SYSTEM SERVICE EXCEPTION What failed - igdkmd64.sys
247 0
|
Windows
windows server 2012 R2 .NET Runtime Optimization Service CPU占用高
windows server 2012 R2 .NET Runtime Optimization Service CPU占用高
339 0