建立使用者委派 SAS

存取容器、目錄或 blob 的 SAS 權杖可能會使用 Azure AD 認證或帳戶金鑰加以保護。 使用 Azure AD 認證保護的 sas 稱為「使用者委派 sas」。 Microsoft 建議您盡可能使用 Azure AD 認證作為安全性最佳做法,而不是使用帳戶金鑰,這可能更容易遭到入侵。 當您的應用程式設計需要共用存取簽章時,請使用 Azure AD 認證來建立使用者委派 SAS 以獲得較佳的安全性。

每個 SAS 都會以金鑰簽署。 若要建立使用者委派 SAS,您必須先要求 使用者委派金鑰,然後使用該金鑰來簽署 SAS。 使用者委派金鑰類似于用來簽署服務 sas 或帳戶 sas 的帳戶金鑰,不同之處在于它依賴您的 Azure AD 認證。 若要要求使用者委派金鑰,請呼叫「 取得使用者委派金鑰 」作業。 然後,您可以使用使用者委派金鑰來建立 SAS。

Azure Blob 儲存體和 Azure Data Lake Storage Gen2 皆支援使用者委派 SAS。 使用者委派 SAS 不支援儲存的存取原則。

警告

共用存取簽章是授與儲存體資源許可權的金鑰,且應使用與帳戶金鑰相同的方式進行保護。 保護 SAS 免于惡意或非預期的使用是很重要的。 在散發 SAS 時請謹慎使用,並備妥方案來撤銷遭盜用的 SAS。 使用共用存取簽章的作業應該只透過 HTTPS 連接來執行,而且共用存取簽章 Uri 應該只在安全的連線(例如 HTTPS)上散發。

如需使用帳戶金鑰保護 SAS 的詳細資訊,請參閱 建立服務 sas建立帳戶 sas

適用于目錄範圍存取的使用者委派 SAS 支援

