使用 Python 建立帳戶 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) 授與資料的有限存取權。
本文說明如何透過適用於 Python 的 Azure 儲存體用戶端程式庫,使用儲存體帳戶金鑰建立帳戶 SAS。
關於帳戶 SAS
帳戶 SAS 是在儲存體帳戶的層級建立。 透過建立帳戶 SAS,您可以:
- 將存取權委派給目前無法與服務特定 SAS 搭配使用的服務層級作業,例如取得 Blob 服務屬性、設定 Blob 服務屬性,以及取得 Blob 服務統計資料。
- 一次委派對儲存體帳戶中多個服務的存取權。 例如,您可以使用帳戶 SAS 委派存取權,以存取 Azure Blob 儲存體和 Azure 檔案儲存體中的資源。
帳戶 SAS 不支援預存的存取原則。
建立帳戶 SAS
帳戶 SAS 會使用帳戶存取金鑰加以簽署。 下列程式碼範例示範如何呼叫 generate_account_sas 方法,以取得帳戶 SAS 權杖字串。
def create_account_sas(self, account_name: str, account_key: str):
# Create an account SAS that's valid for one day
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
# Define the SAS token permissions
sas_permissions=AccountSasPermissions(read=True)
# Define the SAS token resource types
# For this example, we grant access to service-level APIs
sas_resource_types=ResourceTypes(service=True)
sas_token = generate_account_sas(
account_name=account_name,
account_key=account_key,
resource_types=sas_resource_types,
permission=sas_permissions,
expiry=expiry_time,
start=start_time
)
return sas_token
ResourceTypes 建構函式的有效參數如下:
- 服務:預設值為
False
;設定為True
以授與服務層級 API 的存取權。 - 容器:預設值為
False
;設定為True
以授與容器層級 API 的存取權。 - 物件:預設值為
False
;設定為True
以授與 Blob、佇列訊息和檔案的物件層級 API 存取權。
如需可用的權限,請參閱 AccountSasPermissions。
從用戶端使用帳戶 SAS
若要使用帳戶 SAS 來存取 Blob 服務的服務層級 API,請針對您的儲存體帳戶使用帳戶 SAS 和 Blob 儲存體端點,來建立 BlobServiceClient 物件。
# The SAS token string can be appended to the account URL with a ? delimiter
# or passed as the credential argument to the client constructor
account_sas_url = f"{blob_service_client.url}?{sas_token}"
# Create a BlobServiceClient object
blob_service_client_sas = BlobServiceClient(account_url=account_sas_url)
如果這些資源類型被授與作為簽章值一部分的存取權,您也可使用帳戶 SAS 來授權及使用 ContainerClient 物件或 BlobClient 物件。
資源
若要深入了解如何使用適用於 Python 的 Azure Blob 儲存體用戶端程式庫建立帳戶 SAS,請參閱下列資源。