1. 程式人生 > >雲端計算設計模式(二十四)——僕人鍵模式

雲端計算設計模式(二十四)——僕人鍵模式

雲端計算設計模式(二十四)——僕人模式


使用一個令牌或金鑰,向客戶提供受限制的直接訪問特定的資源服務,以便由應用程式程式碼解除安裝資料傳輸操作。這個模式是在使用雲託管的儲存系統佇列的應用中特別有用並且可以最大限度地降低成本,最大限度地提高可擴充套件性和效能。

背景和問題


客戶端程式和網路瀏覽器經常需要讀取和寫入檔案資料流,一個應用程式的儲存空間。通常,應用程式將處理的運動資料或者通過儲存讀取,並將其傳輸到客戶端通過從客戶機讀取並將其儲存在資料儲存中。然而,這種方法吸收了寶貴的資源,如計算儲存和頻寬

資料儲存要處理的上載和直接資料下載而不需要對應用程式執行任何處理移動至

資料的能力,但是這通常需要在客戶端能夠訪問儲存區中的安全憑證。雖然這可能是一種有用的技術減少資料傳送費用要求進行擴充套件的應用,以最大化效能,這意味著應用程式不再能夠管理的資料的安全性。一旦客戶端到資料儲存器進行直接訪問的連線,應用程式不能充當看門人它不再是在該方法的控制,並且不能防止隨後上載或下載資料儲存中。

這不是,可能需要使用不受信任的客戶的現代分散式系統實事求是的態度相反,應用程式必須能安全地控制對資料的訪問是粒狀的方法,但仍然通過設定此連線,然後使客戶端能夠直接與資料儲存來執行所需的讀或寫操作的通訊降低伺服器上的負載

解決方案


要解決控制訪問的資料儲存在那裡商店本身無法管理

身份驗證和客戶授權問題一個典型的解決方案是限制訪問資料儲存的公共連線,並提供客戶端用鑰匙或令牌資料儲存本身可以驗證

這個金鑰或令牌通常被稱為僕人鍵。它提供了對特定資源的時間限制的訪問中,僅允許預定的操作,例如讀取和寫入儲存佇列,上載和下載Web瀏覽器。應用程式可以建立和發行代客客戶快速,方便地裝置和網路瀏覽器允許客戶端,而無需應用程式直接處理資料傳送執行所需的操作這消除了處理開銷並且效能和可擴充套件性所造成的影響該應用程式該伺服器。

客戶端使用該令牌來訪問特定資源資料儲存只有特定的時期並與訪問許可權的特定的限制,示於圖1指定的時間後,將變為無效並且不會允許
後續訪問該資源。

圖1  - 模式概述


另外,也可以配置具有其他依賴關係,資料的位置的範圍的一個關鍵例如,根據不同的資料儲存能力,所述可在資料儲存區指定一個完整的表格在表中特定的行。雲端儲存系統中金鑰可以指定一個容器或只是一個特定專案的容器

,也可以由應用程式無效。一種有用的方法,如果客戶端通知該資料傳送操作完成伺服器然後,伺服器可以無效鍵,以防止將其用於任何後續訪問資料儲存中。

使用這種模式可以簡化管理對資源的訪問,因為沒有要求建立和驗證使用者授予許可權,然後刪除使用者可以很容易地限制的位置,允許,有效期所有通過簡單地產生一個合適的在執行時的重要因素限制的有效期,以及資源特別的位置,儘可能緊,以使接收方可以將其用於預定的目的。

問題和注意事項


在決定如何實現這個模式時,請考慮以下幾點
•管理金鑰的有效性狀態和時期最關鍵的是不記名票據,如果洩露洩露,有效地解除鎖定目標專案,並使其可用於有效期內惡意使用一鍵通常可撤銷或無效,這取決於它是如何發出的伺服器端的策略可以被改變,或者在最終的情況下,伺服器鍵入其用被無效簽名。指定一個有效期,儘量減少使後續的無端操作來發生資料儲存的風險。然而,如果在有效期太短時,客戶端可能無法金鑰過期之前完成該操作允許授權使用者如果多次訪問所需受保護資源的有效期間過期之前更新的關鍵
訪問控制的關鍵將提供水平典型地,該應允許使用者執行僅需要完成操作行動,諸如只讀訪問,如果客戶端不應該能夠將資料上傳到資料儲存器檔案上傳時,通常指定一個,它提供只寫許可權以及位置和有效期。至關重要的是要精確地指定資源資源集到的關鍵應用
•考慮如何控制使用者的行為實施這種模式是指控制一定的損失轉移到哪些使用者有權訪問的資源控制施加的電平是由可用於該服務目標資料儲存區中的策略和許可能力的限制例如通常是不可能建立金鑰,限制資料的大小將被寫入儲存或者次數的金鑰可用於訪問檔案的數目。這可導致由預期客戶所使用,即使可能是由在可能會導致重複上載或下載程式碼的錯誤將導致資料傳輸巨大意想不到的成本限制次數的檔案可以被上載或下載的,可能有必要在可能情況下的數量,能夠強制客戶端,當一個操作完成後,通知該應用程式。例如某些資料儲存引發事件應用程式程式碼,可用於監視操作和控制的使用者行為。然而,它可能是很難執行對個人使用者的配額多租戶場景,其中相同的金鑰從一個租戶使用的所有使用者。
驗證和可選消毒所有上傳的資料。收益的關鍵訪問一個惡意使用者可以上傳,旨在進一步降低了系統的資料。可替換地,授權使用者上載的資料是無效的,並在處理時可能會導致錯誤或系統故障。為了防止這一點,確保所有上傳的資料進行驗證,並檢查使用前惡意內容
稽核所有操作許多基於金鑰的機制可以登入的操作,如上傳,下載和失敗這些日誌通常可以併入一個稽核過程並且用於計費,如果基於檔案大小資料使用者被收取費用。使用日誌來檢測可能是由與鍵提供一個儲存的訪問策略或者意外移開問題導致驗證失敗
•提供關鍵安全可以被嵌入在使用者啟用在web頁面的URL或者可以一個伺服器重定向操作中使用,以便自動進行下載。始終使用HTTPS傳送的關鍵在一個安全通道
•保護敏感資料在傳輸過程中通過應用程式傳送的敏感資料通常發生使用SSL或TLS,這應該被強制執行的客戶端直接訪問資料儲存

