溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

淺談Azure Storage的安全性

發(fā)布時(shí)間:2020-08-09 17:49:15 來源:網(wǎng)絡(luò) 閱讀:525 作者:wuyvzhang 欄目:云計(jì)算

在今天的博文中我們將討論Azure Storage的安全性以及如何使用共享訪問簽名(SAS)和存儲的訪問策略來控制對容器和Blob的訪問。SAS基本上是帶有查詢參數(shù)的URI,該查詢參數(shù)指定諸如到期時(shí)間,權(quán)限和簽名等選項(xiàng)。我將在本文后面詳細(xì)介紹這些內(nèi)容。請注意,共享訪問簽名也可以與表和隊(duì)列一起使用,但是我將僅在Blob存儲方面進(jìn)行討論

什么是共享訪問簽名(SAS)
共享訪問簽名(SAS)是URI,它允許使用者在指定時(shí)間范圍具有訪問存儲資源(例如blob或容器)所允許的權(quán)限。時(shí)間跨度和權(quán)限可以從存儲的訪問策略中得出,也可以在URI中指定。
可能有得朋友看到這里會提出我使用存儲賬戶密鑰就可以了,為什么要使用此功能?因?yàn)檫@允許客戶端在不知道我們存儲賬戶密鑰的情況下訪問存儲帳戶中的容器和Blob。從安全的角度考慮,如果將存儲帳戶密鑰放在客戶端應(yīng)用程序中,則它可能會遭到******,并且可能會被他人竊取和使用,甚至?xí)酶腥玖瞬《镜奈募鎿Q正常的文件。使用存儲帳戶密鑰,對存儲帳戶的訪問沒有限制。在企業(yè)中的實(shí)際環(huán)境中,無限訪問可能不是我們想看到的權(quán)限控制場景。

默認(rèn)的容器權(quán)限
在控制對Blob存儲的訪問時(shí),首先要使用容器權(quán)限??梢詫lob存儲中每個(gè)容器的權(quán)限設(shè)置為如下權(quán)限之一:

  • Private:禁止公眾訪問Blob或容器
  • Blob:Blob的公共讀取權(quán)限
  • Container:Blob容器和Blob的公共讀取訪問

如果將權(quán)限設(shè)置為Private,則只有具有存儲帳戶名和密鑰,或者使用共享訪問簽名,才能訪問Blob和容器。
如果將權(quán)限設(shè)置為Blob,則在容器中具有URL的任何人都可以讀取blob以及blob屬性和元數(shù)據(jù)。除非他們使用具有適當(dāng)權(quán)限的共享訪問簽名,否則他們將無法編寫B(tài)lob或獲取有關(guān)Blob所在容器的任何信息,也無法在容器中獲取Blob列表。
如果將權(quán)限設(shè)置為Container,則容器和Blob是公共可讀的??梢粤谐鋈萜髦械腂lob,也可以下載Blob??梢宰x取容器屬性和元數(shù)據(jù);還可以讀取blob屬性和元數(shù)據(jù)。請注意,即使擁有此權(quán)限,也仍然無法修改,上傳或刪除Blob,如果希望進(jìn)行修改,上傳或刪除則需要帳戶密鑰或適當(dāng)?shù)腟AS。
這表明我們可以結(jié)合使用容器權(quán)限和共享訪問簽名來控制對Blob和容器的訪問粒度。

存儲訪問策略
下面是創(chuàng)建SAS URI的兩種方法。首先,可以創(chuàng)建一個(gè)臨時(shí)的SAS來訪問文件或容器,并指定使用的過期日期和權(quán)限。如果這樣做,應(yīng)該考慮將時(shí)間跨度設(shè)置為15分鐘之類的小時(shí)間跨度,以最小化其他人使用相同URL訪問相同文件的機(jī)會。例如,如果我們正在檢索SAS URI以顯示一組圖片,則有人可能在Fiddler中看到uri并使用它們,直到它們過期。當(dāng)使用SAS URI時(shí),取消訪問權(quán)限的惟一其他方法是更改存儲帳戶密鑰,這可能會產(chǎn)生嚴(yán)重影響,具體取決于有多少應(yīng)用程序正在使用該存儲帳戶。

