建立帳戶 SAS

自 2015-04-05 版起,Azure 儲存體支援在儲存體帳戶層級建立新的共用存取簽章類型 (SAS) 。 藉由建立帳戶 SAS,您可以:

  • 委派服務特定 SAS 目前無法使用的服務層級作業存取權,例如 Get/Set Service PropertiesGet Service Stats 作業。

  • 一次委派對儲存體帳戶中多個服務的存取權。 例如,您可以使用帳戶 SAS,將存取權委派給Azure Blob 儲存體和Azure 檔案儲存體中的資源。

  • 委派容器、佇列、資料表和檔案共用的寫入和刪除作業存取權,這些作業不適用於特定物件 SAS。

  • 指定要接受要求的 IP 位址或 IP 位址範圍。

  • 指定要接受要求的 HTTP 通訊協定, (HTTPS 或 HTTP/HTTPS) 。

帳戶 SAS 目前不支援預存存取原則。

警告

共用存取簽章是授與儲存體資源許可權的金鑰,您應該保護它們,就像保護帳戶金鑰一樣。 保護 SAS 防止遭到惡意使用或誤用至關重要。 在散發 SAS 時請謹慎使用,並備妥方案以撤銷遭盜用的 SAS。 使用共用存取簽章的作業只能透過 HTTPS 連線執行,而 SAS URI 應該只散發于安全連線上,例如 HTTPS。

授權帳戶 SAS

您可以使用儲存體帳戶金鑰來保護帳戶 SAS。 當您建立帳戶 SAS 時,用戶端應用程式必須擁有帳戶金鑰。

若要使用 Azure Active Directory (Azure AD) 認證來保護容器或 Blob 的 SAS,請建立使用者委派 SAS

建構帳戶 SAS URI

帳戶 SAS URI 包含 SAS 將委派存取權的資源 URI,後面接著 SAS 權杖。 SAS 權杖是查詢字串,其中包含授權資源要求所需的所有資訊。 它會指定可供存取的服務、資源和許可權,以及簽章有效期間。

指定帳戶 SAS 參數

下表說明 SAS 權杖的必要和選擇性參數:

SAS 查詢參數 描述
api-version 選擇性。 指定要用來執行使用帳戶 SAS URI 提出要求的儲存體服務版本。
SignedVersion (sv) 必要。 指定要用來授權使用此帳戶 SAS 提出之要求的已簽署儲存體服務版本。 它必須設定為 2015-04-05 版或更新版本。
SignedServices (ss) 必要。 指定可透過帳戶 SAS 存取的已簽署服務。 可能的值包括:

- Blob (b)
- 佇列 (q)
- 資料表 (t)
- 檔案 (f)

您可以結合多個值以提供多項服務的存取權。 例如, ss=bf 指定 Blob 儲存體和Azure 檔案儲存體端點的存取權。
SignedResourceTypes (srt) 必要。 指定可透過帳戶 SAS 存取的已簽署資源類型。

- 服務 (s) :存取服務層級 API (例如,取得/設定服務屬性、取得服務統計資料、列出容器/佇列/資料表/共用) 。
- 容器 (c) : (容器層級 API 的存取權,例如建立/刪除容器、建立/刪除佇列、建立/刪除資料表、建立/刪除共用、列出 Blob/檔案和目錄) 。
- 物件 (o) :存取 Blob、佇列訊息、資料表實體和 (檔案的物件層級 API,例如放置 Blob、查詢實體、取得訊息、建立檔案) 。

您可以結合多個值以提供多個資源類型的存取權。 例如,srt=sc 指定服務與容器資源的存取權。
SignedPermission (sp) 必要。 指定帳戶 SAS 的已簽署權限。 只有在許可權符合指定的已簽署資源類型時才有效。 如果它們不相符,則會忽略它們。

