建立使用者委派 SAS
重要
為了獲得最佳安全性,Microsoft建議盡可能使用具有受控識別的 Microsoft Entra ID 來授權對 Blob、佇列和數據表數據的要求。 具有Microsoft Entra標識符和受控識別的授權,提供優於共用密鑰授權的安全性和使用便利性。 若要深入瞭解,請參閱使用 Microsoft Entra ID
針對裝載於 Azure 外部的資源,例如內部部署應用程式,您可以透過 Azure Arc 使用受控識別。例如,在已啟用 Azure Arc 的伺服器上執行的應用程式可以使用受控識別來連線到 Azure 服務。 若要深入瞭解,請參閱 使用已啟用 Azure Arc 的伺服器對 Azure 資源進行驗證。
您可以使用 Microsoft Entra 認證或帳戶密鑰來保護共用存取簽章 (SAS) 令牌,以存取容器、目錄或 Blob。 使用 Microsoft Entra 認證保護的 SAS 稱為 SAS 使用者委派 SAS。 作為安全性最佳做法,建議您盡可能使用 Microsoft Entra 認證,而不是帳戶密鑰,這更容易遭到入侵。 當您的應用程式設計需要共用存取簽章時,請使用 Microsoft Entra 認證來建立使用者委派 SAS,以協助確保更好的安全性。
每個 SAS 都會使用金鑰簽署。 若要建立使用者委派 SAS,您必須先要求 使用者委派密鑰,然後用來簽署 SAS。 使用者委派密鑰類似於用來簽署服務 SAS 或帳戶 SAS 的帳戶密鑰,不同之處在於它依賴您的 Microsoft Entra 認證。 若要要求使用者委派密鑰,請呼叫 取得使用者委派密鑰 作業。 然後,您可以使用使用者委派密鑰來建立 SAS。
Azure Blob 記憶體和 Azure Data Lake Storage 支援使用者委派 SAS。 使用者委派 SAS 不支援預存存取原則。
謹慎
共用存取簽章是授與記憶體資源許可權的金鑰,您應該保護它們,就像保護帳戶密鑰一樣。 請務必保護 SAS 免於惡意或非預期的使用。 在散發SAS時使用自由裁量權,並有撤銷遭入侵SAS的計劃。 使用共用存取簽章的作業應該只透過 HTTPS 連線執行,而共用存取簽章 URI 應該只會分散在安全連線上,例如 HTTPS。
如需使用您的帳戶金鑰來保護 SAS 的資訊,請參閱 建立服務 SAS 和 建立帳戶 SAS。
目錄範圍存取的使用者委派 SAS 支援
當使用者委派 SAS 支援目錄範圍 (sr=d
)時,授權版本 (sv
) 為 2020-02-10 或更新版本,並啟用階層命名空間 (HNS)。 目錄範圍 (sr=d
) 的語意類似於容器範圍 (sr=c
),不同之處在於存取僅限於目錄及其內的任何檔案和子目錄。 指定 sr=d
時,也需要 sdd
查詢參數。
授權版本 2020-02-10 的字串對簽署格式不會變更。
使用者委派 SAS 對使用者 OID 的支援
當使用者授權版本 (saoid
) 為 2020-02-10 或更新版本時,使用者委派 SAS 支援在 suoid
或 sv
參數中攜帶的選擇性用戶物件識別符。
saoid
和 suoid
參數會對應至使用 SAS 的使用者的安全性主體,併為 Hadoop 和 Spark 等多使用者叢集工作負載提供增強的授權模型。
SAS 令牌可以受限於特定的文件系統作業和使用者,其提供較不易受攻擊的存取令牌,以更安全地分散到多使用者叢集。 這些功能的其中一個使用案例是 Hadoop ABFS 驅動程式與 Apache Ranger 整合。
若要深入瞭解選擇性 saoid
和 suoid
參數,請參閱 指定已簽署的使用者物件識別碼。
授權使用者委派 SAS
當用戶端使用使用者委派 SAS 存取 Blob 記憶體資源時,對 Azure 記憶體的要求會獲得用來建立 SAS 的 Microsoft Entra 認證。 用戶端對資源的存取權取決於下列許可權:
- 授與給要求使用者委派密鑰之 Microsoft Entra 安全性主體的角色型存取控制 (RBAC) 許可權。
- 授與要求使用者委派密鑰之安全性主體的 POSIX 訪問控制清單 (ACL) 許可權。 只有在 RBAC 許可權無法授與存取權,而且只有在記憶體帳戶上啟用階層命名空間時,才會進行這項額外的檢查。
- 在 SAS 令牌上明確授與的許可權。
此方法提供額外的安全性層級,並協助您避免使用應用程式程式代碼來儲存帳戶存取密鑰。 基於這些原因,使用 Microsoft Entra 認證建立 SAS 是安全性最佳做法。
授與給擁有 SAS 之用戶端的許可權,是已授與給要求使用者委派密鑰之安全性主體之許可權的交集,以及使用 signedPermissions
[sp
] 字段授與 SAS 令牌上資源的許可權。 如果透過 RBAC 或 POSIX ACL 授與給安全性主體的許可權並未在 SAS 令牌上授與,則不會將該許可權授與給嘗試使用 SAS 存取資源的用戶端。 當您建立使用者委派 SAS 時,請確定透過 RBAC 和 POSIX ACL 授與的許可權,以及透過 SAS 令牌授與的許可權,都符合用戶端所需的存取層級。
若要建立使用者委派 SAS,請執行下列動作:
- 使用 RBAC 或 POSIX ACL,將所需的許可權授與將要求使用者委派密鑰的安全性主體。
- 從 Microsoft Entra 識別碼取得 OAuth 2.0 令牌。
- 藉由呼叫 取得使用者委派密鑰 作業,使用令牌來要求使用者委派密鑰。
- 使用使用者委派密鑰,以適當的欄位建構 SAS 令牌。
使用 RBAC 指派許可權
要求使用者委派密鑰的安全性主體必須具備適當的許可權才能執行此動作。 Microsoft Entra ID 安全性主體可以是使用者、群組、服務主體或受控識別。
若要要求使用者委派密鑰,您必須將 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作指派給安全性主體。 下列內建 RBAC 角色包括 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作,明確或作為通配符定義的一部分:
因為 取得使用者委派密鑰 作業在記憶體帳戶層級運作,因此 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的範圍必須位於儲存體帳戶、資源群組或訂用帳戶的層級。 如果已指派任何先前列出的安全性主體、內建角色或自定義角色,其中包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作,則安全性主體可以在記憶體帳戶、資源群組或訂用帳戶層級要求使用者委派密鑰。
如果安全性主體獲派角色允許數據存取,但範圍設定為容器層級,您可以另外將 記憶體 Blob 委派器 角色指派給記憶體帳戶、資源群組或訂用帳戶層級的安全性主體。 記憶體 Blob 委派器 角色會授與安全性主體許可權,以要求使用者委派密鑰。
如需 Azure 記憶體 RBAC 角色的詳細資訊,請參閱使用 Microsoft Entra 授權 。
取得 OAuth 2.0 令牌
若要取得使用者委派密鑰,請先從 entra 識別碼Microsoft要求 OAuth 2.0 令牌。 提供令牌與持有人配置,以授權呼叫 取得使用者委派密鑰 作業。 如需從 Microsoft Entra ID 要求 OAuth 令牌的詳細資訊,請參閱
要求使用者委派金鑰
取得使用者委派密鑰 作業的呼叫會傳回密鑰做為使用者委派 SAS 令牌上參數的一組值。 這些參數會在 取得使用者委派密鑰 參考和下一節中描述:「建構使用者委派 SAS」。
當用戶端使用 OAuth 2.0 令牌要求使用者委派密鑰時,Azure 記憶體會代表安全性主體傳回使用者委派密鑰。 使用使用者委派密鑰建立的 SAS 會獲得授與安全性主體的許可權。
擁有使用者委派金鑰之後,您可以使用它,在金鑰存留期內建立任意數目的使用者委派共用存取簽章。 使用者委派金鑰與您用來取得它的 OAuth 2.0 令牌無關,因此只要密鑰仍然有效,就不需要更新令牌。 您可以指定金鑰的有效期間最多為七天。
建構使用者委派 SAS
下表摘要說明使用者委派 SAS 令牌支援的欄位。 後續章節提供有關如何指定這些參數的其他詳細數據。
SAS 功能變數名稱 | SAS 令牌參數 | 必要或選擇性 | 版本支援 | 描述 |
---|---|---|---|---|
signedVersion |
sv |
必填 | 2018-11-09 和更新版本 | 指出用來建構簽章欄位的服務版本。 它也會指定服務版本,以處理使用此 SAS 提出的要求。 |
signedResource |
sr |
必填 | 都 | 指定可透過共用存取簽章存取哪些 Blob 資源。 |
signedStart |
st |
自選 | 都 | 自選。 共用存取簽章生效的時間,以其中一個可接受的 ISO 8601 UTC 格式表示。 如果省略這個值,則會使用目前的UTC時間做為開始時間。 如需已接受 UTC 格式的詳細資訊,請參閱 格式 DateTime 值。 |
signedExpiry |
se |
必填 | 都 | 共用存取簽章變成無效的時間,以其中一個可接受的 ISO 8601 UTC 格式表示。 如需已接受 UTC 格式的詳細資訊,請參閱 格式 DateTime 值。 |
signedPermissions |
sp |
必填 | 都 | 指出擁有SAS的用戶端可以在資源上執行的作業。 許可權可以合併。 |
signedIp |
sip |
自選 | 2015-04-05 和更新版本 | 指定要接受要求的IP位址或包含的IP位址範圍。 當您指定範圍時,請記住範圍是內含的。 僅支援 IPv4 位址。 例如, sip=198.51.100.0 或 sip=198.51.100.10-198.51.100.20 。 |
signedProtocol |
spr |
自選 | 2015-04-05 和更新版本 | 指定允許使用 SAS 提出要求的通訊協定。 包含此欄位,以要求向 SAS 令牌提出的要求使用 HTTPS。 |
signedObjectId |
skoid |
必填 | 2018-11-09 和更新版本 | 指定Microsoft Entra 安全性主體的物件標識符。 此物件標識碼會對應至要求使用者委派密鑰的安全性主體。 在授權作業之前,Azure 記憶體會根據物件識別元檢查 RBAC 許可權。 如果 RBAC 許可權無法授與存取權,則 Azure 記憶體會根據物件識別碼檢查 POSIX ACL 許可權。 |
signedTenantId |
sktid |
必填 | 2018-11-09 和更新版本 | 指定定義安全性主體的 Microsoft Entra 租使用者。 |
signedKeyStartTime |
skt |
必填。 | 2018-11-09 和更新版本 | 取得使用者委派密鑰 作業會傳回值。 表示使用者委派密鑰存留期的開始,以其中一種可接受的 ISO 8601 UTC 格式表示。 如需已接受 UTC 格式的詳細資訊,請參閱 格式 DateTime 值。 |
signedKeyExpiryTime |
ske |
必填 | 2018-11-09 和更新版本 | 取得使用者委派密鑰 作業會傳回值。 表示使用者委派密鑰的存留期結束,以其中一個可接受的 ISO 8601 UTC 格式表示。 如需已接受 UTC 格式的詳細資訊,請參閱 格式 DateTime 值。 |
signedKeyVersion |
skv |
必填 | 2018-11-09 和更新版本 | 取得使用者委派密鑰 作業會傳回值。 指定用來取得使用者委派金鑰的記憶體服務版本。 此欄位必須指定版本 2018-11-09 或更新版本。 |
signedKeyService |
sks |
必填 | 2018-11-09 和更新版本 | 指出使用者委派金鑰有效的服務。 目前僅支援 Blob 記憶體。 |
signedAuthorizedObjectId |
saoid |
自選 | 2020-02-10 及更新版本 | 指定由使用者委派密鑰擁有者授權之 entra 安全性主體的物件 Microsoft識別碼,以執行 SAS 令牌所授與的動作。 此物件標識碼會對應至 SAS 使用者的安全性主體。 不會執行 POSIX 存取控制清單 (ACL) 的其他權限檢查。 |
signedUnauthorizedObjectId |
suoid |
自選 | 2020-02-10 及更新版本 | 指定啟用階層命名空間時,Microsoft Entra 安全性主體的物件標識符。 此物件標識碼會對應至 SAS 使用者的安全性主體。 Azure 記憶體會在授權作業之前,先對對物件識別碼執行 POSIX ACL 檢查。 |
signedCorrelationId |
scid |
自選 | 2020-02-10 及更新版本 | 將記憶體稽核記錄與產生和散發 SAS 之主體所使用的稽核記錄相互關聯。 |
signedDirectoryDepth |
sdd |
sr=d 時需要 |
2020-02-10 及更新版本 | 指出 string-to-sign canonicalizedResource 欄位中所指定目錄根資料夾中的目錄數目。 |
signedEncryptionScope |
ses |
自選 | 2020-12-06 和更新版本 | 表示用來加密要求內容的加密範圍。 |
signature |
sig |
必填 | 都 | 簽章是以哈希為基礎的訊息驗證碼 (HMAC),會使用SHA256演算法透過字串對簽署和密鑰進行計算,然後使用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 格式的詳細資訊,請參閱 格式 DateTime 值。
指定許可權
SAS 令牌上 signedPermissions
(sp
) 欄位所指定的許可權,表示擁有 SAS 的用戶端可以在資源上執行的作業。
您可以合併許可權,以允許用戶端使用相同的SAS執行多個作業。 當您建構 SAS 時,必須依下列順序包含權限:
racwdxltmeop
容器的有效權限設定範例包括 rw
、rd
、rl
、wd
、wl
和 rl
。 不合法設定的範例包括 wr
、dr
、lr
和 dw
。 不允許多次指定許可權。
使用者委派 SAS 無法授與特定作業的存取權:
- 無法建立、刪除或列出容器。
- 容器元數據和屬性無法讀取或寫入。
- 容器無法租用。
若要建構授與這些作業存取權的 SAS,請使用帳戶 SAS。 如需詳細資訊,請參閱 建立帳戶 SAS。
下表說明每個資源類型所支援的權限:
許可 | URI 符號 | 資源 | 版本支援 | 允許的作業 |
---|---|---|---|---|
讀 | r | 容器 目錄 Blob |
都 | 讀取容器或目錄中任何 Blob 的內容、封鎖清單、屬性和元數據。 使用 Blob 做為複製作業的來源。 |
加 | 一個 | 容器 目錄 Blob |
都 | 將區塊新增至附加 Blob。 |
創造 | c | 容器 目錄 Blob |
都 | 寫入新的 Blob、建立 Blob 快照集,或將 Blob 複製到新的 Blob。 |
寫 | w | 容器 目錄 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 快照集或版本。 |
清單 | l | 容器 目錄 |
都 | 以非遞歸方式列出 Blob。 |
標籤 | t | Blob | 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。 |
設定不變性原則 | 我 | 容器 Blob |
2020-06-12 和更新版本 | 設定或刪除 Blob 上的不變性原則或法律保留。 |
指定IP位址或IP範圍
選擇性 signedIp
(sip
) 欄位會指定要接受要求的公用IP位址或公用IP位址範圍。 如果要求的來源IP位址不符合SAS令牌上指定的IP位址或位址範圍,則要求未獲得授權。 僅支援 IPv4 位址。
當您指定IP位址的範圍時,範圍是內含的。 例如,在SAS上指定 sip=198.51.100.0
或 sip=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 通訊協定
選擇性 signedProtocol
(spr
) 欄位會指定允許使用 SAS 提出要求的通訊協定。 可能的值為 HTTPS 和 HTTP (https,http
) 或僅限 HTTPS (https
)。 預設值為 https,http
。
注意
無法為 [spr
] 字段指定 HTTP。
指定已簽署的物件識別碼
使用者委派 SAS 需要 signedObjectId
(skoid
) 欄位。
取得使用者委派密鑰 作業會傳回此值作為回應的一部分。 已簽署的物件識別碼是 GUID 值,可提供Microsoft身分識別平台中安全性主體的固定標識符。
指定已簽署的租用戶標識碼
使用者委派 SAS 需要 signedTenantId
(sktid
) 欄位。
取得使用者委派密鑰 作業會傳回此值作為回應的一部分。 已簽署的租使用者標識碼是 GUID 值,代表定義安全性主體的 Microsoft Entra 租使用者。
指定已簽署的金鑰開始時間
必要 signedKeyStartTime
(skt
) 字段會以 ISO 日期格式指出使用者委派金鑰存留期的開始時間。
取得使用者委派密鑰 作業會傳回此值作為回應的一部分。
指定已簽署的金鑰到期時間
ISO 日期格式的使用者委派 SAS 需要 signedKeyExpiryTime
(ske
) 字段。
取得使用者委派密鑰 作業會傳回此值作為回應的一部分。 簽署的金鑰到期時間表示使用者委派金鑰的存留期結束。 到期時間的值可能最多是 SAS 開始時間的七天。
指定已簽署的金鑰服務
使用者委派 SAS 需要 signedKeyService
(sks
) 欄位。
取得使用者委派密鑰 作業會傳回此值作為回應的一部分。 已簽署的金鑰服務欄位表示使用者委派金鑰有效的服務。 Blob 記憶體的已簽署金鑰服務欄位值 b
。
指定已簽署的金鑰版本
使用者委派 SAS 需要 signedkeyversion
(skv
) 欄位。
取得使用者委派密鑰 作業會傳回此值作為回應的一部分。 [signedkeyversion
] 字段會指定用來取得使用者委派金鑰的記憶體服務版本。 此欄位必須指定版本 2018-11-09 或更新版本。
指定安全性主體的已簽署用戶物件標識碼
選擇性 signedAuthorizedObjectId
(saoid
) 和 signedUnauthorizedObjectId
(suoid
) 欄位可讓您與適用於 Azure Data Lake Storage 工作負載的 Apache Hadoop 和 Apache Ranger 整合。 在 SAS 令牌上使用下列其中一個字段來指定安全性主體的物件識別碼:
- [
saoid
] 字段會指定由使用者委派密鑰擁有者授權執行 SAS 令牌所授與動作之Microsoft Entra 安全性主體的物件標識符。 Azure 記憶體會驗證 SAS 令牌,並確保 Azure 記憶體授與存取權之前,使用者委派密鑰的擁有者具有必要的許可權。 不會執行 POSIX ACL 的其他許可權檢查。 - 當記憶體帳戶啟用階層命名空間時,[
suoid
] 字段會指定 Microsoft Entra 安全性主體的物件識別符。suoid
欄位僅適用於具有階層命名空間的帳戶。 當 SAS 令牌中包含 [suoid
] 欄位時,Azure 記憶體會在授權作業之前,對對象識別碼執行 POSIX ACL 檢查。 如果此 ACL 檢查失敗,則作業會失敗。 如果 SAS 令牌中包含suoid
欄位,則必須為記憶體帳戶啟用階層式命名空間。 否則,許可權檢查將會失敗,並出現授權錯誤。
要求使用者委派密鑰的安全性主體對象標識符會擷取在必要 skoid
欄位中。 若要使用 [saoid
或 suoid
] 字段在 SAS 令牌上指定物件識別碼, 在 [skoid
] 字段中識別的安全性主體必須指派 RBAC 角色,其中包含 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 或 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action。 如需這些動作的詳細資訊,請參閱
藉由在 [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
) 許可權。
當您使用 SAS 令牌提出要求時,[saoid
] 或 [suoid
] 欄位中指定的物件識別碼會包含在診斷記錄中。
只有當 saoid
(suoid
) 字段設定為 2020-02-10 版或更新版本時,才支援 [signedVersion
] 或 [sv
] 字段。 SAS 令牌中只能包含其中一個字段。
指定相互關聯標識碼
signedCorrelationId
(scid
) 字段會指定相互關聯標識碼,可用來將記憶體稽核記錄與產生和散發 SAS 之主體所使用的稽核記錄相互關聯。 例如,受信任的授權服務通常會有一個受控識別,可驗證和授權使用者、產生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
深度為 2。
2020-02-10 版和更新版本支援此欄位。
指定查詢參數以覆寫響應標頭
若要定義在要求中使用共用存取簽章時要傳回之特定回應標頭的值,您可以在查詢參數中指定回應標頭。 回應標頭和對應的查詢參數如下所示:
回應標頭名稱 | 對應的 SAS 查詢參數 |
---|---|
Cache-Control |
rscc |
Content-Disposition |
rscd |
Content-Encoding |
rsce |
Content-Language |
rscl |
Content-Type |
rsct |
例如,如果您在 SAS 令牌上指定 rsct=binary
查詢參數,Content-Type
回應標頭會設定為 binary
。 這個值只會覆寫使用此共用存取簽章,針對要求儲存給 Blob 的 Content-Type
標頭值。
如果您建立將響應標頭指定為查詢參數的共用存取簽章,則必須將這些響應標頭包含在用來建構簽章字串的字串對簽署中。 如需詳細資訊,請參閱<
指定加密範圍
[signed encryption scope
) 欄位是 2020-12-06 版或更新版本時,支援 [sv
] 字段。 如果已簽署的版本欄位指定的版本早於支援的版本,服務會傳回錯誤回應碼 403(禁止)。
如果為容器或文件系統設定預設加密範圍,ses
欄位會遵守容器加密原則。 如果 ses
查詢參數與 x-ms-default-encryption-scope
標頭不相符,且 x-ms-deny-encryption-scope-override
標頭設定為 true
,則服務會傳回錯誤回應碼 403 (禁止)。
如果在 PUT 要求中同時提供 x-ms-encryption-scope
標頭和 ses
查詢參數,而且有不相符的情況,服務會傳回錯誤回應碼 400 (不正確的要求)。
指定簽章
signature
(sig
) 字段可用來授權客戶端發出具有共用存取簽章的要求。 字串對簽署是從必須驗證以授權要求的欄位建構的唯一字串。 簽章是透過字串對簽署和密鑰計算的 HMAC,方法是使用 SHA256 演算法,然後使用 Base64 編碼進行編碼。
若要建構使用者委派 SAS 的簽章字串,請從構成要求的欄位建立字串對簽署、將字串編碼為 UTF-8,然後使用 HMAC-SHA256 演算法計算簽章。 字串對簽署中包含的字段必須是 URL 譯碼。
字串對簽署中所需的欄位取決於用於授權的服務版本(sv
字段)。 下列各節說明支援使用者委派 SAS 之版本的字串對簽署組態。
版本 2020-12-06 和更新版本
授權版本 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
版本 2020-02-10
授權版本 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-02-10 之前的版本
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" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
標準資源
字串 canonicalizedResource
部分是已簽署資源的正式路徑。 它必須包含 Blob 記憶體端點和資源名稱,而且必須以 URL 譯碼。 Blob 路徑必須包含其容器。 目錄路徑必須包含對應至 sdd
參數的子目錄數目。
容器的正式化資源字串必須省略 SAS 的尾端斜線 (/) 以提供該容器存取權。
下列範例示範如何根據資源類型來建構字串 canonicalizedResource
部分。
容器範例 (Azure Blob 記憶體)
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
Blob 範例 (Azure Blob 記憶體)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/blob/myaccount/music/intro.mp3"
容器範例 (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
目錄範例 (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"
Blob 範例 (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3
canonicalizedResource = "/blob/myaccount/music/intro.mp3"
選擇性欄位
如果欄位是選擇性的,且未提供做為 SAS 令牌的一部分,請為欄位指定空字串。 請務必在空字串後面包含換行符 (\n)。
使用者委派 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&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=198.51.100.10-198.51.100.20&spr=https&sv=2022-11-02&sr=b&sig=<signature>
下表說明 URI 的每個部份:
名字 | SAS 部分 | 描述 |
---|---|---|
資源 URI | https://myaccount.blob.core.windows.net/sascontainer/blob1.txt |
Blob 的位址。 強烈建議您使用 HTTPS。 |
定界符 | ? |
查詢字串前面的分隔符。 分隔符不是 SAS 令牌的一部分。 |
權限 | sp=rw |
SAS 授與的許可權包括 Read (r) 和 Write (w)。 |
開始時間 | st=2023-05-24T01:13:55Z |
以UTC時間指定。 如果您希望 SAS 立即生效,請省略開始時間。 |
到期時間 | se=2023-05-24T09:13:55Z |
以UTC時間指定。 |
物件標識碼 | skoid=<object-id> |
Microsoft Entra 安全性主體。 |
租用戶標識碼 | sktid=<tenant-id> |
註冊安全性主體的 Microsoft Entra 租使用者。 |
金鑰開始時間 | skt=2023-05-24T01:13:55Z |
使用者委派金鑰存留期的開始。 |
金鑰到期時間 | ske=2023-05-24T09:13:55Z |
使用者委派金鑰存留期結束。 |
金鑰服務 | sks=b |
服務值僅支援 Blob 服務。 |
金鑰版本 | skv=2022-11-02 |
用來取得使用者委派金鑰的記憶體服務版本。 |
IP 範圍 | sip=198.51.100.10-198.51.100.20 |
將接受要求的來源IP位址範圍。 |
協定 | spr=https |
只允許使用 HTTPS 的要求。 |
Blob 服務版本 | sv=2022-11-02 |
針對 Azure 記憶體版本 2012-02-12 和更新版本,此參數會指出要使用的版本。 |
資源 | sr=b |
資源是 Blob。 |
簽名 | sig=<signature> |
用來授權 Blob 的存取權。 簽章是透過字串對簽署和密鑰計算的 HMAC,方法是使用 SHA256 演算法,然後使用 Base64 編碼進行編碼。 |
撤銷使用者委派 SAS
如果您認為 SAS 已遭入侵,您應該撤銷它。 您可以撤銷使用者委派密鑰,或變更或移除用來建立 SAS 之安全性主體的 RBAC 角色指派和 POSIX ACL,以撤銷使用者委派 SAS。
重要
Azure 記憶體會快取使用者委派密鑰和 RBAC 角色指派,因此當您起始撤銷程式以及現有使用者委派 SAS 失效時,可能會有延遲。
撤銷使用者委派金鑰
您可以呼叫 撤銷使用者委派金鑰 作業來撤銷使用者委派密鑰。 當您撤銷使用者委派密鑰時,依賴該金鑰的任何共用存取簽章都會變成無效。 然後,您可以再次呼叫 取得使用者委派密鑰 作業,並使用密鑰來建立新的共用存取簽章。 這是撤銷使用者委派SAS的最快速方式。
變更或移除角色指派或 ACL
您可以變更或移除用來建立 SAS 之安全性主體的 RBAC 角色指派和 POSIX ACL。 當用戶端使用 SAS 來存取資源時,Azure 記憶體會驗證其認證用來保護 SAS 的安全性主體具有資源的必要許可權。