使用 PowerShell 建立容器或 Blob 的使用者委派 SAS
共用存取簽章 (SAS) 可讓您對儲存體帳戶中的容器和 Blob 授與有限的存取權。 當您建立 SAS 時,需要指定其條件約束,包括允許用戶端存取的 Azure 儲存體資源、對這些資源的使用權限,以及 SAS 的有效期限。
每個 SAS 都會以金鑰簽署。 您可以使用下列兩種方式之一簽署 SAS:
- 使用 Microsoft Entra 認證建立的金鑰。 使用 Microsoft Entra 認證簽署的 SAS 是一種使用者委派 SAS。 凡建立使用者委派 SAS 的用戶端,都必須被指派包含下列動作的 Azure RBAC 角色:Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey。 若要深入了解,請參閱 建立使用者委派 SAS。
- 使用儲存體帳戶金鑰。 服務 SAS 和帳戶 SAS 都使用儲存體帳戶金鑰加以簽署。 凡建立服務 SAS 的用戶端,都必須具備帳戶金鑰的直接存取權,或者被指派 Microsoft.Storage/storageAccounts/listkeys/action 使用權限。 若要深入了解,請參閱 建立服務 SAS 或 建立帳戶 SAS。
注意
使用者委派 SAS 可以為使用儲存體帳戶金鑰簽署的 SAS 提供絕佳的安全性。 Microsoft 建議盡可能採用使用者委派 SAS。 如需詳細資訊,請參閱使用共用存取簽章 (SAS) 授與資料的有限存取權。
本文會說明如何使用 Microsoft Entra 認證搭配 Azure PowerShell,建立容器或 Blob 的使用者委派 SAS。
關於使用者委派 SAS
您可以使用 Microsoft Entra 認證或帳戶金鑰保護存取容器或 Blob 的 SAS 權杖。 使用 Microsoft Entra 認證保護的 SAS 稱為使用者委派 SAS,因為用來簽署 SAS 的 OAuth 2.0 權杖是代表該使用者要求的。
Microsoft 建議您的安全性最佳做法是盡可能使用 Microsoft Entra 認證,而不是使用帳戶金鑰,因為後者可能更容易遭到盜用。 當您的應用程式設計需要共用存取簽章時,請使用 Microsoft Entra 認證來建立使用者委派 SAS 以獲得較佳的安全性。 如需使用者委派 SAS 的詳細資訊,請參閱建立使用者委派 SAS。
警告
擁有有效 SAS 的任何用戶端在該 SAS 允許的範圍內,可存取儲存體帳戶中的資料。 保護 SAS 防止遭到惡意使用或誤用至關重要。 在散發 SAS 時請謹慎使用,並備妥方案以撤銷遭盜用的 SAS。
如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS) 授與 Azure 儲存體資源的有限存取權。
安裝 PowerShell 模組
若要使用 PowerShell 建立使用者委派 SAS,請安裝 Az.Storage 模組 1.10.0 版或更新版本。 請遵循下列步驟安裝最新版模組:
解除安裝任何先前安裝的 Azure PowerShell:
- 使用 [設定] 底下的 [應用程式與功能],從 Windows 移除任何先前安裝的 Azure PowerShell。
- 從
%Program Files%\WindowsPowerShell\Modules
移除所有 Azure 模組。
確定您已安裝最新版的 PowerShellGet。 開啟 Windows PowerShell 視窗,然後執行下列命令來安裝最新版本:
Install-Module PowerShellGet -Repository PSGallery -Force
在安裝完 PowerShellGet 之後,關閉並重新開啟 PowerShell 視窗。
安裝最新版的 Azure PowerShell:
Install-Module Az -Repository PSGallery -AllowClobber
請確定您已安裝 Azure PowerShell 3.2.0 版或更新版本。 執行下列命令,安裝最新版 Azure 儲存體 PowerShell 模組:
Install-Module -Name Az.Storage -Repository PSGallery -Force
關閉並重新開啟 PowerShell 視窗。
若要檢查已安裝的 Az.Storage 模組版本,請執行下列命令:
Get-Module -ListAvailable -Name Az.Storage -Refresh
如需如何安裝 Azure PowerShell 的詳細資訊,請參閱使用 PowerShellGet 安裝 Azure PowerShell。
使用 Microsoft Entra ID 登入 Azure PowerShell
呼叫 Connect-AzAccount 命令以使用您的 Microsoft Entra 帳戶登入:
Connect-AzAccount
如需使用 PowerShell 登入 Azure 的詳細資訊,請參閱使用 Azure PowerShell 登入。
使用 Azure RBAC 指派權限
若要從 Azure PowerShell 建立使用者委派 SAS,必須將用來登入 PowerShell 的 Microsoft Entra 帳戶指派給包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的角色。 此權限可讓該 Microsoft Entra 帳戶要求使用者委派金鑰。 使用者委派金鑰會用來簽署使用者委派 SAS。 您必須將提供 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的角色指派於儲存體帳戶、資源群組或訂用帳戶層級。 如需有關建立使用者委派 SAS 的 Azure RBAC 權限詳細資訊,請參閱建立使用者委派 SAS 中的<使用 Azure RBAC 指派權限>一節。
如果您沒有足夠的權限可將 Azure 角色指派給 Microsoft Entra 安全性主體,您可能必須要求帳戶擁有者或管理員指派必要的權限。
下列範例會指派儲存體 Blob 資料參與者角色,其中包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作。 角色的範圍是儲存體帳戶層級。
請記得以您自己的值取代角括號中的預留位置值:
New-AzRoleAssignment -SignInName <email> `
-RoleDefinitionName "Storage Blob Data Contributor" `
-Scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"
如需包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的內建角色詳細資訊,請參閱 Azure 內建角色。
使用 Microsoft Entra 認證來保護 SAS
當您使用 Azure PowerShell 建立使用者委派 SAS,會以隱含方式為您建立用來簽署 SAS 的使用者委派金鑰。 您指定的 SAS 開始時間和到期時間也會用來做為使用者委派金鑰的開始時間和到期時間。
由於使用者委派金鑰有效的最大間隔是自開始日期算起 7 天,因此您應該將 SAS 到期時間指定為開始時間的 7 天內。 SAS 在使用者委派金鑰到期後會變為無效,因此到期時間超過 7 天的 SAS 仍僅有 7 天有效。
若要使用 Azure PowerShell 建立容器或 Blob 的使用者委派 SAS,請先建立新的 Azure 儲存體內容物件,並指定 -UseConnectedAccount
參數。 -UseConnectedAccount
參數會指定命令使用您登入的 Microsoft Entra 帳戶,在其下建立內容物件。
請記得以您自己的值取代角括號中的預留位置值:
$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount
建立容器的使用者委派 SAS
若要傳回容器的使用者委派 SAS 權杖,請呼叫 New-AzStorageContainerSASToken 命令,傳入您先前建立的 Azure 儲存體內容物件。
下列範例會傳回容器的使用者委派 SAS 權杖。 請記得將括弧中的預留位置值取代為您自己的值:
New-AzStorageContainerSASToken -Context $ctx `
-Name <container> `
-Permission racwdl `
-ExpiryTime <date-time>
傳回的使用者委派 SAS 權杖類似以下範例:
?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl
建立 Blob 的使用者委派 SAS
若要傳回 Blob 的使用者委派 SAS 權杖,請呼叫 New-AzStorageBlobSASToken 命令,傳入您先前建立的 Azure 儲存體內容物件。
下列語法會傳回 Blob 的使用者委派 SAS。 此範例指定 -FullUri
參數,會傳回已附加 SAS 權杖的 Blob URI。 請記得將括弧中的預留位置值取代為您自己的值:
New-AzStorageBlobSASToken -Context $ctx `
-Container <container> `
-Blob <blob> `
-Permission racwd `
-ExpiryTime <date-time>
-FullUri
傳回的使用者委派 SAS URI 類似以下範例:
https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd
注意
使用者委派 SAS 不支援使用預存存取原則定義權限。
撤銷使用者委派 SAS
若要從 Azure PowerShell 撤銷使用者委派 SAS,請呼叫 Revoke-AzStorageAccountUserDelegationKeys 命令。 此命令會撤銷與指定儲存體帳戶相關聯的所有使用者委派金鑰。 任何與這些金鑰相關聯的共用存取簽章都會失效。
請記得以您自己的值取代角括號中的預留位置值:
Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account>
重要
Azure 儲存體會快取使用者委派金鑰和 Azure 角色指派,因此在您起始撤銷程序和現有使用者委派 SAS 失效之間,可能會有延遲。