sr=d當驗證版本 (sv) 為2020-02-10 或更高版本,且已啟用階層命名空間 (HNS) 時,使用者委派 SAS 可支援目錄範圍 () 。 目錄範圍 () 的語法 sr=d 類似于) 的容器 (範圍 sr=c ,不同之處在于存取權僅限於目錄及其下的任何檔案和子目錄。 當 sr=d 指定時, sdd 也需要 query 參數。

驗證版本2020-02-10 的字串到簽署格式未變更。

使用者 OID 的使用者委派 SAS 支援

saoid suoid 當驗證版本 (sv) 為2020-02-10 或更高版本時,使用者委派 SAS 支援在或參數中攜帶選擇性的使用者 OID。 這個選擇性參數可為多使用者叢集工作負載(例如 Hadoop 和 Spark)提供增強的授權模型。 SAS 權杖可能會受限於特定的檔案系統作業和使用者,提供較不容易受攻擊的存取權杖,以在多使用者叢集間散發的目的更安全。 這些功能的其中一個使用案例是將 Hadoop ABFS 驅動程式與 Apache Ranger 的整合。

使用者委派 SAS 的授權

當用戶端使用使用者委派 SAS 來存取 Blob 儲存體資源時,Azure 儲存體的要求會獲得用來建立 SAS Azure AD 認證的授權。 以角色為基礎的存取控制 (為該 Azure AD 帳戶授與的 RBAC) 許可權,以及在 SAS 上明確授與的許可權,以決定用戶端對資源的存取權。 這種方法可提供額外的安全性層級,並避免需要以應用程式程式碼來儲存您的帳戶存取金鑰。 基於這些理由,使用 Azure AD 認證建立 SAS 是安全性最佳作法。

授與擁有 SAS 之用戶端的許可權,是授與要求使用者委派金鑰之安全性主體的許可權,以及使用 signedPermissions () 欄位授與 SAS 權杖上資源的許可權的交集 sp 。 如果未在 SAS 權杖上授與透過 RBAC 授與安全性主體的許可權,則不會將該許可權授與嘗試使用 SAS 來存取資源的用戶端。 建立使用者委派 SAS 時,請確定透過 RBAC 授與的許可權,以及透過 SAS 權杖授與的許可權,都符合用戶端所需的存取層級。

若要建立使用者委派 SAS,請遵循下列步驟:

  1. 使用 RBAC,將所需的許可權授與給將要求使用者委派金鑰的安全性主體。
  2. 從 Azure AD 取得 OAuth 2.0 權杖。
  3. 藉由呼叫「 取得使用者委派金鑰 」作業,使用權杖來要求使用者委派金鑰。
  4. 使用使用者委派金鑰,以適當的欄位來建立 SAS 權杖。

使用 RBAC 指派許可權

要求使用者委派金鑰的安全性主體必須具有適當的許可權才能這麼做。 Azure AD 的安全性主體可能是使用者、群組、服務主體或受控識別。

若要要求使用者委派金鑰,必須將 Microsoft 的安全性主體指派給安全性主體 儲存體/storageAccounts/blobServices/generateUserDelegationKey 動作。 下列內建的 RBAC 角色包括 Microsoft。儲存體/storageAccounts/blobServices/generateUserDelegationKey 動作,不論是明確或作為萬用字元定義的一部分:

由於「取得使用者委派金鑰」作業會在儲存體帳戶層級上運作,因此, Microsoft 儲存體/storageAccounts/blobServices/generateUserDelegationKey 動作的範圍必須是儲存體帳戶、資源群組或訂用帳戶的層級。 如果安全性主體指派了以上所列的任何內建角色,或包含 Microsoft 的自訂角色 儲存體/storageAccounts/blobServices/generateUserDelegationKey 動作會在儲存體帳戶、資源群組或訂用帳戶的層級上,安全性主體將能夠要求使用者委派金鑰。

如果安全性主體指派了允許資料存取的角色,但範圍設定為容器層級,您可以另外將 儲存體 Blob Delegator 角色指派給儲存體帳戶、資源群組或訂用帳戶層級的安全性主體。 儲存體 Blob Delegator 角色會授與安全性主體許可權,以要求使用者委派金鑰。

如需 Azure 儲存體之 RBAC 角色的詳細資訊,請參閱使用 Azure Active Directory 授權

取得 OAuth 2.0 權杖

若要取得使用者委派金鑰,請先向 Azure AD 要求 OAuth 2.0 權杖。 提供具有持有人配置的權杖,以授權呼叫「 取得使用者委派金鑰 」作業。 如需從 Azure AD 要求 OAuth 權杖的詳細資訊,請參閱驗證流程和應用程式案例

要求使用者委派金鑰

呼叫「 取得使用者委派金鑰 」作業會以一組值的形式傳回索引鍵,做為使用者委派 SAS 權杖上的參數。 這些參數會在「 取得使用者委派金鑰 參考」和「 建立使用者委派 SAS」一節中描述。

當用戶端使用 OAuth 2.0 權杖要求使用者委派金鑰時,Azure 儲存體會代表安全性主體傳回使用者委派金鑰。 以使用者委派金鑰建立的 SAS 會獲得授與安全性主體的許可權。

擁有使用者委派金鑰之後,您就可以使用該金鑰,在金鑰存留期內建立任意數量的使用者委派共用存取簽章。 使用者委派金鑰與用來取得它的 OAuth 2.0 權杖無關,因此只要金鑰仍有效,就不需要更新權杖。 您可以指定金鑰有效期限最多七天。

建立使用者委派 SAS

下表摘要說明使用者委派 SAS 權杖所支援的欄位。 後續各節會提供如何指定這些參數的其他詳細資料。

SAS 功能變數名稱 SAS 權杖參數 必要或選用 版本支援 描述
signedVersion sv 必要 2018-11-09 或更新版本 指出用來建立簽章欄位的服務版本,也會指定處理此共用存取簽章所提出之要求的服務版本。
signedResource sr 必要 全部 指定可透過共用存取簽章存取哪些 blob 資源。
signedStart st 選擇性 全部 選擇性。 共用存取簽章生效的時間,以其中一個可接受的 ISO 8601 UTC 格式表示。 如果省略,則會使用目前的 UTC 時間作為開始時間。 如需已接受之 UTC 格式的詳細資訊,請參閱 格式化日期時間值
signedExpiry se 必要 全部 共用存取簽章變成不正確時間,以其中一個可接受的 ISO 8601 UTC 格式表示。 如需已接受之 UTC 格式的詳細資訊,請參閱 格式化日期時間值
signedPermissions sp 必要 全部 指出擁有 SAS 的用戶端可以在資源上執行的作業。 可以合併許可權。
signedIp sip 選擇性 2015-04-05 或更新版本 指定 IP 位址或 IP 位址的內含範圍,以接受要求。
signedProtocol spr 選擇性 2015-04-05 或更新版本 指定使用 SAS 所提出之要求所允許的通訊協定。 包含此欄位,要求使用 SAS 權杖提出的要求使用 HTTPS。
signedObjectId skoid 必要 2018-11-09 或更新版本 識別 Azure AD 的安全性主體。
signedTenantId sktid 必要 2018-11-09 或更新版本 指定定義安全性主體的 Azure AD 租使用者。
signedKeyStartTime skt 選擇性。 2018-11-09 或更新版本 取得使用者委派金鑰 」作業會傳回值。 指出使用者委派金鑰的存留期開始,以其中一個可接受的 ISO 8601 UTC 格式表示。 如果省略,則會假設為目前時間。 如需已接受之 UTC 格式的詳細資訊,請參閱 格式化日期時間值
signedKeyExpiryTime ske 必要 2018-11-09 或更新版本 取得使用者委派金鑰 」作業會傳回值。 指出使用者委派金鑰的存留期結束,以其中一個可接受的 ISO 8601 UTC 格式表示。 如需已接受之 UTC 格式的詳細資訊,請參閱 格式化日期時間值
signedKeyService sks 必要 2018-11-09 或更新版本 指出使用者委派金鑰有效的服務。 目前只支援 Blob 服務。
signedAuthorizedObjectId saoid 選擇性 2020-02-10 或更新版本 指定使用者委派金鑰擁有者授權的 Azure AD 安全性主體的物件識別碼,以執行 SAS 權杖所授與的動作。 不會執行 POSIX Acl 的其他許可權檢查。
signedUnauthorizedObjectId suoid 選擇性 2020-02-10 或更新版本 當啟用階層式命名空間時,指定 Azure AD 安全性主體的物件識別碼。 在授權作業之前,Azure 儲存體會對物件識別碼執行 POSIX ACL 檢查。
signedCorrelationId scid 選擇性 2020-02-10 或更新版本 將儲存體審核記錄與產生和散發 SAS 之主體所使用的審核記錄相互關聯。
signedDirectoryDepth sdd 必要時機 sr=d 2020-02-10 或更新版本 表示在 canonicalizedResource 字串對符號欄位中指定之目錄的根資料夾底下的目錄數目。
signedEncryptionScope ses 選擇性 2020-12-06 或更新版本 表示用來加密要求內容的加密範圍。
signature sig 必要 全部 簽章是使用簽署字串 (string-to-sign) 和使用 SHA256 演算法的金鑰計算的 HMAC,並會接著使用 Base64 編碼進行編碼。
Cache-Control 回應標頭 rscc 選擇性 2013-08-15 或更新版本 Azure 儲存體將 Cache-Control 回應標頭設定為 SAS 權杖上所指定的值。
Content-Disposition 回應標頭 rscd 選擇性 2013-08-15 或更新版本 Azure 儲存體將 Content-Disposition 回應標頭設定為 SAS 權杖上所指定的值。
Content-Encoding 回應標頭 rsce 選擇性 2013-08-15 或更新版本 Azure 儲存體將 Content-Encoding 回應標頭設定為 SAS 權杖上所指定的值。
Content-Language 回應標頭 rscl 選擇性 2013-08-15 或更新版本 Azure 儲存體將 Content-Language 回應標頭設定為 SAS 權杖上所指定的值。
Content-Type 回應標頭 rsct 選擇性 2013-08-15 或更新版本 Azure 儲存體將 Content-Type 回應標頭設定為 SAS 權杖上所指定的值。

指定已簽署的版本欄位

[必要的 signedVersion (sv) ] 欄位會指定共用存取簽章的服務版本。 這個值表示用來建立欄位的服務版本 signature ,也會指定處理以此共用存取簽章提出之要求的服務版本。 欄位的值 sv 必須是2018-11-09 版或更新版本。

指定已簽署的資源欄位

[必要的 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) 參數。 目錄一律位於容器下方。

指定簽章有效性間隔

signedStart (st) 和 signedExpiry (se) 欄位指出 SAS 的開始時間和到期時間。 signedExpiry 是必填欄位。 signedStart欄位是選擇性的; 如果省略,則會使用目前的 UTC 時間作為開始時間。

針對使用者委派 SAS,SAS 的開始時間和到期時間應該在為使用者委派金鑰定義的間隔內。 如果用戶端在使用者委派金鑰過期之後嘗試使用 SAS,則不論 SAS 本身是否仍然有效,SAS 都會失敗併發生授權錯誤。

如需已接受之 UTC 格式的詳細資訊,請參閱 格式化日期時間值

指定權限

針對 signedPermissions sas 權杖上的 () 欄位指定的許可權, sp 會指出哪些用戶端擁有 sas 可在資源上執行的作業。

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

racwdxltmeop

容器的有效許可權設定範例包括、、 rw rd rlwdwlrl 。 無效設定的範例包括 wrdrlrdw 。 不允許多次指定同一個權限指定。

使用者委派 SAS 無法授與特定作業的存取權:

  • 無法建立、刪除或列出容器。
  • 您無法讀取或寫入容器中繼資料和屬性。
  • 您無法租用容器。

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

下表顯示每個資源類型所支援的許可權。

權限 URI 符號 資源 版本支援 允許的作業
讀取 r 容器
目錄
Blob
全部 讀取容器或目錄中任何 blob 的內容、區塊清單、屬性和中繼資料。 使用 blob 做為複製作業的來源。
a 容器
目錄
Blob
全部 將區塊新增至附加 blob。
建立 c 容器
目錄
Blob
全部 寫入新的 blob、將 blob 快照集,或將 blob 複製到新的 blob。
寫入 w 容器
目錄
Blob
全部 建立或寫入內容、屬性、中繼資料或封鎖清單。 建立 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 上的標記。
移動 m 容器
目錄
Blob
2020-02-10 版或更新版本 將 blob 或目錄及其內容移至新的位置。 如果 saoid SAS 權杖中包含此參數,而且在上層目錄上設定了該參數,則可以選擇性地將此作業限制為子 blob、目錄或父目錄的擁有者。
執行 e 容器
目錄
Blob
2020-02-10 版或更新版本 取得系統屬性,如果已針對儲存體帳戶啟用階層命名空間,請取得 blob 的 POSIX ACL。 如果已啟用階層命名空間,而且呼叫端是 blob 的擁有者,此許可權會授與設定 blob 的擁有群組、POSIX 許可權和 POSIX ACL 的能力。 不允許呼叫端讀取使用者定義的中繼資料。
擁有權 o 容器
目錄
Blob
2020-02-10 版或更新版本 當啟用階層命名空間時,此許可權可讓呼叫者設定擁有者或擁有群組,或在已設定 [粘滯位] 的目錄中重新命名或刪除目錄或 blob 時,將其作為擁有者。
權限 p 容器
目錄
Blob
2020-02-10 版或更新版本 啟用階層命名空間時,此許可權可讓呼叫端在目錄和 blob 上設定許可權和 POSIX Acl。
設定永久性原則 i 容器
Blob
2020-06-12 版或更新版本 在 blob 上設定或刪除永久性原則或合法保存。

指定 IP 位址或 IP 範圍

選擇性的 signedIp (sip) ] 欄位指定要接受要求的 ip 位址或 ip 位址範圍。 如果要求來源的 IP 位址不符合 SAS 權杖上所指定的 IP 位址或位址範圍,要求就不會獲得授權。

