用戶端程式和網絡浏覽器經常需要讀取和寫入檔案或資料流,并從一個應用程式的存儲空間。通常,應用程式将處理的運動資料,或者通過從存儲讀取它,并将其傳輸到用戶端,或通過從客戶機讀取該載流并将其存儲在資料存儲中。然而,這種方法吸收了寶貴的資源,如計算,存儲和帶寬。
資料存儲要處理的上載和直接資料的下載下傳,而不需要對應用程式執行任何處理移動至該資料的能力,但是這通常需要在用戶端能夠通路該存儲區中的安全憑證。雖然這可能是一種有用的技術來減少資料傳送費用的要求進行擴充的應用,并以最大化性能,這意味着應用程式不再能夠管理的資料的安全性。一旦用戶端已到資料存儲器進行直接通路的連接配接,應用程式不能充當看門人。它不再是在該方法的控制,并且不能防止随後上載或下載下傳的資料存儲中。
這不是,可能需要使用不受信任的客戶的現代分布式系統實事求是的态度。相反,應用程式必須能安全地控制對資料的通路是粒狀的方法,但仍然通過設定此連接配接,然後使用戶端能夠直接與資料存儲來執行所需的讀或寫操作的通信降低伺服器上的負載。
要解決控制通路的資料存儲在那裡的商店本身無法管理身份驗證和客戶授權的問題,一個典型的解決方案是限制通路的資料存儲的公共連接配接,并提供用戶端用鑰匙或令牌資料存儲本身可以驗證。
這個密鑰或令牌通常被稱為仆人鍵。它提供了對特定資源的時間限制的通路中,僅允許預定的操作,例如讀取和寫入到存儲或隊列,或上載和下載下傳的Web浏覽器。應用程式可以建立和發行代客鍵客戶快速,友善地裝置和網絡浏覽器,允許用戶端,而無需應用程式直接處理資料傳送執行所需的操作。這消除了處理開銷,并且在性能和可擴充性所造成的影響,從該應用程式和該伺服器。
用戶端使用該令牌來通路特定資源中的資料存儲為隻有特定的時期,并與通路權限的特定的限制,如示于圖1中指定的時間後,将鍵變為無效并且不會允許後續通路該資源。
圖1 - 模式概述
另外,也可以配置具有其他依賴關系,如該資料的位置的範圍的一個關鍵。例如,根據不同的資料存儲能力,所述鍵可在資料存儲區指定一個完整的表格,或在表中僅特定的行。在雲存儲系統中的密鑰可以指定一個容器,或隻是一個特定項目的容器内。
鍵,也可以由應用程式無效。這是一種有用的方法,如果用戶端通知該資料傳送操作完成的伺服器。然後,伺服器可以是無效鍵,以防止将其用于任何後續通路的資料存儲中。
使用這種模式可以簡化管理對資源的通路,因為沒有要求建立和驗證使用者,授予權限,然後再删除使用者。它也可以很容易地限制的位置,允許,和有效期,所有通過簡單地産生一個合适的鍵在運作時。的重要因素是限制的有效期,以及資源的特别的位置,盡可能緊,以使接收方可以将其用于僅在預定的目的。
在決定如何實作這個模式時,請考慮以下幾點:
•管理密鑰的有效性狀态和時期。最關鍵的是不記名票據,如果洩露或洩露,有效地解除鎖定目标項目,并使其可用于在有效期内惡意使用。一鍵通常可撤銷或無效,這取決于它是如何發出的。伺服器端的政策可以被改變,或者在最終的情況下,伺服器鍵入其用可被無效簽名。指定一個短有效期,盡量減少使後續的無端操作來發生對資料存儲的風險。然而,如果在有效期太短時,用戶端可能無法在密鑰過期之前完成該操作。允許授權使用者如果多次通路所需的受保護資源的有效期間過期之前更新的關鍵。
•通路控制的關鍵将提供的水準。典型地,該鍵應允許使用者執行僅需要完成操作的行動,諸如隻讀通路,如果用戶端不應該能夠将資料上傳到資料存儲器。檔案上傳時,通常指定一個鍵,它提供隻寫權限,以及位置和有效期。至關重要的是要精确地指定資源或資源集到的關鍵應用。
•考慮如何控制使用者的行為。實施這種模式是指控制一定的損失轉移到哪些使用者有權通路的資源。控制的可施加的電平是由可用于該服務或目标資料存儲區中的政策和許可的能力的限制。例如,它通常是不可能建立密鑰,限制資料的大小将被寫入到存儲,或者次數的密鑰可用于通路檔案的數目。這可導緻由預期客戶所使用,即使和可能是由在可能會導緻重複上載或下載下傳的代碼的錯誤将導緻資料傳輸巨大意想不到的成本。限制次數的檔案可以被上載或下載下傳的,可能有必要在可能情況下的數量,能夠強制用戶端,當一個操作完成後,通知該應用程式。例如,某些資料存儲引發事件的應用程式代碼,可用于監視操作和控制的使用者行為。然而,它可能是很難執行對個人使用者的配額在多租戶場景,其中相同的密鑰從一個租戶使用的所有使用者。
•驗證和可選消毒,所有上傳的資料。該收益的關鍵通路一個惡意使用者可以上傳,旨在進一步降低了系統的資料。可替換地,授權使用者可上載的資料是無效的,并在處理時,可能會導緻錯誤或系統故障。為了防止這一點,確定所有上傳的資料進行驗證,并檢查使用前惡意内容。
•稽核所有操作。許多基于密鑰的機制可以登入的操作,如上傳,下載下傳,和失敗。這些日志通常可以并入一個稽核過程,并且還用于計費,如果基于檔案大小或資料量的使用者被收取費用。使用日志來檢測可能是由與鍵提供的一個存儲的通路政策,或者意外移開問題導緻驗證失敗。
•提供關鍵安全。它可以被嵌入在使用者激活在web頁面的URL,或者可以在一個伺服器重定向操作中使用,以便自動進行下載下傳。始終使用HTTPS傳送的關鍵在一個安全通道。
•保護敏感資料在傳輸過程中。通過應用程式發送的敏感資料通常會發生使用SSL或TLS,這應該被強制執行的用戶端直接通路資料存儲。
其他問題要注意實作這個模式的時候是:
•如果用戶端沒有,或者無法通知操作完成的伺服器,唯一的限制是關鍵的到期期限,該應用程式将無法執行審計業務,如計算上載或下載下傳的數量,或防止多個上傳或下載下傳。
•可以生成可能是有限的關鍵政策的靈活性。例如,一些機制可以允許隻使用一種定時期滿期。其他人可能無法以指定讀/寫權限的足夠的粒度。
•如果指定的開始時間的鍵或令牌有效期限,確定它是比目前的伺服器時間,以允許用戶端時鐘,可能會稍微超出同步早一點。如果沒有指定,則預設通常是目前伺服器時間。
•包含密鑰的URL将被記錄在伺服器日志檔案中。而鍵通常已過期的日志檔案進行分析之前,請確定您限制對它們的通路。如果日志資料發送到監控系統或存儲在另一位置中,需要考慮的延遲,以防止密鑰的洩漏,直至經過其有效期限已經過期。
•如果用戶端代碼,在Web浏覽器中運作,浏覽器可能需要支援跨域資源共享(CORS),使Web浏覽器中執行通路的資料從該服務的網頁源域不同的域代碼。一些舊的浏覽器和一些資料存儲不支援CORS,和代碼運作在這些浏覽器可能無法使用仆人鍵,提供對資料的通路在不同的領域,比如雲存儲帳戶。
這種模式非常适合于以下幾種情況:
•為了最大限度地減少資源負荷,最大限度地提高性能和可擴充性。使用仆人鍵不要求資源被鎖定,沒有遠端伺服器呼叫是必需的,有對可發出仆人鍵的數目沒有限制,并且其避免了單點,将出現從執行資料失敗的傳送通過應用程式代碼。建立仆人鍵通常是簽訂一個字元串鍵的簡單加密操作。
•為了最大限度地降低營運成本。支援直接通路存儲和隊列是資源與成本效率,可以導緻更少的網絡往返,并且可以允許在所需的計算資源的數量的減少。
•當客戶定期上載或下載下傳資料,特别是在有一個大的體積,或當每個操作涉及大量的檔案。
•當應用程式具有有限的計算資源可用,或者是由于托管限制或成本的考慮。在這種情況下,該模式是更有利的,如果有很多并發的資料上傳或下載下傳,因為它會減輕,從處理資料傳輸的應用。
•當資料被存儲在遠端資料存儲裝置或不同的資料中心。如果該應用程式被要求作為一個看門者,有可能是因為資料中心之間傳送資料的額外的帶寬,或通過用戶端和應用程式之間的公共或專用網絡的電荷,然後将應用程式和資料存儲之間。
這種模式可能不适合于下列情況:
•如果應用程式必須對資料執行一些任務之前将其存儲或将其發送到用戶端之前。例如,應用程式可能需要執行驗證,登入通路成功,或者對資料進行變換。然而,一些資料存儲和用戶端都能夠進行談判,并進行簡單的變換,如壓縮和解壓(例如,Web浏覽器通常可以處理gzip等格式)。
•如果現有的應用程式的設計和實施,使得它難以和昂貴的工具。使用這種模式通常需要用于傳送和接收資料的一個不同的體系結構方法。
•如果有必要保持稽核跟蹤或控制的執行資料傳送操作的次數,并在使用代客關鍵機制不支援該伺服器可用于管理這些操作的通知。
•如果有必要,以限制該資料的大小,特别是在上載操作。唯一的解決方法是為應用程式來檢查資料的尺寸後,在操作完成後,或在指定時間或按計劃檢查上傳的大小。
例子
微軟Azure支援共享通路簽名(SAS)對Azure存儲的細粒度的通路控制,資料的blob,表和隊列,并為服務總線隊列和主題。一個SAS令牌可配置為提供特定的通路權限,如讀,寫,更新和删除特定表;一個鍵範圍的表内;隊列;一個blob;或BLOB容器。有效期可以是一個指定的時間段,或沒有時間限制。
天青SAS還支援可與特定資源相關聯,如表或斑點伺服器存儲通路政策。這個特征提供了額外的控制和靈活性相比,應用程式生成的SAS令牌,并且應該盡可能使用。在伺服器中存儲政策中定義的設定可以在不發出新的令牌來改變,并反映在無需将發行新令牌的令牌,但在令牌本身定義的設定不能被改變。這種方法還使得有可能撤銷有效的SAS令牌之前它已經過期。
注意:
欲了解更多資訊,請參閱表介紹SAS(共享通路簽名),隊列SAS和更新的Blob SAS在Azure存儲團隊部落格和共享通路簽名,第1部分:了解SAS型号MSDN上。
下面的代碼示範了如何建立一個SAS的有效期為5分鐘。該GetSharedAccessReferenceForUpload方法傳回一個SAS可用于将檔案上傳到Azure的Blob存儲。
在ValetKey解決方案提供下載下傳本指導意見提供包含此代碼的完整樣本。在此溶液中ValetKey.Web項目包含一個Web應用程式,包括如上所示的ValuesController類。使用該Web應用程式檢索SAS鍵,将檔案上傳到Blob存儲的樣本用戶端應用程式是在ValetKey.Client項目中可用。