創(chuàng)建SAS URI的第二種方法是為容器設(shè)置存儲的訪問策略,并指定名稱、啟動時(shí)間、過期時(shí)間、權(quán)限等。然后,當(dāng)我們需要一個(gè)SAS URI時(shí),我們可以創(chuàng)建它并指定存儲的訪問策略的名稱,而不是URI的特定版本所需的所有參數(shù)。在進(jìn)行授權(quán)時(shí),將從存儲的訪問策略檢索信息。另外,與臨時(shí)SAS URI不同,如果您想撤銷訪問權(quán)限,您可以簡單地更改存儲的訪問策略,從存儲的訪問策略繼承的所有SAS URI將立即被修改,這比更改存儲帳戶密鑰更可取!

需要注意的是一個(gè)容器最多可以有5個(gè)存儲的訪問策略。每個(gè)策略可以由任意數(shù)量的共享訪問簽名使用。例如,可以為讀/寫和只讀訪問設(shè)置不同的訪問策略,使用不同的過期時(shí)間。您可以使用的特定uri的數(shù)量沒有限制。

在創(chuàng)建存儲訪問策略時(shí),可以指定啟動時(shí)間、過期時(shí)間和權(quán)限的任何組合。如果在策略上指定它們,則必須從實(shí)際的SAS URI中省略參數(shù)。或者,可以在存儲的訪問策略中指定其中一些參數(shù),而在SAS URI中指定其他參數(shù)。實(shí)際上,可以在創(chuàng)建存儲訪問策略時(shí)指定SAS URI上的所有參數(shù),但是如果這樣做,則只能使用存儲的訪問策略來撤銷簽名,而不能修改簽名的行為。

共享訪問簽名和存儲的訪問策略必須包含驗(yàn)證簽名所需的所有字段,并且不能有重復(fù)的字段。例如,您不能將存儲的訪問策略設(shè)置為具有權(quán)限R/W,不能創(chuàng)建SAS URI并指定只讀權(quán)限。

通過編寫要使用的策略的完整列表,在容器上設(shè)置存儲的訪問策略。如果希望取消對其中一個(gè)策略的訪問,可以通過編寫策略列表并排除該策略來刪除它。如果希望更改其中一個(gè)策略的權(quán)限,則必須使用包含修改后的策略的新列表覆蓋存儲的策略列表。

到目前為止,相信各位已經(jīng)了解了存儲訪問策略,接下來讓我們來看看共享訪問簽名。

共享訪問簽名

前面也和大家提到,SAS是一個(gè)URI,它在其查詢參數(shù)中包括所有信息,以驗(yàn)證對Blob或容器的訪問所需的身份。查詢參數(shù)可以包括以下內(nèi)容(實(shí)際查詢參數(shù)在參數(shù)名稱后的括號中):

  • Blob URI:這是Blob的地址。我們應(yīng)該始終使用HTTPS構(gòu)造共享訪問簽名。示例:https://sql12bak.blob.core.chinacloudapi.cn
  • 存儲服務(wù)版本(sv):指示要使用的存儲服務(wù)版本。示例:sv = 2019-02-02這是可選的,如果未指定,它將設(shè)置為可用的最新版本。
  • 開始時(shí)間(st):這是SAS生效的時(shí)間。如果省略,則SAS立即生效。由于計(jì)算機(jī)之間的時(shí)差(時(shí)鐘偏斜),因此請務(wù)必小心。如果您將開始時(shí)間設(shè)置為現(xiàn)在,則可能是將來在另一資源上使用5分鐘,并且可能不允許再訪問5分鐘。除非時(shí)間不長,否則建議不要設(shè)置此設(shè)置,或者將開始時(shí)間設(shè)置為當(dāng)前時(shí)間之前的15分鐘。此文件必須為ISO 8061格式。示例:st=2020-01-19T03:27:10Z
  • 到期時(shí)間(秒):這是SAS不再有效的時(shí)間。我們應(yīng)該始終使用它,或者將其與具有此設(shè)置的存儲訪問策略相關(guān)聯(lián)。此文件必須為ISO 8061格式。示例:se=2020-01-19T11:27:10Z
  • 存儲資源(sr):告訴資源是否是blob,隊(duì)列等。示例:sr = b,它表示資源是blob,或sr = c,說資源是容器。
  • 權(quán)限(sp):這定義了可以對存儲資源執(zhí)行的操作。示例:sp = rw,它授予讀取(r)和寫入(w)訪問權(quán)限。
  • 簽名(sig):用于驗(yàn)證對Blob的訪問。這是使用SHA256算法在字符串到符號和密鑰上計(jì)算的HMAC,然后使用Base64編碼進(jìn)行編碼。
    示例:sig = Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D

