云计算设计模式(二十四)——仆人键模式

使用一个令牌或密钥,向客户提供受限制的直接訪问特定的资源或服务,以便由应用程序代码卸载数据传输操作。

这个模式是在使用云托管的存储系统或队列的应用中特别实用,而且能够最大限度地降低成本。最大限度地提高可扩展性和性能。

背景和问题

client程序和网络浏览器常常须要读取和写入文件或数据流,并从一个应用程序的存储空间。通常,应用程序将处理的运动数据,或者通过从存储读取它,并将其传输到client。或通过从客户机读取该载流并将其存储在数据存储中。

然而,这样的方法吸收了宝贵的资源,如计算,存储和带宽。

数据存储要处理的上载和直接数据的下载。而不须要对应用程序运行不论什么处理移动至该数据的能力。可是这通常须要在client能够訪问该存储区中的安全凭证。尽管这可能是一种实用的技术来降低数据传送费用的要求进行扩展的应用,并以最大化性能,这意味着应用程序不再能够管理的数据的安全性。

一旦client已到数据存储器进行直接訪问的连接。应用程序不能充当看门人。

它不再是在该方法的控制。而且不能防止随后上载或下载的数据存储中。

这不是,可能须要使用不受信任的客户的现代分布式系统实事求是的态度。相反,应用程序必须能安全地控制对数据的訪问是粒状的方法。但仍然通过设置此连接,然后使client能够直接与数据存储来运行所需的读或写操作的通信降低server上的负载。

解决方式

要解决控制訪问的数据存储在那里的商店本身无法管理身份验证和客户授权的问题,一个典型的解决方式是限制訪问的数据存储的公共连接。并提供client用钥匙或令牌数据存储本身能够验证。

这个密钥或令牌通常被称为仆人键。它提供了对特定资源的时间限制的訪问中。仅同意预定的操作。比如读取和写入到存储或队列,或上载和下载的Web浏览器。

应用程序能够创建和发行代客键客户高速。方便地设备和网络浏览器,同意client,而无需应用程序直接处理数据传送运行所需的操作。

这消除了处理开销,而且在性能和可扩展性所造成的影响。从该应用程序和该server。

client使用该令牌来訪问特定资源中的数据存储为仅仅有特定的时期,并与訪问权限的特定的限制,如示于图1中指定的时间后,将键变为无效而且不会同意兴许訪问该资源。

图1  - 模式概述

另外。也能够配置具有其它依赖关系,如该数据的位置的范围的一个关键。比如。依据不同的数据存储能力。所述键可在数据存储区指定一个完整的表格,或在表中仅特定的行。在云存储系统中的密钥能够指定一个容器,或仅仅是一个特定项目的容器内。

键,也能够由应用程序无效。

这是一种实用的方法。假设client通知该数据传送操作完毕的server。然后,server能够是无效键,以防止将其用于不论什么兴许訪问的数据存储中。

使用这样的模式能够简化管理对资源的訪问。由于没有要求创建和验证用户。授予权限。然后再删除用户。

它也能够非常easy地限制的位置,同意,和有效期,全部通过简单地产生一个合适的键在运行时。的重要因素是限制的有效期,以及资源的特别的位置,尽可能紧,以使接收方能够将其用于仅在预定的目的。

问题和注意事项

在决定怎样实现这个模式时,请考虑下面几点:
•管理密钥的有效性状态和时期。最关键的是不记名票据,假设泄露或泄露。有效地解除锁定目标项目。并使其可用于在有效期内恶意使用。一键通常可撤销或无效,这取决于它是怎样发出的。server端的策略能够被改变。或者在终于的情况下,server键入其用可被无效签名。指定一个短有效期,尽量降低使兴许的无端操作来发生对数据存储的风险。然而。假设在有效期太短时,client可能无法在密钥过期之前完毕该操作。

同意授权用户假设多次訪问所需的受保护资源的有效期间过期之前更新的关键。
•訪问控制的关键将提供的水平。典型地。该键应同意用户运行仅须要完毕操作的行动,诸如仅仅读訪问。假设client不应该能够将数据上传到数据存储器。