當您指定 IP 位址範圍時,範圍即為內含。 例如,在 sip=168.1.5.65 SAS 上指定或會 sip=168.1.5.60-168.1.5.70 將要求限制為這些 IP 位址。

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

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

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

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

指定 HTTP 通訊協定

選擇性的 signedProtocol (spr) ] 欄位會指定使用 SAS 所提出之要求所允許的通訊協定。 可能的值為 HTTPS 和 HTTP (https,http) 或僅 () 的 HTTPs https 。 預設值是 https,http

注意

您無法為欄位指定 HTTP spr

指定已簽署的物件識別碼

signedObjectId skoid 使用者委派 SAS 需要 () 欄位。 「 取得使用者委派金鑰 」作業會傳回此值作為回應的一部分。 簽署的物件識別碼是 GUID 值,可為 Microsoft 身分識別平臺中的安全性主體提供不可變的識別碼。

指定已簽署的租使用者識別碼

signedTenantId sktid 使用者委派 SAS 需要 () 欄位。 「 取得使用者委派金鑰 」作業會傳回此值作為回應的一部分。 簽署的租使用者識別碼是 GUID 值,代表定義了安全性主體的 Azure AD 租使用者。

指定帶正負號的金鑰開始時間

選擇性的 signedKeyStartTime (skt) ] 欄位表示以 ISO 日期格式的使用者委派金鑰存留期開始。 「 取得使用者委派金鑰 」作業會傳回此值作為回應的一部分。 如果省略,則會假設簽署的金鑰開始時間為目前時間。

