分享方式:


建立帳戶 SAS

重要

為了獲得最佳安全性,Microsoft建議盡可能使用具有受控識別的 Microsoft Entra ID 來授權對 Blob、佇列和數據表數據的要求。 具有Microsoft Entra標識符和受控識別的授權,提供優於共用密鑰授權的安全性和使用便利性。 若要深入瞭解,請參閱使用 Microsoft Entra IDAuthorize。 若要深入瞭解受控識別,請參閱 什麼是 Azure 資源的受控識別

針對裝載於 Azure 外部的資源,例如內部部署應用程式,您可以透過 Azure Arc 使用受控識別。例如,在已啟用 Azure Arc 的伺服器上執行的應用程式可以使用受控識別來連線到 Azure 服務。 若要深入瞭解,請參閱 使用已啟用 Azure Arc 的伺服器對 Azure 資源進行驗證

針對使用共用存取簽章 (SAS) 的案例,Microsoft建議使用使用者委派 SAS。 使用者委派 SAS 會使用 Microsoft Entra 認證來保護,而不是帳戶密鑰。 若要瞭解共用存取簽章,請參閱 建立使用者委派 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 時,用戶端應用程式必須擁有帳戶金鑰。

若要使用 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):適用於容器和對象資源類型,但佇列訊息除外。
- 刪除版本 (x):僅適用於 Blob 的物件資源類型。
- 永久刪除 (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=198.51.100.0sip=198.51.100.10-198.51.100.20
SignedProtocol (spr) 自選。 指定允許使用帳戶 SAS 提出要求的通訊協定。 可能的值為 HTTPS 和 HTTP (https,http) 或僅限 HTTPS (https)。 預設值為 https,http

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

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

指定 [signedVersion] 欄位

signedVersionsv) 字段包含共用存取簽章的服務版本。 這個值會指定此共用存取簽章所使用的共用密鑰授權版本(在 [signature] 欄位中)。 值也會指定使用此共用存取簽章提出之要求的服務版本。

如需透過共用存取簽章執行要求時所使用的版本資訊,請參閱 azure 記憶體服務的 版本設定

如需此參數如何影響使用共用存取簽章提出的要求授權的相關信息,請參閱 使用共用存取簽章委派存取

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

指定IP位址或IP範圍

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

當您指定IP位址範圍時,請記住該範圍是內含的。 例如,在SAS上指定 sip=198.51.100.0sip=198.51.100.10-198.51.100.20 會將要求限制為這些IP位址。

下表描述是否根據客戶端環境和儲存體帳戶的位置,在指定案例的SAS令牌上包含 signedIp 字段。

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

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

如果要求通過 Proxy 或閘道,請針對 [signedIp] 字段提供該 Proxy 或閘道的公用輸出 IP 位址。

指定 HTTP 通訊協定

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

指定加密範圍

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

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

功能變數名稱 查詢參數 描述
signedEncryptionScope ses 自選。 表示用來加密要求內容的加密範圍。

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

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

當您在 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) 服務(秒) 清單 (l)
取得 Blob 服務屬性 Blob (b) 服務(秒) 讀取 (r)
設定 Blob 服務屬性 Blob (b) 服務(秒) 寫入 (w)
取得 Blob 服務統計數據 Blob (b) 服務(秒) 讀取 (r)
建立容器 Blob (b) 容器 (c) Create(c) 或 Write (w)
取得容器屬性 Blob (b) 容器 (c) 讀取 (r)
取得容器元數據 Blob (b) 容器 (c) 讀取 (r)
設定容器元數據 Blob (b) 容器 (c) 寫入 (w)
租用容器 Blob (b) 容器 (c) 寫入 (w) 或刪除 (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 版本 Blob (b) 物件 (o) 刪除版本 (x)2
永久刪除快照集/ 版本 Blob (b) 物件 (o) 永久刪除 (y)3
租用 Blob Blob (b) 物件 (o) 寫入 (w) 或刪除 (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)
Put Block 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)
附加區塊 Blob (b) 物件 (o) 新增 (a) 或寫入 (w)
清除頁面 Blob (b) 物件 (o) 寫入 (w)

1Delete 許可權允許在具有 2017-07-29 版和更新版本的 Blob 或容器上中斷租用。
2Delete Version 許可權允許刪除具有 2019-12-12 版和更新版本的 Blob 版本。
3Permanent Delete 許可權允許永久刪除具有 2020-02-10 版和更新版本的 Blob 快照集或版本。

佇列服務

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

操作 已簽署的服務 已簽署的資源類型 已簽署的許可權
取得佇列服務屬性 佇列 (q) 服務(秒) 讀取 (r)
設定佇列服務屬性 佇列 (q) 服務(秒) 寫入 (w)
列出佇列 佇列 (q) 服務(秒) 清單 (l)
取得佇列服務統計數據 佇列 (q) 服務(秒) 讀取 (r)
建立佇列 佇列 (q) 容器 (c) Create(c) 或 Write (w)
刪除佇列 佇列 (q) 容器 (c) 刪除 (d)
取得佇列元數據 佇列 (q) 容器 (c) 讀取 (r)
設定佇列元數據 佇列 (q) 容器 (c) 寫入 (w)
放置訊息 佇列 (q) 物件 (o) 新增 (a)
取得訊息 佇列 (q) 物件 (o) 行程 (p)
查看訊息 佇列 (q) 物件 (o) 讀取 (r)
刪除訊息 佇列 (q) 物件 (o) 行程 (p)
清除訊息 佇列 (q) 物件 (o) 刪除 (d)
更新訊息 佇列 (q) 物件 (o) 更新 (u)

數據表服務

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

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

數據表服務上的 upsert 作業需要 1 新增和更新許可權。

檔案服務

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

操作 已簽署的服務 已簽署的資源類型 已簽署的許可權
列出共用 檔案 (f) 服務(秒) 清單 (l)
取得檔案服務屬性 檔案 (f) 服務(秒) 讀取 (r)
設定檔案服務屬性 檔案 (f) 服務(秒) 寫入 (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) Delete (d) 或 Write (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 部分 描述
資源 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 服務統計數據(讀取)。

另請參閱