文件上传时,通常指定一个键,它提供仅仅写权限,以及位置和有效期。至关重要的是要精确地指定资源或资源集到的关键应用。

•考虑怎样控制用户的行为。实施这样的模式是指控制一定的损失转移到哪些用户有权訪问的资源。

控制的可施加的电平是由可用于该服务或目标数据存储区中的策略和许可的能力的限制。比如,它一般是不可能创建密钥,限制数据的大小将被写入到存储,或者次数的密钥可用于訪问文件的数目。这可导致由预期客户所使用,即使和可能是由在可能会导致反复上载或下载的代码的错误将导致传输数据巨大意想不到的成本。限制次数的文件能够被上载或下载的,可能有必要在可能情况下的数量,能够强制client,当一个操作完毕后,通知该应用程序。比如,某些数据存储引发事件的应用程序代码,可用于监视操作和控制的用户行为。然而,它可能是非常难运行对个人用户的配额在多租户场景,当中同样的密钥从一个租户使用的全部用户。
•验证和可选消毒,全部上传的数据。该收益的关键訪问一个恶意用户能够上传,旨在进一步降低了系统的数据。可替换地,授权用户可上载的数据是无效的,并在处理时,可能会导致错误或系统故障。为了防止这一点,确保全部上传的数据进行验证。并检查使用前恶意内容。
•审核全部操作。很多基于密钥的机制能够登录的操作,如上传,下载。和失败。

这些日志通常能够并入一个审核过程,而且还用于计费,假设基于文件大小或数据量的用户被收取费用。

使用日志来检測可能是由与键提供的一个存储的訪问策略。或者意外移开问题导致验证失败。
•提供关键安全。

它能够被嵌入在用户激活在web页面的URL,或者能够在一个server重定向操作中使用,以便自己主动进行下载。

始终使用HTTPS传送的关键在一个安全通道。
•保护敏感数据在传输过程中。通过应用程序发送的敏感数据通常会发生使用SSL或TLS,这应该被强制运行的client直接訪问数据存储。

其它问题要注意实现这个模式的时候是:
•假设client没有,或者无法通知操作完毕的server,唯一的限制是关键的到期期限。该应用程序将无法运行审计业务。如计算上载或下载的数量。或防止多个上传或下载。
•能够生成可能是有限的关键策略的灵活性。比如。一些机制能够同意仅仅使用一种定时期满期。

其它人可能无法以指定读/写权限的足够的粒度。
•假设指定的開始时间的键或令牌有效期限,确保它是比当前的server时间,以同意client时钟。可能会略微超出同步早一点。假设没有指定,则默认通常是当前server时间。
•包括密钥的URL将被记录在server日志文件里。而键通常已过期的日志文件进行分析之前,请确保您限制对它们的訪问。假设日志数据发送到监控系统或存储在还有一位置中。须要考虑的延迟,以防止密钥的泄漏,直至经过其有效期限已经过期。
•假设client代码,在Web浏览器中运行。浏览器可能须要支持跨域资源共享(CORS),使Web浏览器中运行訪问的数据从该服务的网页源域不同的域代码。一些旧的浏览器和一些数据存储不支持CORS。和代码运行在这些浏览器可能无法使用仆人键,提供对数据的訪问在不同的领域,比方云存储帐户。

何时使用这个模式

这样的模式非常适合于下面几种情况:
•为了最大限度地降低资源负荷,最大限度地提高性能和可扩展性。

使用仆人键不要求资源被锁定,没有远程server呼叫是必需的,有对可发出仆人键的数目没有限制,而且其避免了单点。将出现从运行数据失败的传送通过应用程序代码。创建仆人键一般是签订一个字符串键的简单加密操作。
•为了最大限度地降低运营成本。支持直接訪问存储和队列是资源与成本效率。能够导致更少的网络往返。而且能够同意在所需的计算资源的数量的降低。

