使用 Azure CLI 為容器或 Blob 建立使用者委派 SAS

共用存取簽章 (SAS) 可讓您對儲存體帳戶中的容器和 Blob 授與有限的存取權。 當您建立 SAS 時,需要指定其條件約束,包括允許用戶端存取的 Azure 儲存體資源、對這些資源的使用權限,以及 SAS 的有效期限。

每個 SAS 都會以金鑰簽署。 您可以使用下列兩種方式之一簽署 SAS:

  • 透過使用 Microsoft Entra 認證建立的金鑰。 使用 Microsoft Entra 認證簽署的 SAS 稱為 使用者委派 SAS。 建立使用者委派 SAS 的用戶端,必須獲指派包含 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 動作的 Azure RBAC 角色。 若要深入了解,請參閱建立使用者委派 SAS。
  • 使用儲存體帳戶金鑰。 服務 SAS 和帳戶 SAS 都使用儲存體帳戶金鑰加以簽署。 凡建立服務 SAS 的用戶端,都必須具備帳戶金鑰的直接存取權,或者被指派 Microsoft.Storage/storageAccounts/listkeys/action 使用權限。 若要深入了解,請參閱建立服務 SAS 或建立帳戶 SAS。

注意

使用者委派 SAS 所提供的安全性比使用儲存體帳戶金鑰簽署的 SAS 提供的更高。 Microsoft 建議盡可能採用使用者委派 SAS。 如需詳細資訊,請參閱使用共用存取簽章 (SAS) 授與資料的有限存取權。

本文說明如何使用 Microsoft Entra 認證,透過 Azure CLI 為容器或 Blob 建立使用者委派 SAS。

關於使用者委派 SAS

用於存取容器或 Blob 的 SAS 權杖,可透過使用 Microsoft Entra 認證或帳戶金鑰加以保護。 使用 Microsoft Entra 認證保護的 SAS 稱為使用者委派 SAS,因為用來簽署 SAS 的 OAuth 2.0 權杖是代表該使用者而要求的。

Microsoft 建議您的安全性最佳做法是盡可能使用 Microsoft Entra 認證,而不是使用帳戶金鑰,因為後者可能更容易遭到盜用。 當您的應用程式設計需要共用存取簽章時,請使用 Microsoft Entra 認證來建立使用者委派 SAS 以獲得較佳的安全性。 如需使用者委派 SAS 的詳細資訊,請參閱建立使用者委派 SAS。

Caution

任何擁有有效 SAS 的客戶端都可以在該 SAS 所允許的儲存帳戶中存取資料。 保護 SAS 防止遭到惡意使用或誤用至關重要。 發放 SAS 時應審慎處理,並事先制定在 SAS 外洩時將其撤銷的應變計畫。 為防止非預期使用,請使用使用者綁定的使用者委派 SAS,該系統將 SAS 憑證綁定於預期終端使用者,且無法被他人使用。

欲了解更多有關共享存取簽章的資訊,請參見使用共享存取簽章(SAS)授予對 Azure 儲存體資源的有限存取權限。

安裝最新版本的 Azure CLI

要使用 Azure CLI 來保護帶有 Microsoft Entra 憑證的 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 參數指定 login,讓對 Azure 儲存體 提出的要求使用您的 Microsoft Entra 認證進行授權。 指定 --as-user 參數,表示回傳的 SAS 應為使用者委派 SAS。

為容器建立使用者委派 SAS

若要為容器建立 user delegation SAS,並使用 Azure CLI,請呼叫 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 建立 user 委派 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 失效之間可能會有延遲。

下一步