將這些內(nèi)容放在一起會產(chǎn)生以下URI,它允許對存儲帳戶sql12bak中container進(jìn)行讀/寫訪問,時(shí)間為2020年1月19日11:27:10 AM至2020年1月19日7:27:10 PM
https://sql12bak.blob.core.chinacloudapi.cn/?sv=2019-02-02&ss=bfqt&srt=sco&sp=rw&se=2020-01-19T11:27:10Z&st=2020-01-19T03:27:10Z&spr=https&sig=pOyu%2FIVLKBVeQWydo3vxIJKEi46NXxwk%2FH%2BtXyas5c8%3D

這是一個(gè)臨時(shí)SAS。通過指定所有必需的查詢參數(shù)和Blob的原始URI來訪問Blob時(shí),可以創(chuàng)建此文件。

撤銷權(quán)限

臨時(shí)SAS URI與使用存儲的訪問策略之間的重要區(qū)別與撤銷所允許的權(quán)限有關(guān)。有了SAS,無論創(chuàng)建了哪個(gè)進(jìn)程,任何獲取URI的人都可以使用它。因此,在前面提到的方案中,如果客戶使用Fiddler捕獲了一個(gè)SAS URI,則他可以將其發(fā)送給其他人,然后其他人可以訪問存儲帳戶中的文件并上載或下載。

SAS URI與用于創(chuàng)建簽名的帳戶密鑰和關(guān)聯(lián)的存儲訪問策略(如果有)相關(guān)聯(lián)。如果未指定任何存儲訪問策略,則撤消共享訪問簽名的唯一方法是更改存儲帳戶密鑰。

通常,SAS可以一直工作到:

已達(dá)到SAS的到期時(shí)間。
如果使用了存儲的訪問策略,則在達(dá)到存儲的訪問策略的到期時(shí)間時(shí),SAS將停止工作。發(fā)生這種情況的原因是時(shí)間實(shí)際上已到期,或者因?yàn)榇鎯Φ脑L問策略的到期時(shí)間已修改為過去。
如果您使用存儲的訪問策略,并且SAS引用的策略被刪除,則SAS將不再起作用。
將重新創(chuàng)建用于創(chuàng)建SAS的帳戶密鑰。

最佳實(shí)踐
創(chuàng)建或分發(fā)SAS時(shí),需要始終使用HTTPS。如果通過HTTP傳遞SAS,則可以由執(zhí)行中間人***的人讀取和使用。

盡可能使用存儲的訪問策略,因?yàn)槭褂盟鼈兛梢猿废麢?quán)限而不必重新生成存儲帳戶密鑰。如果需要永久訪問權(quán)限,請將過期時(shí)間設(shè)置為較長時(shí)間,并確保定期更新以將其移至更遠(yuǎn)的將來。

使用臨時(shí)SAS URI時(shí),請使用盡可能小的日期范圍來限制曝光。

如有必要,請客戶端應(yīng)用程序更新SAS。因此,如果有權(quán)訪問映像,并且SAS過期,則應(yīng)用程序應(yīng)該能夠?qū)ζ溥M(jìn)行更新,以使客戶端沒有障礙。

如前所述,在設(shè)置SAS起始時(shí)間時(shí),請務(wù)必通過排除起始時(shí)間參數(shù)或從當(dāng)前時(shí)間中減去15分鐘來解決時(shí)鐘偏移問題。

請具體說明需要訪問的資源。如果客戶只需要訪問一個(gè)Blob,則不要讓他們訪問整個(gè)容器。

在將SAS寫入存儲之后但使用它之前,請驗(yàn)證使用SAS寫入的數(shù)據(jù),以確保它沒有損壞或惡意。

不要總是使用SAS。如果您想對輸入數(shù)據(jù)的驗(yàn)證進(jìn)行更多控制,或者想在身份驗(yàn)證方面增加額外的安全性,則可能需要創(chuàng)建一個(gè)中間層服務(wù)來對blob存儲進(jìn)行讀寫。另外,如果有一種更簡單的方法來提供訪問權(quán)限,請使用它。例如,如果您希望容器中的所有Blob對公眾都是可讀的,請使容器公開,而不是為需要訪問的每個(gè)客戶端創(chuàng)建SAS。

使用存儲分析來監(jiān)視我們的應(yīng)用程序。這將幫助我們發(fā)現(xiàn)由于SAS提供程序服務(wù)問題或意外刪除存儲的訪問策略而導(dǎo)致的身份驗(yàn)證失敗。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI