为什么Azure服务密钥都是成对的?

前一篇文章提到,Azure很多PaaS服务都是提供密钥来做认证的,如果查看生成的密钥,我们会发现密钥都是成对的。比如下图示例的存储账户中有两个密钥key1和key2。

那这两个密钥有区别吗?如果没区别,为什么提供两个呢?

首先,这两个密钥本质上是没有任何区别的,功能权限上都完全一致,也就是说你可以随便用哪个密钥都是没问题的。

那提供两个有什么好处呢?

第一,可以避免应用服务宕机。但这个避免应用服务宕机是有前提的,就跟任何云应用一样,要保证高可用,至少得有两个及两个以上的实例。

好,假设现在我们有一个云应用,它有两个实例,并用到了存储账户,而且存储账户的连接字符串是在配置文件中的。现在出于安全考虑,想重新生成新的密钥以替换原有的。

如果只有一个密钥,那么一旦生成新的密钥,云应用到存储账户的访问,无论是哪个实例,就都会失败,直到把新的连接字符串更新到云应用中,这就出现服务宕机了,是不可接收的。

还好我们有两个密钥,按如下步骤就可避免宕机了,假设原来用的是密钥Key1。

  1. 将云应用配置文件中的存储账户连接字符串更新为使用Key2,因为有两个实例,分布在不同的更新域,而更新是每个更新域串行的,因此会保证始终至少有一个实例在服务
  2. 云应用更新完成后,将Key1重新生成,因为云应用已经在使用Key2了,所以不会产生影响
  3. 再将云应用配置文件中的存储账户连接字符串更新为使用新Key1,同样的不会导致服务宕机
  4. 最后将Key2也重新生成

这样,就将密钥Key1和Key2都重新生成了,而应用服务没有出现宕机。

另一个好处就是可以将没在使用的密钥临时分享给他人使用

比如你有同事想使用你的存储账户来临时上传下载点东西,如果只有一个密钥,给他用完之后,如果想重新生成以保证安全,又会影响你自己正在使用的应用,所以很不方便。

但我们有两个密钥,所以你只需要将另一个没在用的密钥分享给他,使用完之后,将那个密钥重新生成,既保证了安全,也不会影响自己原有的应用。

当然,对于这种情况,更好的方式是分享一个SAS令牌给他,限制了具体的权限,而且过期自动失效,更加安全和方便。

 

参考文章:https://blogs.msdn.microsoft.com/mast/2013/11/06/why-does-an-azure-storage-account-have-two-access-keys/ 

 

posted @ 2017-07-18 11:34  呼啦一下  阅读(636)  评论(0编辑  收藏  举报