探索共用存取簽章
共用存取簽章 (SAS) 是一個已簽署的 URI,指向一個或多個儲存資源,並包含一個含有特殊查詢參數的令牌。 權杖表示用戶端存取資源的方式。 其中一個查詢參數 (簽章) 是由 SAS 參數所建立,並以用來建立 SAS 的金鑰進行簽署。 Azure 儲存體會使用此簽章來授權對儲存體資源的存取。
共用存取簽章的類型
Azure 儲存體支援三種類型的共用存取簽章:
使用者委派 SAS:使用者委派 SAS 會使用 Microsoft Entra 認證,以及透過為 SAS 指定的權限來加以保護。 使用者委派 SAS 僅適用於 Blob Storage 和 Data Lake Storage。
服務 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。 盡量使用此方法,因為這樣就不需要在程式碼中儲存儲存帳戶金鑰。 您必須使用 Microsoft Entra ID 來管理認證。 您的解決方案可能無法使用此選項。
- 請嘗試將到期時間設為最小的實用值。 如果 SAS 金鑰遭到入侵,它只能在短時間內被利用。
- 套用最低必要權限的規則。 只授與必要的存取權。 例如,在應用程式中,唯讀存取權就已足夠。
- 有些情況 SAS 不是正確的解決方案。 當您無法承受使用 SAS 的風險時,請建立中介層服務來管理使用者及其對儲存體的存取權。