•当客户定期上载或下载数据,特别是在有一个大的体积。或当每一个操作涉及大量的文件。
•当应用程序具有有限的计算资源可用,或者是由于托管限制或成本的考虑。在这样的情况下。该模式是更有利的。假设有非常多并发的数据上传或下载。由于它会减轻,从处理传输数据的应用。
•当数据被存储在远程数据存储装置或不同的数据中心。假设该应用程序被要求作为一个看门者,有可能是由于数据中心之间传送数据的额外的带宽,或通过client和应用程序之间的公共或专用网络的电荷,然后将应用程序和数据存储之间。

这样的模式可能不适合于下列情况:
•假设应用程序必须对数据运行一些任务之前将其存储或将其发送到client之前。

比如,应用程序可能须要运行验证,登录訪问成功。或者对数据进行变换。然而,一些数据存储和client都能够进行谈判,并进行简单的变换,如压缩和解压(比如,Web浏览器通常能够处理gzip等格式)。
•假设现有的应用程序的设计和实施,使得它难以和昂贵的工具。使用这样的模式通常须要用于传送和接收数据的一个不同的体系结构方法。
•假设有必要保持审核跟踪或控制的运行数据传送操作的次数,并在使用代客关键机制不支持该server可用于管理这些操作的通知。
•假设有必要,以限制该数据的大小,特别是在上载操作。

唯一的解决方法是为应用程序来检查数据的尺寸后,在操作完毕后,或在指定时间或按计划检查上传的大小。

样例

微软Azure支持共享訪问签名(SAS)对Azure存储的细粒度的訪问控制,数据的blob,表和队列,并为服务总线队列和主题。

一个SAS令牌可配置为提供特定的訪问权限,如读,写。更新和删除特定表;一个键范围的表内;队列;一个blob;或BLOB容器。有效期能够是一个指定的时间段,或没有时间限制。

天青SAS还支持可与特定资源相关联,如表或斑点server存储訪问策略。

这个特征提供了额外的控制和灵活性相比,应用程序生成的SAS令牌,而且应该尽可能使用。在server中存储策略中定义的设置能够在不发出新的令牌来改变,并反映在无需将发行新令牌的令牌,但在令牌本身定义的设置不能被改变。这样的方法还使得有可能撤销有效的SAS令牌之前它已经过期。

注意:

欲了解很多其它信息。请參阅表介绍SAS(共享訪问签名),队列SAS和更新的Blob SAS在Azure存储团队博客和共享訪问签名,第1部分:了解SAS型号MSDN上。

下面的代码演示了怎样创建一个SAS的有效期为5分钟。

该GetSharedAccessReferenceForUpload方法返回一个SAS可用于将文件上传到Azure的Blob存储。

public class ValuesController : ApiController
{private readonly CloudStorageAccount account;private readonly string blobContainer;.../// <summary>/// Return a limited access key that allows the caller to upload a file /// to this specific destination for a defined period of time./// </summary>private StorageEntitySas GetSharedAccessReferenceForUpload(string blobName){var blobClient = this.account.CreateCloudBlobClient();var container = blobClient.GetContainerReference(this.blobContainer);var blob = container.GetBlockBlobReference(blobName);var policy = new SharedAccessBlobPolicy{Permissions = SharedAccessBlobPermissions.Write,// Specify a start time five minutes earlier to allow for client clock skew.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),// Specify a validity period of five minutes starting from now. SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5)};// Create the signature. var sas = blob.GetSharedAccessSignature(policy);return new StorageEntitySas{BlobUri = blob.Uri,Credentials = sas,Name = blobName};}public struct StorageEntitySas{public string Credentials;public Uri BlobUri;public string Name;}
}

注意:

在ValetKey解决方式提供下载本指导意见提供包括此代码的完整样本。在此溶液中ValetKey.Web项目包括一个Web应用程序,包括如上所看到的的ValuesController类。使用该Web应用程序检索SAS键,将文件上传到Blob存储的样本client应用程序是在ValetKey.Client项目中可用。

本文翻译自MSDN:http://msdn.microsoft.com/en-us/library/dn568102.aspx