其他問題要注意實現這個模式的時候
如果客戶端沒有,或者無法通知操作完成伺服器,唯一的限制是關鍵到期期限應用程式將無法執行審計業務,如計算上載或下載的數量或防止多個上傳或下載
可以生成可能是有限的關鍵策略靈活性例如一些機制可以允許使用一種定時期滿期。其他人可能無法以指定讀/寫許可權的足夠的粒度
•如果指定的開始時間令牌有效期限確保它比當前的伺服器時間,以允許客戶端時鐘,可能會稍微超出同步早一點如果沒有指定,則預設通常當前伺服器時間
包含金鑰的URL將被記錄在伺服器日誌檔案中而鍵通常已過期日誌檔案進行分析之前,請確保您限制對它們的訪問如果日誌資料傳送到監控系統儲存在另一位置中,需要考慮的延遲,以防止金鑰的洩漏,直至經過有效期限已經過期。
如果客戶端程式碼,在Web瀏覽器中執行,瀏覽器可能需要支援跨域資源共享CORS,使Web瀏覽器中執行訪問的資料服務的網頁源域不同的域程式碼。一些舊的瀏覽器和一些資料儲存不支援CORS和程式碼執行在這些瀏覽器可能無法使用僕人,提供對資料的訪問在不同的領域比如雲端儲存帳戶。

何時使用這個模式


這種模式非常適合於以下幾種情況:
為了最大限度地減少資源負荷,最大限度地提高效能和可擴充套件性。使用僕人不要求資源被鎖定沒有遠端伺服器呼叫是必需的,對可發出僕人鍵的數目沒有限制,並且其避免了單點,將出現執行資料失敗傳送通過應用程式程式碼。建立僕人通常是簽訂一個字串鍵的簡單加密操作
為了最大限度地降低運營成本。支援直接訪問儲存和佇列資源成本效率可以導致更少的網路往返並且可以允許所需的計算資源數量的減少
•當客戶定期上載或下載資料特別是在有一個大的體積,或當每個操作涉及大量的檔案。
當應用程式具有有限的計算資源可用或者是由於託管限制或成本的考慮在這種情況下,該模式是有利的,如果有很多併發的資料上傳或下載,因為它會減輕,從處理資料傳輸應用
•當資料被儲存在遠端資料儲存裝置或不同的資料中心。如果該應用程式被要求作為一個看門者,有可能是因為資料中心之間傳送資料額外的頻寬或通過客戶端和應用程式之間的公共或專用網路的電荷,然後將應用程式和資料儲存之間

這種模式可能不適合下列情況
•如果應用程式必須對資料執行一些任務之前將其儲存將其傳送到客戶端之前例如,應用程式可能需要執行驗證,登入訪問成功或者資料進行變換然而,一些資料儲存和客戶端都能夠進行談判,並進行簡單的變換,如壓縮和解壓例如Web瀏覽器通常可以處理gzip等格式
如果現有的應用程式的設計實施,使得難以和昂貴的工具。使用這種模式通常需要用於傳送和接收資料的一個不同的體系結構方法
•如果有必要保持稽核跟蹤或控制執行資料傳送操作的次數,使用代客關鍵機制不支援該伺服器可用於管理這些操作的通知。
•如果有必要,以限制該資料的大小,特別是在上載操作唯一的解決方法是為應用程式來檢查資料的尺寸後,在操作完成後,或在指定時間按計劃檢查上傳的大小。

例子

微軟Azure支援共享訪問簽名SASAzure儲存細粒度的訪問控制,資料的blob表和佇列併為服務匯流排佇列和主題一個SAS令牌可配置為提供特定的訪問許可權,如讀,寫更新和刪除特定表;一個範圍的表;佇列;一個blob;BLOB容器。有效期可以是一個指定的時間段,或沒有時間限制

天青SAS還支援可與特定資源相關聯,表或斑點伺服器儲存訪問策略。這個特徵提供了額外的控制靈活性相比,應用程式生成的SAS令牌,並且應該儘可能使用在伺服器中儲存策略中定義的設定可以在不發出新的令牌來改變,並反映在無需將發行新令牌令牌令牌本身定義的設定不能被改變這種方法使得有可能撤銷有效的SAS令牌之前已經過期。

注意:

欲瞭解更多資訊,請參閱介紹SAS共享訪問簽名佇列SAS和更新的Blob SASAzure儲存團隊部落格和共享訪問簽名,第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儲存的樣本客戶端應用程式ValetKey.Client專案中可用