指定帶正負號的金鑰到期時間

signedKeyExpiryTime ske 針對 ISO 日期格式的使用者委派 SAS,需要 () 欄位。 「 取得使用者委派金鑰 」作業會傳回此值作為回應的一部分。 帶正負號的金鑰到期時程表示使用者委派金鑰的存留期結束。 到期時間的值可能是從 SAS 開始時間起算的最多七天。

指定簽署的金鑰服務

signedKeyService sks 使用者委派 SAS 需要 () 欄位。 「 取得使用者委派金鑰 」作業會傳回此值作為回應的一部分。 [簽署的金鑰服務] 欄位指出使用者委派金鑰有效的服務。 Blob 服務的「簽署的金鑰服務」欄位值為 b

指定簽署的金鑰版本

signedkeyversion skv 使用者委派 SAS 需要 () 欄位。 「 取得使用者委派金鑰 」作業會傳回此值作為回應的一部分。 [簽署的金鑰版本] 欄位會指定用來取得使用者委派金鑰的儲存體服務版本。 此欄位必須指定2018-11-09 版或更新版本。

指定安全性主體的已簽署物件識別碼

選擇性的 signedAuthorizedObjectId (saoid) 和 signedUnauthorizedObjectId (suoid) 欄位可讓您與 apache Hadoop 和 apache Ranger 整合,以進行 Azure Data Lake Storage Gen2 工作負載。 使用 SAS 權杖上的下列其中一個欄位來指定安全性主體的物件識別碼:

  • saoid欄位指定使用者委派金鑰擁有者授權的 Azure AD 安全性主體的物件識別碼,以執行 SAS 權杖所授與的動作。 Azure 儲存體會驗證 SAS 權杖,並確保使用者委派金鑰的擁有者在授與存取權之前,具有必要的許可權。 不會執行 POSIX Acl 的其他許可權檢查。
  • suoid當儲存體帳戶啟用階層式命名空間時,此欄位會指定 Azure AD 安全性主體的物件識別碼。 此 suoid 欄位僅適用于具有階層命名空間的帳戶。 當 suoid 欄位包含在 SAS 權杖中時,Azure 儲存體會在授權作業之前,對物件識別碼執行 POSIX ACL 檢查。 如果此 ACL 檢查失敗,則作業會失敗。 如果該 suoid 欄位包含在 SAS 權杖中,則必須為儲存體帳戶啟用階層式命名空間。 否則,許可權檢查將會失敗,併發生授權錯誤。

要求使用者委派金鑰之安全性主體的物件識別碼,會在必要欄位中加以捕捉 skoid 。 若要使用或欄位指定 SAS 權杖上的物件 saoid 識別碼 suoidskoid 必須將包含 Microsoft 的 RBAC 角色指派給欄位中所識別的安全性主體 。儲存體/storageAccounts/blobServices/containers/blobs/runAsSuperUser/actionMicrosoft. 儲存體/storageAccounts/blobServices/containers/blobs/manageOwnership/action。 如需這些動作的詳細資訊,請參閱 Azure 資源提供者作業

在或欄位中指定物件 saoid 識別碼 suoid 也會限制與目錄或 blob 擁有權相關的作業:

  • 如果作業建立目錄或 blob,則 Azure 儲存體會將目錄或 blob 的擁有者設定為物件識別碼所指定的值。 如果未指定物件識別碼,Azure 儲存體會將目錄或 blob 的擁有者設定為參數所指定的值 skoid
  • 如果在父目錄上設定了粘滯位,且作業刪除或重新命名目錄或 blob,則父目錄的擁有者物件識別碼或資源的擁有者必須符合物件識別碼所指定的值。
  • 如果作業設定目錄或 blob 的擁有者 x-ms-owner ,並指定標頭,則物件識別碼指定的值必須符合標頭所指定的值 x-ms-owner
  • 如果作業設定目錄或 blob 的群組 x-ms-group ,並指定標頭,則物件識別碼指定的值必須是標頭所指定之群組的成員 x-ms-group
  • 如果作業設定目錄或 blob 的許可權或 ACL,則也必須符合下列兩個條件之一:
    • 為物件識別碼指定的值必須是目錄或 blob 的擁有者。
    • signedPermissions sp Ownership o 除了 Permissions (p) 許可權之外, () 欄位的值必須包含 () 許可權。

saoid使用 SAS 權杖提出要求時,在或欄位中指定的物件識別碼 suoid 會包含在診斷記錄中。

saoid suoid 只有當 signedVersion (sv) 欄位設定為2020-02-10 版或更新版本時,才支援或欄位。 只有其中一個欄位可以包含在 SAS 權杖中。

指定相互關聯識別碼

[ signedCorrelationId (scid) ] 欄位指定的相互關聯識別碼,可用來將儲存體審核記錄與產生和散發 SAS 之主體所使用的 audit 記錄相互關聯。 例如,受信任的授權服務通常會有受控識別,可驗證及授權使用者、產生 SAS、將專案新增至本機審核記錄,然後將 sas 傳回給使用者,然後使用 sas 存取 Azure 儲存體資源。 在本機審核記錄和儲存體審核記錄中包含相互關聯識別碼,可讓這些事件稍後相互關聯。 值是不含括弧的 GUID (小寫)。

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

指定目錄深度

如果 signedResource 欄位 () 指定目錄 sr=d ,則您也必須指定 signedDirectoryDepth (sdd) 欄位來指出根目錄下的子目錄數目。 欄位的值 sdd 必須是非負整數。

例如,根目錄的 https://{account}.blob.core.windows.net/{container}/ 深度為0。 根目錄底下的每個子目錄都會以1為深度加入。 目錄的 https://{account}.blob.core.windows.net/{container}/d1/d2 深度為二。

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

指定要覆寫回應標頭的查詢參數

若要定義在要求中使用共用存取簽章時,所要傳回的特定回應標頭值,您可以在查詢參數中指定回應標頭。 回應標頭及對應的查詢參數如下:

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

例如,如果您 rsct=binary 在 SAS 權杖上指定查詢參數,則 Content-Type 回應標頭會設為 binary 。 此值只會覆寫針對使用此共用存取簽章的要求之 Blob 儲存的 Content-Type 標頭值。

如果您建立的共用存取簽章會將回應標頭指定為查詢參數,您必須在用來建立簽章字串的字串對符號中包含這些回應標頭。 如需詳細資訊,請參閱下面的「建立簽章 字串 」一節。

指定加密範圍

signed encryption scope (ses) 欄位會指定用戶端應用程式在透過PUT Blob透過 SAS 權杖上傳 blob 時,可使用的加密範圍。 當您的 signed encryption scope SAS 權杖上的已簽署版本 (sv) 欄位為2020-12-06 版或更新版本時,就會支援此欄位。 如果 [已簽署的版本] 欄位指定的版本早于支援的版本,服務會傳回錯誤回應碼 403 (禁止的) 。

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

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

指定簽章

[ signature (sig) ] 欄位是用來授權用戶端使用共用存取簽章提出的要求。 字串到符號是由必須經過驗證才能授權要求的欄位所建立的唯一字串。 簽章是使用簽署字串 (string-to-sign) 和使用 SHA256 演算法的金鑰計算的 HMAC,並會接著使用 Base64 編碼進行編碼。

若要建立使用者委派 SAS 的簽章字串,請先從組成要求的欄位建立字串對符號,然後將字串編碼為 UTF-8,然後使用 HMAC-SHA256 演算法來計算簽章。 字串對符號中包含的欄位必須進行 URL 解碼。 針對字串對符號,請使用下列格式:

StringToSign = sp + "\n" +  
 st + "\n" +  
 se + "\n" +  
 canonicalizedResource + "\n" +  
 skoid + "\n" +
 sktid + "\n" +
 skt + "\n" +
 ske  + "\n" +
 sks + "\n" +
 skv + "\n" +
 saoid + "\n" +
 suoid + "\n" +
 scid + "\n" +
 sip + "\n" +  
 spr + "\n" +  
 sv + "\n" +  
 sr + "\n" +
 rscc + "\n" +
 rscd + "\n" +  
 rsce + "\n" +  
 rscl + "\n" +  
 rsct

驗證版本2020-02-10 或更高版本的字串對符號格式如下:

StringToSign = signedPermissions + "\n" +
                   signedStart + "\n" +
                   signedExpiry + "\n" +
                   canonicalizedResource + "\n" +
                   signedKeyObjectId + "\n" +
                   signedKeyTenantId + "\n" +
                   signedKeyStart + "\n" +
                   signedKeyExpiry  + "\n" +
                   signedKeyService + "\n" +
                   signedKeyVersion + "\n" +
                   signedAuthorizedUserObjectId + "\n" +
                   signedUnauthorizedUserObjectId + "\n" +
                   signedCorrelationId + "\n" +
                   signedIP + "\n" +
                   signedProtocol + "\n" +
                   signedVersion + "\n" +
                   signedResource + "\n" +
                   signedSnapshotTime + "\n" +
                   rscc + "\n" +
                   rscd + "\n" +
                   rsce + "\n" +
                   rscl + "\n" +
                   rsct

驗證版本2020-12-06 或更高版本的字串對符號格式如下:

StringToSign = signedPermissions + "\n" +
                   signedStart + "\n" +
                   signedExpiry + "\n" +
                   canonicalizedResource + "\n" +
                   signedKeyObjectId + "\n" +
                   signedKeyTenantId + "\n" +
                   signedKeyStart + "\n" +
                   signedKeyExpiry  + "\n" +
                   signedKeyService + "\n" +
                   signedKeyVersion + "\n" +
                   signedAuthorizedUserObjectId + "\n" +
                   signedUnauthorizedUserObjectId + "\n" +
                   signedCorrelationId + "\n" +
                   signedIP + "\n" +
                   signedProtocol + "\n" +
                   signedVersion + "\n" +
                   signedResource + "\n" +
                   signedSnapshotTime + "\n" +
                   signedEncryptionScope + "\n" +
                   rscc + "\n" +
                   rscd + "\n" +
                   rsce + "\n" +
                   rscl + "\n" +
                   rsct

正式資源

字串的 canonicalizedresouce 部分是已簽署資源的標準路徑。 它必須包含 Blob 服務端點和資源名稱,而且必須進行 URL 解碼。 Blob 路徑必須包含它的容器。 目錄路徑必須包含對應至參數的子目錄數目 sdd

針對可存取該容器的 SAS,容器的正式資源字串必須省略尾端斜線 ( '/' ) 。

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

(Azure Blob 儲存體) 的容器範例
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
(Azure Blob 儲存體) 的 blob 範例
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
容器範例 (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
目錄範例 (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Blob 範例 (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

選用欄位

如果欄位是選擇性的,且未提供作為 SAS 權杖的一部分,請指定該欄位的空字串。 請務必在空白字串之後包含新行字元 (\n)。

撤銷使用者委派 SAS

如果您認為 SAS 遭到入侵,則應該撤銷 SAS。 您可以撤銷使用者委派金鑰,或變更或移除用來建立 SAS 之安全性主體的 RBAC 角色指派,以撤銷使用者委派 SAS。

重要

Azure 儲存體會快取使用者委派金鑰和 RBAC 角色指派,因此當您起始撤銷的進程以及現有的使用者委派 SAS 失效時,可能會有延遲。

撤銷使用者委派金鑰

您可以藉由呼叫 Revoke 使用者委派 金鑰操作來撤銷使用者委派金鑰。 當您撤銷使用者委派金鑰時,依賴該金鑰的任何共用存取簽章都會變成無效。 然後,您可以再次呼叫「 取得使用者委派金鑰 」作業,並使用此金鑰來建立新的共用存取簽章。 這種方法是撤銷使用者委派 SAS 的最快方法。

變更或移除角色指派

您可以針對用來建立 SAS 的安全性主體,變更或移除 RBAC 角色指派。 當用戶端使用 SAS 來存取資源時,Azure 儲存體會確認用來保護 SAS 之認證的安全性主體具有資源的指定許可權。

另請參閱