探索共用存取簽章

已完成

共用存取簽章 (SAS) 是指向一或多個儲存體資源,並包括含有一組特殊的查詢參數權杖的已簽署 URI。 權杖表示用戶端存取資源的方式。 其中一個查詢參數 (簽章) 是由 SAS 參數所建立,並以用來建立 SAS 的金鑰進行簽署。 Azure 儲存體會使用此簽章來授權對儲存體資源的存取。

共用存取簽章的類型

Azure 儲存體支援三種類型的共用存取簽章:

  • 使用者委派 SAS:使用者委派 SAS 會使用 Microsoft Entra 認證,以及透過為 SAS 指定的權限來加以保護。 使用者委派 SAS 僅適用於 Blob 儲存體。

  • 服務 SAS:服務 SAS 會使用儲存體帳戶金鑰來進行保護。 服務 SAS 僅會將存取權委派至下列 Azure 儲存體服務中的資源:Blob 儲存體、佇列儲存體、資料表儲存體或 Azure 檔案儲存體。

  • 帳戶 SAS:帳戶 SAS 會使用儲存體帳戶金鑰來進行保護。 帳戶 SAS 則將存取權限委派給一或多個儲存體服務的資源。 透過服務或使用者委派 SAS 提供的所有作業,也可透過帳戶 SAS 取得。

注意

Microsoft 建議您的安全性最佳做法是盡可能使用 Microsoft Entra 認證,而不是使用帳戶金鑰,因為後者可能更容易遭到盜用。 當您的應用程式設計需要共用存取簽章以取得 Blob 儲存體的存取權時,請使用 Microsoft Entra 認證建立使用者委派 SAS 以獲得較佳的安全性

共用存取簽章的運作方式

當使用 SAS 存取儲存在 Azure 儲存體中的資料時,會需要兩個元件。 第一個是所要存取的資源 URI。 第二個是為了授與該資源存取權所建立的 SAS 權杖。

https://medicalrecords.blob.core.windows.net/patient-images/patient-116139-nq8z7f.jpg?sp=r&st=2020-01-20T11:42:32Z&se=2020-01-20T19:42:32Z&spr=https&sv=2019-02-02&sr=b&sig=SrW1HZ5Nb6MbRzTbXCaPm%2BJiSEn15tC91Y4umMPwVZs%3D 這樣的單一 URI 中,您可以將 URI 與 SAS 權杖分開,如下所示:

  • URI:https://medicalrecords.blob.core.windows.net/patient-images/patient-116139-nq8z7f.jpg?
  • SAS 權杖:sp=r&st=2020-01-20T11:42:32Z&se=2020-01-20T19:42:32Z&spr=https&sv=2019-02-02&sr=b&sig=SrW1HZ5Nb6MbRzTbXCaPm%2BJiSEn15tC91Y4umMPwVZs%3D

SAS 權杖本身是由數個元件所組成。

元件 描述
sp=r 控制存取權限。 這些值可以是用於新增的 a、用於建立的 c、用於刪除的 d、用於列出的 l、用於讀取的 r 或用於寫入的 w。 此範例是唯讀的。 範例 sp=acdlrw 會授與所有可用的權限。
st=2020-01-20T11:42:32Z 存取開始的日期和時間。
se=2020-01-20T19:42:32Z 存取結束的日期和時間。 此範例會授與八小時的存取權。
sv=2019-02-02 要使用的儲存體 API 版本。
sr=b 要存取的儲存體類型。 在此範例中,b 表示 BLOb。
sig=SrW1HZ5Nb6MbRzTbXCaPm%2BJiSEn15tC91Y4umMPwVZs%3D 密碼編譯簽章。

最佳作法

為了降低使用 SAS 的潛在風險,Microsoft 提供一些指導方針:

  • 若要安全散發 SAS 並防止中間人攻擊,請一律使用 HTTPS。
  • 最安全的 SAS 是使用者委派 SAS。 請盡可能使用這種 SAS,因為其讓儲存體金鑰不必再儲存在程式碼中。 您必須使用 Microsoft Entra ID 來管理認證。 您的解決方案可能無法使用此選項。
  • 請嘗試將到期時間設為最小的實用值。 如果 SAS 金鑰遭到入侵,也只會在短時間內遭到惡意探索。
  • 套用最低必要權限的規則。 只授與必要的存取權。 例如,在應用程式中,唯讀存取權就已足夠。
  • 有些情況不適用 SAS。 當您無法承受使用 SAS 的風險時,請建立中介層服務來管理使用者及其對儲存體的存取權。