共用方式為


建立服務 SAS

重要

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

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

針對使用共用存取簽章 (SAS) 的案例,Microsoft 建議使用使用者委派 SAS。 使用者委派 SAS 會受到 Microsoft Entra 認證保護,而不是帳戶密鑰。 若要瞭解共用存取簽章,請參閱 Create 使用者委派 SAS

服務共用存取簽章 (SAS) 只委派其中一個記憶體服務中資源的存取權:Azure Blob 儲存體、Azure 佇列記憶體、Azure 表格記憶體或 Azure 檔案儲存體。 服務層級 SAS 的 URI 是由 SAS 將委派存取的資源 URI 所組成,後面接著 SAS 令牌。

SAS 令牌是查詢字串,其中包含授權要求所需的所有資訊。 令牌會指定用戶端可以存取的資源、授與的許可權,以及簽章有效期間。

SAS 也可以指定支援的要求來源 IP 位址或位址範圍、提出要求的支持通訊協定,或與要求相關聯的選擇性存取原則標識符。

最後,每個SAS令牌都包含簽章。

警告

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

授權服務 SAS

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

若要使用 Microsoft Entra 認證來保護容器或 Blob 的 SAS,請建立使用者委派 SAS

服務 SAS 支援目錄範圍存取

當授權版本 () 為 2020-02-10 或更新版本且啟用階層命名空間時,服務 SAS 支援目錄範圍 sr=d (sv) 。 目錄範圍 () sr=d 的語意類似於容器範圍 () sr=c 的語意,不同之處在於存取僅限於目錄及其內的任何檔案和子目錄。 指定 時 sr=dsdd 也需要查詢參數。

授權版本 2020-02-10 的字串對簽署格式不會變更。

建構服務 SAS

下圖代表共用存取簽章 URI 的部分。 必要的元件會以橙色顯示。 組成SAS令牌的欄位會在後續各節中說明。

共用存取簽章 URL 的參數元素圖表。

下列各節說明如何指定組成服務 SAS 令牌的參數。

指定 signedVersion 欄位

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

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

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

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

判斷舊版 SAS 要求的版本

在未使用舊版案例 signedVersion 中,Blob 記憶體會套用規則來判斷版本。 如需這些規則的詳細資訊,請參閱 Azure 記憶體服務的版本設定

重要

當您使用使用比用戶端軟體更新的記憶體服務版本的共用存取簽章 URI 時,客戶端軟體可能會遇到非預期的通訊協議行為。 建構共用存取簽章 URI 的程式代碼應該仰賴用戶端軟體所瞭解的版本,以提出記憶體服務要求。

僅指定已簽署的資源 (Blob 記憶體)

必要 signedResource (sr) 字段會指定哪些資源可透過共用存取簽章存取。 下表描述如何參考 SAS 令牌中的 Blob 或容器資源。

資源 參數值 支援的版本 描述
Blob b 全部 授與 Blob 內容和元數據的存取權。
Blob 版本 Bv 2018-11-09 和更新版本 授與 Blob 版本的內容和元數據存取權,但不會授與基底 Blob 的存取權。
Blob 快照集 bs 2018-11-09 和更新版本 授與 Blob 快照集內容和元數據的存取權,但不會授與基底 Blob 的存取權。
容器 c 全部 授與存取容器中任何 Blob 的內容和元數據,以及容器中的 Blob 清單。
目錄 d 2020-02-10 和更新版本 在已啟用階層命名空間的記憶體帳戶中,將存取權授與目錄中任何 Blob 的內容和元數據,以及目錄中的 Blob 清單。 如果為欄位指定 signedResource 目錄, signedDirectoryDepth 則也需要 (sdd) 參數。 目錄一律會巢狀於容器內。

指定已簽署的資源 (Azure 檔案儲存體)

Azure 檔案儲存體 版本 2015-02-21 和更新版本支援 SAS。

signedResource 欄位指定可透過共用存取簽章存取的資源。 下表描述如何參考 URI 上的檔案或共用資源。

