建立帳戶 SAS

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

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

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

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

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

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

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

警告

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

授權帳戶 SAS

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

若要使用 Microsoft Entra 認證來保護容器或 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 指定服務與容器資源的存取權。
SignedPermissions (sp) 必要。 指定帳戶 SAS 的已簽署權限。 只有在許可權符合指定的已簽署資源類型時才有效。 如果不相符,則會予以忽略。

- 讀取 (r):適用於所有已簽署的資源類型 (服務、容器和物件)。 允許所指定資源類型的讀取權限。
- 寫入 (w):適用於所有已簽署的資源類型 (服務、容器和物件)。 允許指定之資源類型的寫入許可權,允許使用者建立和更新資源。
- 刪除 (d):適用於容器和物件資源類型,但佇列訊息除外。
- 永久刪除 (y):僅適用於 Blob 的物件資源類型。
- 列出 (l):僅適用於服務和容器資源類型。
- 新增 (a):僅適用於下列物件資源類型:佇列訊息、資料表實體和附加 Blob。
- 建立 (c) :適用於容器資源類型和下列對象資源類型: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位址範圍時,請記住範圍是inclusiveFor 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可能包含欄位的公用IP位址或位址 signedIp 範圍。 使用 SAS 提出的要求必須源自指定的 IP 位址或地址範圍。
在內部部署或不同雲端環境中執行的用戶端 在任何 Azure 區域中 在此案例中提供給用戶端的SAS可能包含欄位的公用IP位址或位址 signedIp 範圍。 使用 SAS 提出的要求必須源自指定的 IP 位址或地址範圍。

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

指定 HTTP 通訊協定

自 2015-04-05 版起,選擇性 signedProtocolspr () 欄位會指定對 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) 1
依容器中的標籤尋找 Blob Blob (b) 容器 (c) 篩選 (f)
列出 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) 1
永久刪除快照集/ 版本 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) 新增 () 或寫入 (w)
清除頁面 Blob (b) 物件 (o) 寫入 (w)

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

佇列服務

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

作業 已簽署的服務 已簽署的資源類型 已簽署的許可權
取得佇列服務屬性 佇列 (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) 刪除 (d) 或寫入 (w)
放置範圍 檔案 (f) 物件 (o) 寫入 (w)
列出範圍 檔案 (f) 物件 (o) 讀取 r ()
中止複製檔案 檔案 (f) 物件 (o) 寫入 (w)
複製檔案 檔案 (f) 物件 (o) 寫入 (w)
清除範圍 檔案 (f) 物件 (o) 寫入 (w)

帳戶 SAS URI 範例

下列範例顯示附加帳戶 SAS 令牌的 Blob 服務 URI。 帳戶 SAS 令牌會提供服務、容器和對象的許可權。 資料表會細分 URI 的每個部分:

https://blobsamples.blob.core.windows.net/?sv=2022-11-02&ss=b&srt=sco&sp=rwlc&se=2023-05-24T09:51:36Z&st=2023-05-24T01:51:36Z&spr=https&sig=<signature>
名稱 SAS 部分 Description
資源 URI https://myaccount.blob.core.windows.net/?restype=service&comp=properties 服務端點,搭配使用 GET) 呼叫時取得服務屬性的參數 (,或使用 SET) 呼叫時 (設定服務屬性。 根據已簽署服務欄位的值 (ss) ,此 SAS 可以搭配 Blob 記憶體或 Azure 檔案儲存體 使用。
分隔符號 ? 查詢字串前面的分隔符。 分隔符不是 SAS 令牌的一部分。
儲存體服務版本 sv=2022-11-02 針對 Azure 記憶體服務 2012-02-12 版和更新版本,此參數會指出要使用的版本。
服務 ss=b SAS 適用於 Blob 服務。
資源類型 srt=sco SAS 適用於服務層級、容器層級和物件層級作業。
權限 sp=rwlc 許可權會授與讀取、寫入、列出和建立作業的存取權。
開始時間 st=2019-08-01T22%3A18%3A26Z 以 UTC 時間指定。 如果您想要 SAS 立即生效,請略過開始時間。
過期時間 se=2019-08-10T02%3A23%3A26Z 以 UTC 時間指定。
通訊協定 spr=https 只允許使用 HTTPS 的要求。
簽章 sig=<signature> 用來授權存取 Blob。 簽章是透過字串對簽署和密鑰計算的 HMAC,方法是使用 SHA256 演算法,然後使用 Base64 編碼進行編碼。

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

另請參閱