- 讀取 (r):適用於所有已簽署的資源類型 (服務、容器和物件)。 允許所指定資源類型的讀取權限。
- 寫入 (w):適用於所有已簽署的資源類型 (服務、容器和物件)。 允許所指定資源類型的寫入權限。
- 刪除 (d):適用於容器和物件資源類型,但佇列訊息除外。
- 永久刪除 (y):僅適用於 Blob 的物件資源類型。
- 列出 (l):僅適用於服務和容器資源類型。
- 新增 (a):僅適用於下列物件資源類型:佇列訊息、資料表實體和附加 Blob。
- 建立 (c):僅適用於下列物件資源類型:Blob 和檔案。 使用者可以建立新的 Blob 或檔案,但可能不會覆寫現有的 Blob 或檔案。
- 更新 (u):僅適用於下列物件資源類型:佇列訊息和資料表實體。
- 處理 (p):僅適用於下列物件資源類型:佇列訊息。
- 標記 (t):僅適用於下列物件資源類型:Blob。 允許 Blob 標記作業。
- 篩選 (f):僅適用於下列物件資源類型:Blob。 允許依 Blob 標記進行篩選。
- 設定不變性原則 (i):僅適用於下列物件資源類型:Blob。 允許在 Blob 上設定/刪除不變性原則和合法保存。
SignedStart (st) 選擇性。 SAS 生效的時間,以其中一個接受的 ISO 8601 UTC 格式表示。 如果省略,則會假設開始時間是儲存體服務收到要求的時間。 如需已接受 UTC 格式的詳細資訊,請參閱 格式化 DateTime 值
SignedExpiry (se) 必要。 共用存取簽章變成不正確時間,以其中一個接受的 ISO 8601 UTC 格式表示。 如需已接受 UTC 格式的詳細資訊,請參閱 格式化 DateTime 值
SignedIP (sip) 選擇性。 指定要接受要求的 IP 位址或 IP 位址範圍。 當您指定範圍時,請記住範圍是包含的。 僅支援 IPv4 位址。

例如,sip=168.1.5.65sip=168.1.5.60-168.1.5.70
SignedProtocol (spr) 選擇性。 指定允許使用帳戶 SAS 提出要求的通訊協定。 可能的值為 HTTPS 和 HTTP (https,http) 或僅限 HTTPS (https)。 預設值是 https,http

請注意,僅 HTTP 是不允許的值。
SignedEncryptionScope (ses) 選擇性。 指出用來加密要求內容的加密範圍。 2020-12-06 版和更新版本支援此欄位。
Signature (sig) 必要。 URI 的簽章部分是用來授權使用共用存取簽章提出的要求。

字串對簽署是從必須驗證以授權要求的欄位建構的唯一字串。 簽章是以雜湊為基礎的訊息驗證碼 (HMAC) ,會使用 SHA256 演算法透過字串對簽署和金鑰進行計算,然後使用 Base64 編碼進行編碼。

signedVersion指定欄位

signedVersion () sv 欄位包含共用存取簽章的服務版本。 這個值會指定此共用存取簽 signature 章 (欄位中所使用之共用金鑰授權的版本) 。 值也會指定使用此共用存取簽章提出之要求的服務版本。

如需透過共用存取簽章執行要求時所使用的版本資訊,請參閱 Azure 儲存體服務的版本控制

如需此參數如何影響使用共用存取簽章提出之要求授權的資訊,請參閱 使用共用存取簽章委派存取權。

欄位名稱 查詢參數 描述
signedVersion sv 必要。 2015-04-05 版和更新版本支援。 用來授權及處理您使用此共用存取簽章提出要求的儲存體服務版本。 如需詳細資訊,請參閱 Azure 儲存體服務的版本設定

指定 IP 位址或 IP 範圍

自 2015-04-05 版起,選擇性 signedIp 的 () sip 欄位會指定要從中接受要求的公用 IP 位址或公用 IP 位址範圍。 如果要求的來源 IP 位址不符合 SAS 權杖上指定的 IP 位址或位址範圍,則要求未獲得授權。 僅支援 IPv4 位址。