欄位名稱 查詢參數 描述
signedResource sr 必要。

指定 f 共享資源是否為檔案。 這麼做會授與檔案內容和元數據的存取權。

指定 s 共享資源是否為共用。 這麼做會將共用中任何檔案的內容和元數據,以及共用中的目錄和檔案清單授與存取權。

指定查詢參數以覆寫 Blob 記憶體 (回應標頭,並只 Azure 檔案儲存體)

若要定義在要求中使用共用存取簽章時,所要傳回的特定回應標頭值,您可以在查詢參數中指定回應標頭。 從 Blob 記憶體版本 2013-08-15 起,Azure 檔案儲存體 支援此功能 2015-02-21 版。 使用此功能的共用存取簽章必須包含sv針對 Blob 記憶體設定為 或更新版本的 參數,或針對 Azure 檔案儲存體 將 參數設定2013-08-152015-02-21 或更新版本。

下表列出回應標頭和對應的查詢參數:

回應標頭名稱 對應的 SAS 查詢參數
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

例如,如果您在以 2013-08-15 版或更新版本建立的共用存取簽章上指定 rsct=binary 查詢參數,回應 Content-Type 標頭會設定為 binary。 此值會 Content-Type 針對只使用此共用存取簽章的要求,覆寫針對 Blob 儲存的標頭值。

如果您建立將響應標頭指定為查詢參數的共用存取簽章,則必須將它們包含在用來建構簽章字串的字串對簽署中。 For more information, see the "Construct the signature string" section later in this article. 如需其他範例,請參閱 服務 SAS 範例

僅指定資料表名稱 (數據表記憶體)

tableName 欄位指定要共用之資料表的名稱。

欄位名稱 查詢參數 描述
tableName tn 必要。 要共用之資料表的名稱。

指定存取原則

URI 的存取原則部分表示共用存取簽章有效期間,以及要授與用戶的許可權。 下表說明組成存取原則的 URI 部分:

欄位名稱 查詢參數 描述
signedStart st 選擇性。 共用存取簽章生效的時間,以其中一個可接受的 ISO 8601 UTC 格式表示。 如果省略此參數,則會使用目前的UTC時間作為開始時間。

在早於 2012-02-12 的版本中,除非使用容器原則,否則 和 signedExpiry 之間的signedStart持續時間不能超過一小時。 如需已接受 UTC 格式的詳細資訊,請參閱 格式化日期/時間值
signedExpiry se 必要。 共用存取簽章變成無效的時間,以其中一個可接受的 ISO 8601 UTC 格式表示。 如果已在相關聯的預存存取原則中指定此欄位,您必須省略此欄位。 如需已接受 UTC 格式的詳細資訊,請參閱 格式化日期/時間值
signedPermissions 1 sp 必要。 與共用存取簽章相關聯的許可權。 使用者受限於許可權所允許的作業。 如果已在相關聯的預存存取原則中指定此欄位,您必須省略此欄位。
startPk 2

startRk 2
spk

srk
僅限數據表記憶體。

選擇性,但 startPk 必須搭配 startRk。 此共用存取簽章可存取的最小分割區和數據列索引鍵。 索引鍵值包含在內。 如果省略它們,則無法存取數據表實體的下限。
endPk 2

endRk 2
epk

erk
僅限數據表記憶體。

選擇性,但 endPk 必須搭配 endRk。 此共用存取簽章可存取的最大分割區和數據列索引鍵。 索引鍵值包含在內。 如果省略它們,則無法存取數據表實體的上限。

1signedPermissions 除非已指定為預存存取原則的一部分,否則 URI 上需要字段。
2startPkstartRkendPkendRk 欄位只能在資料表記憶體資源上指定。

指定權限

針對 SAS 令牌上 signedPermissions (sp) 欄位所指定的許可權,表示用戶端可能會在資源上執行的作業。

您可以結合許可權以允許用戶端使用相同的 SAS 執行多個作業。 當您建構 SAS 時,必須依下列順序包含權限:

racwdxltmeop

容器的有效權限設定範例包括 rwrdrlwdwlrl。 不合法設定的範例包括 wrdrlrdw。 您無法多次指定許可權指定。

服務 SAS 無法授與特定作業的存取權:

  • 無法建立、刪除或列出容器、佇列和數據表。
  • 無法讀取或寫入容器元數據和屬性。
  • 無法清除佇列,而且無法寫入其元數據。
  • 無法租用容器。

若要建構授與這些作業存取權的 SAS,請使用帳戶 SAS。 如需詳細資訊,請參閱建立帳戶 SAS

重要

共用存取簽章是授與記憶體資源許可權的金鑰,您應該保護它們,就像保護帳戶密鑰一樣。 執行只透過 HTTPS 連線使用共用存取簽章的作業,並只在安全連線上散發共用存取簽章 URI,例如 HTTPS。

下列各節將說明每個資源類型支援的許可權。

目錄、容器或 Blob 的權限

下表說明每個資源類型支援的權限:

權限 URI 符號 資源 版本支援 允許的作業
讀取 r 容器
目錄
Blob
全部 讀取容器或目錄中任何 Blob 的內容、封鎖清單、屬性和元數據。 使用 Blob 作為複製作業的來源。
a 容器
目錄
Blob
全部 將區塊新增至附加 Blob。
建立 c 容器
目錄
Blob
全部 寫入新的 Blob、建立 Blob 快照集,或將 Blob 複製到新的 Blob。
寫入 w 容器
目錄
Blob
全部 Create 或寫入內容、屬性、元數據或封鎖清單。 建立 Blob 的快照集或租用 Blob。 調整 Blob 的大小 (僅限分頁 Blob)。 使用 Blob 作為複製作業的目的地。
刪除 d 容器
目錄
Blob
全部 刪除 Blob。 針對 2017-07-29 版和更新版本,Delete 許可權也允許中斷 Blob 上的租用。 如需詳細資訊,請參閱 租用 Blob 作業。
刪除版本 x 容器
Blob
2019-12-12 和更新版本 刪除 Blob 版本。
永久刪除 y Blob 2020-02-10 和更新版本 永久刪除 Blob 快照集或版本。
List l 容器
目錄
全部 以非遞歸方式列出 Blob。
標籤 t Blob 2019-12-12 和更新版本 讀取或寫入 Blob 上的標記。
Find f 容器 2019-12-12 和更新版本 尋找具有索引標籤的 Blob。
移動 m 容器
目錄
Blob
2020-02-10 和更新版本 將 Blob 或目錄及其內容移至新位置。 如果 SAS 令牌中包含 參數,而且 saoid 黏性位是在父目錄上設定,則可以選擇性地限製為子 Blob、目錄或父目錄的擁有者。
執行 e 容器
目錄
Blob
2020-02-10 和更新版本 取得系統屬性,如果記憶體帳戶已啟用階層命名空間,請取得 Blob 的 POSIX ACL。 如果已啟用階層命名空間,且呼叫端是 Blob 的擁有者,則此許可權會授與設定擁有群組、POSIX 許可權和 Blob POSIX ACL 的能力。 不允許呼叫端讀取使用者定義的元數據。
擁有權 o 容器
目錄
Blob
2020-02-10 和更新版本 啟用階層命名空間時,此許可權可讓呼叫者設定擁有者或擁有群組,或在重新命名或刪除已設定黏性位的目錄中的目錄或 Blob 時,作為擁有者。
權限 p 容器
目錄
Blob
2020-02-10 和更新版本 啟用階層命名空間時,此許可權可讓呼叫者在目錄和 Blob 上設定許可權和 POSIX ACL。
設定不變性原則 i 容器
Blob
2020-06-12 和更新版本 設定或刪除 Blob 的不變性原則或法律保留。

檔案的許可權