云计算设计模式(二十四)——仆人键模式相关推荐

  1. 23种设计模式(十四)模板方法模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  2. 设计模式笔记二十四:模板模式

    原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出.欢迎一起讨论(本文大部分转自原文) 在模板模式(Template Pattern)中,一 ...

  3. 设计模式(二十四)解释器模式

    #1 场景问题# ##1.1 读取配置文件## 考虑这样一个实际的应用,维护系统自定义的配置文件. 几乎每个实际的应用系统都有与应用自身相关的配置文件,这个配置文件是由开发人员根据需要自定义的,系统运 ...

  4. (二十四)解释器模式详解

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 解释器模式是平时工作当中相对冷门的一个设计模式,也非常的难于理解,百度百科上的解释也非常之少,只是简单的介绍了一下,并且说了一句,可以 ...

  5. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  6. 云计算设计模式(十二)——索引表模式

    云计算设计模式(十二)--索引表模式 创建索引过的被查询条件经常被引用的数据存储等领域.这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能. 背景和问题 许多数据存储通过使用主 ...

  7. 设计模式(十四)中介者模式

    相关文章 设计模式(一)设计六大原则 设计模式(二)单例模式的七种写法 设计模式(三)建造者模式 设计模式(四)简单工厂模式 设计模式(五)观察者模式 设计模式(六)代理模式 设计模式(七)装饰模式 ...

  8. 大话设计模式笔记(二十一、二十二、二十三、二十四、二十五、二十六)

    二十一.单例模式(Singleton) 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是 ...

  9. 【每天一个java设计模式(十四)】 - 解释器模式

    解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文. 解释器模式主要包括以下几个部分: 抽象表达式角色:定义解释器的接口,约定解释 ...

最新文章

  1. unzip 压缩包含路径,解压缩覆盖路径下的同名文件
  2. PCB常见的拓扑结构 (转)
  3. 电脑不能打字_意外收到一台ThinkPad T400笔记本电脑,简单升级后,办公没问题...
  4. 服务器一键建php网站,搭建服务器 - 我的lnmp一键安装报错 - php中文网博客
  5. 理论基础 —— 树 —— 树的存储结构
  6. 人工智能影响学习的5种方式
  7. Altium Designer 学习笔记
  8. 如何使用SPSS进行判别分析
  9. 盘点2009:Office办公软件谁主江湖
  10. Vue核心技术-39,vue-router-向路由组件传递数据
  11. 她力量系列七丨兰艳艳:理想温暖10年科研路,女性可以柔和,更要自信、专业 | 妇女节特辑
  12. 淘宝Tmall,1688,拼多多API商品详情接口
  13. 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】
  14. C/C++语言ODBC连接SqlServer数据库
  15. Scikit-plot画图
  16. 数据论《西游记》关系网:猪八戒最主动喜欢别人
  17. Spring属性注入的三种方式(超详细)
  18. 服务器端口被占用如何解决
  19. 【Unity3d日常开发】Unity3D中实现热力图、风向图、温度图效果
  20. 血栓清道夫机器人_血栓的“清道夫”终于被找到了,每天吃一点,血液不粘,血管不堵...

热门文章

  1. python导入自定义模块_ubuntu下Python导入自定义模块的方法
  2. php mongodb长连接吗,PHP - MongoDB连接攻略
  3. 月薪7500的软件测试,是个什么工作状态
  4. idea自动导包_IDEA已经世界第一了,听说你还不会?
  5. chap8_1 Render to texture in OGRE
  6. 基于多分类支持向量机和KNN分类器的大豆叶片病害检测与严重程度测量
  7. c语言验证鼓角猜想,患者,男,43岁,交通警察。下肢酸胀、沉重6年,活动或休息后减轻。体格检:小腿外侧有蚓状团块,足靴区...
  8. 各大厂商CTR广告预估模型的优缺点对比
  9. 《用python写网络爬虫》完整版+源码
  10. mvc html安全检测,Spring MVC和HtmlUnit测试