當您指定 IP 位址範圍時,請記住範圍是包含的For example,指定 sip=168.1.5.65sip=168.1.5.60-168.1.5.70 SAS 會將要求限制在這些 IP 位址上。

下表描述是否要 signedIp 根據用戶端環境和儲存體帳戶的位置,在指定案例的 SAS 權杖中包含 欄位。

用戶端環境 儲存體帳戶位置 建議
在 Azure 中執行的用戶端 在與用戶端相同的區域中 在此案例中提供給用戶端的 SAS 不應包含欄位的 signedIp 輸出 IP 位址。 從使用具有指定輸出 IP 位址之 SAS 的相同區域內提出的要求將會失敗。

請改用 Azure 虛擬網路來管理網路安全性限制。 來自相同區域內的 Azure 儲存體要求一律會透過私人 IP 位址進行。 如需詳細資訊,請參閱設定 Azure 儲存體防火牆和虛擬網路
在 Azure 中執行的用戶端 在與用戶端不同的區域中 在此案例中提供給用戶端的 SAS 可能包含欄位的 signedIp 公用 IP 位址或位址範圍。 使用 SAS 提出的要求必須源自指定的 IP 位址或位址範圍。
在內部部署或不同雲端環境中執行的用戶端 在任何 Azure 區域中 在此案例中提供給用戶端的 SAS 可能包含欄位的 signedIp 公用 IP 位址或位址範圍。 使用 SAS 提出的要求必須源自指定的 IP 位址或位址範圍。

如果要求通過 Proxy 或閘道,請為欄位提供該 Proxy 或閘道的 signedIp 公用輸出 IP 位址。

指定 HTTP 通訊協定

自 2015-04-05 版起,選擇性 signedProtocol 的 (spr) 欄位會指定對 SAS 提出的要求所允許的通訊協定。 可能的值為 HTTPS 和 HTTP (https,http) 或僅限 HTTPS (https)。 預設值是 https,http。 請注意,僅 HTTP 是不允許的值。

指定加密範圍

藉由在 signedEncryptionScope URI 上使用 欄位,您可以指定用戶端應用程式可以使用的加密範圍。 當您使用 SAS 權杖上傳 Blob (PUT) 時,它會使用指定的加密範圍強制執行伺服器端加密。 GET 和 HEAD 不會限制並如先前一樣執行。

下表描述如何參考 URI 上的已簽署加密範圍:

欄位名稱 查詢參數 描述
signedEncryptionScope ses 選擇性。 指出用來加密要求內容的加密範圍。

2020-12-06 版或更新版本支援此欄位。 如果您在支援的版本之前新增 ses ,服務會傳回錯誤回應碼 403 (禁止) 。

如果您設定容器或檔案系統的預設加密範圍, ses 查詢參數會遵守容器加密原則。 如果查詢參數和標頭之間 ses 不符,且 x-ms-deny-encryption-scope-override 標頭設定 true 為 ,服務會傳回錯誤回應碼 403 (禁止 x-ms-default-encryption-scope) 。

當您在 PUT 要求中提供 x-ms-encryption-scope 標頭和 ses 查詢參數時,如果要求不相符,服務會傳回錯誤回應碼 400 (錯誤要求) 。

建構簽章字串

若要建構帳戶 SAS 的簽章字串,請先從組成要求的欄位建構字串對簽署,然後使用 HMAC-SHA256 演算法將字串編碼為 UTF-8 並計算簽章。

注意

字串對簽署中包含的欄位必須是 URL 解碼。

若要建構帳戶 SAS 的字串對簽署,請使用下列格式:

StringToSign = accountname + "\n" +  
    signedpermissions + "\n" +  
    signedservice + "\n" +  
    signedresourcetype + "\n" +  
    signedstart + "\n" +  
    signedexpiry + "\n" +  
    signedIP + "\n" +  
    signedProtocol + "\n" +  
    signedversion + "\n"  
  

版本 2020-12-06 新增已簽署加密範圍欄位的支援。 若要建構帳戶 SAS 的字串對簽署,請使用下列格式:

StringToSign = accountname + "\n" +  
    signedpermissions + "\n" +  
    signedservice + "\n" +  
    signedresourcetype + "\n" +  
    signedstart + "\n" +  
    signedexpiry + "\n" +  
    signedIP + "\n" +  
    signedProtocol + "\n" +  
    signedversion + "\n" +
    signedEncryptionScope + "\n"  
  

依作業的帳戶 SAS 許可權

下列各節中的表格列出每個服務的各種 API,以及每個作業支援的已簽署資源類型和已簽署許可權。

Blob 服務

下表列出 Blob 服務作業,並指出當您委派這些作業的存取權時,要指定哪些已簽署的資源類型和已簽署許可權。

作業 已簽署的服務 已簽署的資源類型 已簽署的許可權
列出容器 Blob (b) 服務 (s) 清單 (l)
取得 Blob 服務屬性 Blob (b) 服務 (s) 讀取 r ()
設定 Blob 服務屬性 Blob (b) 服務 (s) 寫入 (w)
取得 Blob 服務統計資料 Blob (b) 服務 (s) 讀取 r ()
建立容器 Blob (b) 容器 (c) 建立 (c) 或寫入 (w)
取得容器屬性 Blob (b) 容器 (c) 讀取 r ()
取得容器中繼資料 Blob (b) 容器 (c) 讀取 r ()
設定容器中繼資料 Blob (b) 容器 (c) 寫入 (w)
租用容器 Blob (b) 容器 (c) 寫入 (w) 或 Delete (d) 1
刪除容器 Blob (b) 容器 (c) 刪除 (d)
列出 Blob Blob (b) 容器 (c) 清單 (l)
放置 Blob (建立新的區塊 Blob) Blob (b) 物件 (o) 建立 (c) 或 (w)
放置 Blob (覆寫現有的區塊 Blob) Blob (b) 物件 (o) 寫入 (w)
放置 Blob (建立新的分頁 Blob) Blob (b) 物件 (o) 建立 (c) 或 (w)
放置 Blob (覆寫現有的分頁 Blob) Blob (b) 物件 (o) 寫入 (w)
取得 Blob Blob (b) 物件 (o) 讀取 r ()
取得 Blob 屬性 Blob (b) 物件 (o) 讀取 r ()
設定 Blob 屬性 Blob (b) 物件 (o) 寫入 (w)
取得 Blob 中繼資料 Blob (b) 物件 (o) 讀取 r ()
設定 Blob 中繼資料 Blob (b) 物件 (o) 寫入 (w)
取得 Blob 標記 Blob (b) 物件 (o) 標籤 (t)
設定 Blob 標記 Blob (b) 物件 (o) 標籤 (t)
依標籤尋找 Blob Blob (b) 物件 (o) 尋找 f) (
刪除 Blob Blob (b) 物件 (o) 刪除 (d)
永久刪除快照集/ 版本 Blob (b) 物件 (o) 永久刪除 (y)
租用 Blob Blob (b) 物件 (o) 寫入 (w) 或 Delete (d) 1
快照 Blob Blob (b) 物件 (o) 建立 (c) 或 (w)
複製 Blob (目的地是新的 Blob) Blob (b) 物件 (o) 建立 (c) 或 (w)
複製 Blob (目的地是現有的 Blob) Blob (b) 物件 (o) 寫入 (w)
累加複製 Blob (b) 物件 (o) 建立 (c) 或 (w)
中止複製 Blob Blob (b) 物件 (o) 寫入 (w)
放置區塊 Blob (b) 物件 (o) 寫入 (w)
放置區塊清單 (建立新的 Blob) Blob (b) 物件 (o) 寫入 (w)
放置封鎖清單 (更新現有的 Blob) Blob (b) 物件 (o) 寫入 (w)
取得區塊清單 Blob (b) 物件 (o) 讀取 r ()
放置頁面 Blob (b) 物件 (o) 寫入 (w)
取得頁面範圍 Blob (b) 物件 (o) 讀取 r ()
Append 區塊 Blob (b) 物件 (o) 使用) 新增 () 或寫入 (
清除頁面 Blob (b) 物件 (o) 寫入 (w)

注意

許可權 Delete 允許中斷 Blob 或容器的租用,版本為 2017-07-29 和更新版本。

佇列服務

下表列出佇列服務作業,並指出當您委派這些作業的存取權時,要指定的已簽署資源類型和已簽署許可權。

作業 已簽署的服務 已簽署的資源類型 已簽署的許可權
取得佇列服務屬性 佇列 (q) 服務 (s) 讀取 r ()
設定佇列服務屬性 佇列 (q) 服務 (s) 寫入 (w)
列出佇列 佇列 (q) 服務 (s) 清單 (l)
取得佇列服務統計資料 佇列 (q) 服務 (s) 讀取 r ()
建立佇列 佇列 (q) 容器 (c) 建立 (c) 或寫入 (w)
刪除佇列 佇列 (q) 容器 (c) 刪除 (d)
取得佇列中繼資料 佇列 (q) 容器 (c) 讀取 r ()
設定佇列中繼資料 佇列 (q) 容器 (c) 寫入 (w)
放置訊息 佇列 (q) 物件 (o) Add (a)
取得訊息 佇列 (q) 物件 (o) 進程 (p)
查看訊息 佇列 (q) 物件 (o) 讀取 r ()
刪除訊息 佇列 (q) 物件 (o) 進程 (p)
清除訊息 佇列 (q) 物件 (o) 刪除 (d)
更新訊息 佇列 (q) 物件 (o) 更新 (u)

資料表服務

下表列出資料表服務作業,並指出當您委派這些作業的存取權時,要指定的已簽署資源類型和已簽署許可權。

作業 已簽署的服務 已簽署的資源類型 已簽署的許可權
取得表格服務屬性 資料表 (t) 服務 (s) 讀取 r ()
設定表格服務屬性 資料表 (t) 服務 (s) 寫入 (w)
取得表格服務統計資料 資料表 (t) 服務 (s) 讀取 r ()
查詢資料表 資料表 (t) 容器 (c) 清單 (l)
建立資料表 資料表 (t) 容器 (c) 建立 (c) 或寫入 (w)
刪除資料表 資料表 (t) 容器 (c) 刪除 (d)
查詢實體 資料表 (t) 物件 (o) 讀取 r ()
插入實體 資料表 (t) 物件 (o) Add (a)
插入或合併實體 資料表 (t) 物件 (o) 新增 () 和 Update (u) 1
插入或取代實體 資料表 (t) 物件 (o) 新增 () 和 Update (u) 1
更新實體 資料表 (t) 物件 (o) 更新 u) (
合併實體 資料表 (t) 物件 (o) 更新 u) (
刪除實體 資料表 (t) 物件 (o) 刪除 (d)

1 資料表服務上更新插入作業需要新增和更新許可權。

檔案服務

下表列出檔案服務作業,並指出當您委派這些作業的存取權時,所要指定的已簽署資源類型和簽署許可權。

作業 已簽署的服務 已簽署的資源類型 已簽署的許可權
列出共用 檔案 (f) 服務 (s) 清單 (l)
取得檔案服務屬性 檔案 (f) 服務 (s) 讀取 r ()
設定檔案服務屬性 檔案 (f) 服務 (s) 寫入 (w)
取得共用統計資料 檔案 (f) 容器 (c) 讀取 r ()
建立共用 檔案 (f) 容器 (c) 建立 (c) 或寫入 (w)
快照集共用 檔案 (f) 容器 (c) 建立 (c) 或寫入 (w)
取得共用屬性 檔案 (f) 容器 (c) 讀取 r ()
設定共用屬性 檔案 (f) 容器 (c) 寫入 (w)
取得共用中繼資料 檔案 (f) 容器 (c) 讀取 r ()
設定共用中繼資料 檔案 (f) 容器 (c) 寫入 (w)
刪除共用 檔案 (f) 容器 (c) 刪除 (d)
列出目錄和檔案 檔案 (f) 容器 (c) 清單 (l)
建立目錄 檔案 (f) 物件 (o) 建立 (c) 或寫入 (w)
取得目錄屬性 檔案 (f) 物件 (o) 讀取 r ()
取得目錄中繼資料 檔案 (f) 物件 (o) 讀取 r ()
設定目錄中繼資料 檔案 (f) 物件 (o) 寫入 (w)
刪除目錄 檔案 (f) 物件 (o) 刪除 (d)
建立檔案 (建立新的) 檔案 (f) 物件 (o) 建立 (c) 或寫入 (w)
建立檔案 (覆寫現有的) 檔案 (f) 物件 (o) 寫入 (w)
取得檔案 檔案 (f) 物件 (o) 讀取 r ()
取得檔案屬性 檔案 (f) 物件 (o) 讀取 r ()
取得檔案中繼資料 檔案 (f) 物件 (o) 讀取 r ()
設定檔案中繼資料 檔案 (f) 物件 (o) 寫入 (w)
刪除檔案 檔案 (f) 物件 (o) 刪除 (d)
放置範圍 檔案 (f) 物件 (o) 寫入 (w)
列出範圍 檔案 (f) 物件 (o) 讀取 r ()
中止複製檔案 檔案 (f) 物件 (o) 寫入 (w)
複製檔案 檔案 (f) 物件 (o) 寫入 (w)
清除範圍 檔案 (f) 物件 (o) 寫入 (w)

帳戶 SAS URI 範例

下列範例顯示提供 Blob 讀取和寫入權限的帳戶 SAS URI。 資料表會細分 URI 的每個部分:

https://myaccount.blob.core.windows.net/?restype=service&comp=properties&sv=2019-02-02&ss=bf&srt=s&st=2019-08-01T22%3A18%3A26Z&se=2019-08-10T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=F%6GRVAZ5Cdj2Pw4tgU7IlSTkWgn7bUkkAg8P6HESXwmf%4B
名稱 SAS 部分 描述
資源 URI https://myaccount.blob.core.windows.net/?restype=service&comp=properties 服務端點,搭配使用 GET) 呼叫時取得服務屬性的參數 (,或使用 SET) 呼叫時 (設定服務屬性。 根據已簽署服務欄位的值 () ss ,此 SAS 可以搭配 Blob 儲存體或Azure 檔案儲存體使用。
儲存體服務版本 sv=2019-02-02 針對 Azure 儲存體服務 2012-02-12 版和更新版本,此參數會指出要使用的版本。
服務 ss=bf SAS 適用于 Blob 和檔案服務。
資源類型 srt=s SAS 適用於服務層級的作業。
開始時間 st=2019-08-01T22%3A18%3A26Z 以 UTC 時間指定。 如果您想要 SAS 立即生效,請略過開始時間。
過期時間 se=2019-08-10T02%3A23%3A26Z 以 UTC 時間指定。
權限 sp=rw 此權限可授與讀取和寫入作業的存取權。
IP 範圍 sip=168.1.5.60-168.1.5.70 將從中接受要求的 IP 位址範圍。
通訊協定 spr=https 只允許使用 HTTPS 的要求。
簽章 sig=F%6GRVAZ5Cdj2Pw4tgU7IlSTkWgn7bUkkAg8P6HESXwmf%4B 用來授權存取 Blob。 簽章是透過字串對簽署和金鑰計算的 HMAC,方法是使用 SHA256 演算法,然後使用 Base64 編碼進行編碼。

由於許可權僅限於服務等級,因此使用此 SAS 的可存取作業是 取得 Blob 服務屬性 , (讀取) 和 設定 Blob 服務屬性 (寫入) 。 不過,利用不同的資源 URI,相同的 SAS 權杖也可以用來委派存取給 取得 Blob 服務統計資料 (讀取)。

另請參閱