權限 URI 符號 允許的作業
讀取 r 讀取內容、屬性、元數據。 使用 檔案作為複製作業的來源。
建立 c Create 新檔案,或將檔案複製到新檔案。
寫入 w Create 或寫入內容、屬性、元數據。 調整檔案大小。 使用 檔案作為複製作業的目的地。
刪除 d 刪除檔案。

共用的許可權

權限 URI 符號 允許的作業
讀取 r 讀取共用中任何檔案的內容、屬性或元數據。 使用共用中的任何檔案作為複製作業的來源。
建立 c Create 共用中的新檔案,或將檔案複製到共用中的新檔案。
寫入 w 對於共用中的任何檔案,請建立或寫入內容、屬性或元數據。 調整檔案的大小。 使用 檔案作為複製作業的目的地。 注意:您無法使用服務 SAS 授與讀取或寫入共用屬性或元數據的許可權。 請改用帳戶 SAS。
刪除 d 刪除共用中的任何檔案。 注意:您無法授與使用服務 SAS 刪除共享的許可權。 請改用帳戶 SAS。
List l 列出共用中的檔案和目錄。

佇列的權限

權限 URI 符號 允許的作業
讀取 r 讀取中繼資料和屬性,包括訊息計數。 查看訊息。
a 將訊息加入至佇列。
更新 u 更新佇列中的訊息。 注意:使用 [處理] 許可權搭配更新,以便您必須先取得您想要更新的訊息。
流程 p 從佇列取得及刪除訊息。

資料表的權限

權限 URI 符號 允許的作業
查詢 r 取得實體及查詢實體。
a 加入實體。 注意:更新插入作業需要新增和更新許可權。
更新 u 更新實體。 注意:更新插入作業需要新增和更新許可權。
刪除 d 刪除實體。

指定IP位址或IP範圍

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

當您指定IP位址的範圍時,請注意範圍是包含的。 例如,在SAS上指定 sip=168.1.5.65sip=168.1.5.60-168.1.5.70 會將要求限制為這些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 是不允許的值。

指定數據表存取範圍

startPkstartRkendPkendRk 欄位會定義與共用存取簽章相關聯的數據表實體範圍。 數據表查詢只會傳回範圍內的結果,並嘗試使用共用存取簽章來新增、更新或刪除此範圍以外的實體將會失敗。

如果 startPk 等於 endPk,則共用存取簽章只會授權存取數據表中一個分割區中的實體。

如果 startPk 等於 和 startRk 等於 endPkendRk,則共用存取簽章只能存取一個分割區中的一個實體。

若要了解這些欄位如何限制數據表中實體的存取,請參閱下表:

目前欄位 條件約束的範圍
startPk partitionKey >= startPk
endPk partitionKey <= endPk
startPk, startRk (partitionKey) || (partitionKey >startPk == startPk && rowKey >= startRk)
endPk, endRk (partitionKey) || (partitionKey <endPk == endPk && rowKey <= endRk)

指定目錄深度

啟用階層命名空間且 signedResource 欄位指定目錄 (sr=d) 時,您也必須指定 signedDirectoryDepth (sdd) 字段,以指出根目錄下的子目錄數目。 欄位的值 sdd 必須是非負整數。

例如,根目錄 https://{account}.blob.core.windows.net/{container}/ 的深度為0。 根目錄中的每個子目錄都會新增至深度 1。 目錄 https://{account}.blob.core.windows.net/{container}/d1/d2 深度為 2。

2020-02-10 版或更新版本支援此欄位。

指定帶正負號的標識碼

當您在 URI 上指定 signedIdentifier 欄位時,會將指定的共用存取簽章與對應的預存存取原則產生關聯。 預存存取原則提供另一個方法來控制一個或多個共用存取簽章,包括視需要撤銷簽章的功能。 每個容器、佇列、數據表或共用最多可以有五個預存存取原則。

下表描述如何參考 URI 上的已簽署識別碼:

欄位名稱 查詢參數 描述
signedIdentifier si 選擇性。 最多64個字元的唯一值,與針對容器、佇列或數據表指定的存取原則相互關聯。

