使用 Azure CLI 建立容器或 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 CLI,建立容器或 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 儲存體資源的有限存取權

安裝最新版的 Azure CLI

若要透過 Microsoft Entra 認證使用 Azure CLI 來保護 SAS,請先確定您已安裝最新版的 Azure CLI。 如需安裝 Azure CLI 的詳細資訊,請參閱安裝 Azure CLI

若要使用 Azure CLI 建立使用者委派 SAS,請確定您已安裝2.0.78 版或更新版本。 若要檢查已安裝的版本,請使用 az --version 命令。

使用 Microsoft Entra 認證登入

使用您的 Microsoft Entra 認證登入 Azure CLI。 如需詳細資訊,請參閱使用 Azure CLI 登入

使用 Azure RBAC 指派權限

若要從 Azure PowerShell 建立使用者委派 SAS,必須將用來登入 Azure CLI 的 Microsoft Entra 帳戶指派給包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的角色。 此權限可讓該 Microsoft Entra 帳戶要求使用者委派金鑰。 使用者委派金鑰會用來簽署使用者委派 SAS。 您必須將提供 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的角色指派於儲存體帳戶、資源群組或訂用帳戶層級。

如果您沒有足夠的權限可將 Azure 角色指派給 Microsoft Entra 安全性主體,您可能必須要求帳戶擁有者或管理員指派必要的權限。

下列範例會指派儲存體 Blob 資料參與者角色,其中包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作。 角色的範圍是儲存體帳戶層級。

請記得以您自己的值取代角括號中的預留位置值:

az role assignment create \
    --role "Storage Blob Data Contributor" \
    --assignee <email> \
    --scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

如需包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的內建角色詳細資訊,請參閱 Azure 內建角色

使用 Microsoft Entra 認證來保護 SAS

當您使用 Azure CLI 建立使用者委派 SAS 時,會以隱含方式為您建立用來簽署 SAS 的使用者委派金鑰。 您指定的 SAS 開始時間和到期時間也會用來做為使用者委派金鑰的開始時間和到期時間。

由於使用者委派金鑰有效的最大間隔是自開始日期算起 7 天,因此您應該將 SAS 到期時間指定為開始時間的 7 天內。 SAS 在使用者委派金鑰到期後會變為無效,因此到期時間超過 7 天的 SAS 仍僅有 7 天有效。

建立使用者委派 SAS 時,需要 --auth-mode login--as-user parameters。 請指定 --auth-mode 參數的登入,以便使用 Microsoft Entra 認證來授權對 Azure 儲存體提出的要求。 指定 --as-user 參數,以指出傳回的 SAS 應為使用者委派 SAS。

建立容器的使用者委派 SAS

若要使用 Azure CLI 建立容器的使用者委派 SAS,請呼叫 az storage container generate-sas 命令。

容器上的使用者委派 SAS 支援的權限包括新增、建立、刪除、列出、讀取及寫入。 權限可以單獨或合併指定。 如需這些權限的詳細資訊,請參閱建立使用者委派 SAS

下列範例會傳回容器的使用者委派 SAS 權杖。 請記得將括弧中的預留位置值取代為您自己的值:

az storage container generate-sas \
    --account-name <storage-account> \
    --name <container> \
    --permissions acdlrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user

傳回的使用者委派 SAS 權杖類似以下範例:

se=2019-07-27&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sktid=<sktid>&skt=2019-07-26T18%3A01%3A22Z&ske=2019-07-27T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

注意

Blob 儲存體傳回的 SAS 權杖不包含 URL 查詢字串的分隔符號字元 ('?')。 如果您要將 SAS 權杖附加至資源 URL,請記得同時附加分隔符號字元。

建立 Blob 的使用者委派 SAS

若要使用 Azure CLI 建立 Blob 的使用者委派 SAS,請呼叫 az storage blob generate-sas 命令。

Blob 上的使用者委派 SAS 支援的權限包括新增、建立、刪除、讀取及寫入。 權限可以單獨或合併指定。 如需這些權限的詳細資訊,請參閱建立使用者委派 SAS

下列語法會傳回 Blob 的使用者委派 SAS。 此範例指定 --full-uri 參數,會傳回已附加 SAS 權杖的 Blob URI。 請記得將括弧中的預留位置值取代為您自己的值:

az storage blob generate-sas \
    --account-name <storage-account> \
    --container-name <container> \
    --name <blob> \
    --permissions acdrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user \
    --full-uri

傳回的使用者委派 SAS URI 類似以下範例:

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?se=2019-08-03&sp=rw&sv=2018-11-09&sr=b&skoid=<skoid>&sktid=<sktid>&skt=2019-08-02T2
2%3A32%3A01Z&ske=2019-08-03T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>

注意

Azure CLI 傳回的 SAS 權杖不包含 URL 查詢字串的分隔符號字元 ('?')。 如果您要將 SAS 權杖附加至資源 URL,請記得在附加 SAS 權杖之前,先將分隔符號字元附加至資源 URL。

使用者委派 SAS 不支援使用預存存取原則定義權限。

撤銷使用者委派 SAS

若要使用 Azure CLI 撤銷使用者委派 SAS,請呼叫 az storage account revoke-delegation-keys 命令。 此命令會撤銷與指定儲存體帳戶相關聯的所有使用者委派金鑰。 任何與這些金鑰相關聯的共用存取簽章都會失效。

請記得以您自己的值取代角括號中的預留位置值:

az storage account revoke-delegation-keys \
    --name <storage-account> \
    --resource-group <resource-group>

重要

Azure 儲存體會快取使用者委派金鑰和 Azure 角色指派,因此在您起始撤銷程序和現有使用者委派 SAS 失效之間,可能會有延遲。

下一步