預存存取原則包含已簽署的標識符,其值為最多64個字元,且在資源內是唯一的。 您可以為 signedidentifier 共用存取簽章之 URI 中的欄位指定這個已簽署識別碼的值。 當您在 URI 上指定已簽署的識別碼時,會將簽章與預存存取原則產生關聯。 若要使用 REST API 建立容器層級存取原則,請參閱使用 共用存取簽章委派存取權

指定加密範圍

藉由在 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 (錯誤要求) 。

指定簽章

您可以使用 URI 的簽章部分來授權使用共用存取簽章提出的要求。 Azure 記憶體會使用共用密鑰授權配置來授權服務 SAS。

下表描述如何在 URI 上指定簽章:

欄位名稱 查詢參數 描述
signature sig 字串對簽署是從字段建構且必須驗證才能授權要求的唯一字串。 簽章是以哈希為基礎的訊息驗證碼, (HMAC) 您使用 SHA256 演算法計算字串對簽署和密鑰,然後使用 Base64 編碼進行編碼。

建構簽章字串

若要建構共用存取簽章的簽章字串,請先從組成要求的欄位建構字串對簽署、將字串編碼為 UTF-8,然後使用 HMAC-SHA256 演演算法計算簽章。 字串對簽署中包含的字段必須是 URL 譯碼。

版本 2020-12-06 和更新版本

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

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               signedResource + "\n" +
               signedSnapshotTime + "\n" +
               signedEncryptionScope + "\n" +
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
版本 2018-11-09 和更新版本

版本 2018-11-09 新增已簽署資源和已簽署 Blob 快照集時間字段的支援。 這些欄位必須包含在字串對符號中。 若要建構 Blob 記憶體資源的字串對簽署,請使用下列格式:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               signedResource + "\n"
               signedSnapshotTime + "\n" +
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  
版本 2015-04-05 和更新版本

版本 2015-04-05 新增對已簽署 IP 和已簽署通訊協定欄位的支援。 這些欄位必須包含在字串對符號中。 若要建構 Blob 記憶體或 Azure 檔案儲存體 資源的字串對簽署,請使用下列格式:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  

若要建構資料表記憶體資源的字串對符號,請使用下列格式:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion + "\n" +  
               startingPartitionKey + "\n"  
               startingRowKey + "\n"  
               endingPartitionKey + "\n"  
               endingRowKey  
  

若要建構佇列記憶體資源的字串對簽署,請使用下列格式:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedIP + "\n" +  
               signedProtocol + "\n" +  
               signedVersion  
  
版本 2013-08-15 到 2015-02-21

若要使用 2013-08-15 版到 2015-02-21 版建構 Blob 記憶體或 Azure 檔案儲存體 資源的字串對簽署,請使用下列格式。 針對 Azure 檔案儲存體,自 2015-02-21 版起,支援 SAS。

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion + "\n" +  
               rscc + "\n" +  
               rscd + "\n" +  
               rsce + "\n" +  
               rscl + "\n" +  
               rsct  

若要建構資料表的簽署字串 (string-to-sign),請使用下列格式:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion + "\n" +  
               startPk + "\n" +  
               startRk + "\n" +  
               endPk + "\n" +  
               endRk  
  

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

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion 
版本 2012-02-12

若要針對 2012-02-12 版的 Blob 記憶體資源建構字串對簽署,請使用下列格式:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier + "\n" +  
               signedVersion  
2012-02-12 之前的版本

若要針對早於 2012-02-12 的版本建構 Blob 記憶體資源的字串對簽署,請使用下列格式:

StringToSign = signedPermissions + "\n" +  
               signedStart + "\n" +  
               signedExpiry + "\n" +  
               canonicalizedResource + "\n" +  
               signedIdentifier  
  

當您建構要簽署的字串時,請記住下列事項:

  • 如果欄位是選擇性,而不是當做要求的一部分來提供,請為該欄位指定空白字串。 請務必在空白字串之後包含新行字元 (\n)。

  • 數據表的字串對簽署必須包含其他參數,即使這些參數是空字串也一樣。

  • signedpermission字串的部分必須以每個資源類型專屬的固定順序包含許可權指定。 可接受這些權限的任何組合,但權限的字母順序必須符合下表中的順序。

    資源類型 權限順序
    Blob racwd
    容器 racwdl
    佇列 raup
    檔案 rcwd
    共用 rcwdl
    資料表 raud

    例如,容器的有效許可權設定範例包括 rw、、、wdrlwl、 和 rlrd。 不合法設定的範例包括 wrdrlrdw。 不允許多次指定許可權。

  • 如果您要將要求與預存存取原則產生關聯,請提供 signedIdentifier 字串部分的值。

  • 共用存取簽章,指定早於 2012-02-12 的記憶體服務版本只能共用 Blob 或容器,而且它必須先省略 signedVersion 和換行符,才能共用 Blob 或容器。

  • 字串的 canonicalizedResource 部分是已簽署資源的標準路徑。 它必須包含 2015-02-21 版或更新版本的服務名稱 (Blob 記憶體、數據表記憶體、佇列記憶體或 Azure 檔案儲存體) 、記憶體帳戶名稱和資源名稱,而且必須是 URL 譯碼。 Blob 的名稱必須包含 Blob 的容器。 數據表名稱必須是小寫。

容器、佇列、數據表或檔案共用的規範化資源字串,必須省略提供該物件存取權之 SAS 的尾端斜線 (/) 。

下列範例示範如何根據資源類型來建構 canonicalizedResource 字串的部分。

容器

針對 2015-02-21 版和更新版本:

URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  

針對 2015-02-21 之前的版本:

URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/myaccount/music"  

Blobs (英文)

針對 2015-02-21 版和更新版本:

URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

針對 2015-02-21 之前的版本:

URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/myaccount/music/intro.mp3"  

檔案共用

URL = https://myaccount.file.core.windows.net/music
canonicalizedResource = "/file/myaccount/music"  

檔案

URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"  

佇列

針對 2015-02-21 版和更新版本:

URL = https://myaccount.queue.core.windows.net/thumbnails  
canonicalizedResource = "/queue/myaccount/thumbnails"  

針對 2015-02-21 之前的版本:

URL = https://myaccount.queue.core.windows.net/thumbnails  
canonicalizedResource = "/myaccount/thumbnails"  

資料表

如果已簽署的資源是數據表,請確定數據表名稱是標準格式的小寫。

針對 2015-02-21 版和更新版本:

URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')  
canonicalizedResource = "/table/myaccount/employees"  

針對 2015-02-21 之前的版本:

URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')  
canonicalizedResource = "/myaccount/employees"  

共用存取簽章的存留期和撤銷

共用存取簽章將儲存體帳戶資源的存取權限授與使用者。 當您打算使用 SAS 時,請考慮 SAS 的存留期,以及您的應用程式在特定情況下是否需要撤銷訪問許可權。

臨機操作 SAS 與預存存取原則

服務 SAS 可以採用兩種形式之一:

  • 臨機操作 SAS:當您建立臨機操作 SAS 時,SAS 的開始時間、到期時間和許可權全都指定於 SAS URI (或隱含,如果省略開始時間) 。 任何類型的 SAS 皆可以是臨機操作 SAS。

    您可以使用 欄位來管理臨機操作 SAS signedExpiry 的存留期。 如果您想要在到期時間之後繼續將資源的存取權授與用戶端,您必須發出新的簽章。 建議您縮短共用存取簽章的存留期。 在 2012-02-12 版之前,與預存存取原則相關聯的共用存取簽章不能有超過一小時的作用中期間。

  • 具有預存存取原則的 SAS:儲存存取原則是在資源容器上定義,可以是 Blob 容器、數據表、佇列或檔案共用。 您可以使用預存取原則來管理一或多個共用存取簽章的條件約束。 當您將 SAS 與預存存取原則建立關聯時,SAS 會繼承條件約束 (,也就是為預存存取原則定義的開始時間、到期時間和許可權) 。

    預存存取原則會以 URI 的 signedIdentifier 欄位來表示。 預存存取原則提供另一個方法來控制一個或多個共用存取簽章,包括視需要撤銷簽章的功能。

撤銷 SAS

因為 SAS URI 是 URL,所以取得 SAS 的任何人都可以使用它,而不論最初建立的人員為何。 如果是公開發佈 SAS,則全世界的人都可以使用此 SAS。 SAS 會將資源存取權授與擁有資源的任何人,直到發生四件事之一為止:

  • 達到特定SAS上指定的到期時間。

  • 如果參考預存存取原則,且存取原則指定到期時間,則會達到SAS所參考之預存存取原則所指定的到期時間。

    可以達到到期時間,可能是因為間隔經過,或您修改了預存存取原則,過去有到期時間,這是撤銷 SAS 的其中一種方式。

  • 會刪除 SAS 所參考的預存存取原則,這會撤銷 SAS。 如果 Azure 記憶體找不到在共用存取簽章中指定的預存存取原則,用戶端就無法存取 URI 所指示的資源。

    如果您重新建立與已刪除原則完全相同名稱的預存存取原則,則根據與該預存存取原則相關聯的許可權,所有現有的 SAS 令牌都會再次有效。 這假設 SAS 上的到期時間尚未通過。 如果您想要撤銷 SAS,請務必在未來使用到期時間重新建立存取原則時使用不同的名稱。

  • 系統會重新產生用來建立 SAS 的帳戶金鑰。 重新產生帳戶金鑰會導致使用該金鑰的所有應用程式元件無法授權,直到更新為使用其他有效的帳戶密鑰或新重新產生帳戶金鑰為止。 重新產生帳戶金鑰是立即撤銷臨機操作 SAS 的唯一方式。

重要

如果適用,共用存取簽章 URI 會與用來建立簽章和相關聯預存存取原則的帳戶密鑰相關聯。 如果未指定任何預存的存取原則,則撤銷共用存取簽章的唯一方式是變更帳戶金鑰。

最佳做法是,建議您搭配服務 SAS 使用預存存取原則。 如果您選擇不使用預存存取原則,請務必保留特定 SAS 的有效期間。 如需將服務 SAS 與預存存取原則建立關聯的詳細資訊,請參閱 定義預存存取原則

服務 SAS 範例

下列範例顯示附加服務 SAS 令牌的 Blob URI。 服務 SAS 令牌會提供 Blob 的讀取和寫入許可權。

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

下表說明 URI 的每個部份:

名稱 SAS 部分 Description
資源 URI https://myaccount.blob.core.windows.net/sascontainer/blob1.txt Blob 的位址。 強烈建議您使用 HTTPS。
分隔符號 ? 查詢字串前面的分隔符。 分隔符不是 SAS 令牌的一部分。
權限 sp=rw SAS 所授與的權限包括讀取 (r) 和寫入 (w)。
開始時間 st=2023-05-24T01:13:55Z 以 UTC 時間指定。 如果您想要 SAS 立即生效,請略過開始時間。
到期時間 se=2023-05-24T09:13:55Z 以 UTC 時間指定。
IP 範圍 sip=168.1.5.60-168.1.5.70 將從中接受要求的 IP 位址範圍。
通訊協定 spr=https 只允許使用 HTTPS 的要求。
Azure 記憶體版本 sv=2023-05-24 針對 Azure 儲存體版本 2012-02-12 和更新版本,此參數表示要使用的版本。
資源 sr=b 此資源是 Blob。
簽章 sig=<signature> 用來授權存取 Blob。 簽章是透過字串對簽署和密鑰計算的 HMAC,方法是使用 SHA256 演算法,然後使用 Base64 編碼進行編碼。

另請參閱