使用 azure 存储 python 客户端库时 "connection" 字符串的任何替代方案?

Any alternatives to the "connection" string when using azure storage python client library?

我即将编写我的第一个 python 程序到 read/write 远程 azure 存储 blob(块 blob)。 我做了一些研究。就好像存储“连接字符串”是绝对强制的。换句话说,Microsoft 客户端 python 库需要存储帐户创建的“连接字符串”才能访问远程 blob。

为了让一切尽可能简单,我希望我能写一个小的 python 代码来调用 HTTP GET/PUT 方法(用于访问远程 azure blob 存储资源)无需触及存储帐户生成的“连接字符串”。然而,看了微软的存储文档,似乎不太可能。

任何人都可以发表任何评论来阐明什么吗?提前致谢。

SAS 令牌由 account_name 和 account_key 生成。它们也都在连接字符串中。

使用 SAS 令牌:

from datetime import datetime, timedelta
from azure.storage.blob import BlobServiceClient, generate_account_sas, ResourceTypes, AccountSasPermissions

sas_token = generate_account_sas(
    account_name="<storage-account-name>",
    account_key="<account-access-key>",
    resource_types=ResourceTypes(service=True),
    permission=AccountSasPermissions(read=True),
    expiry=datetime.utcnow() + timedelta(hours=1)
)

blob_service_client = BlobServiceClient(account_url="https://<my_account_name>.blob.core.windows.net", credential=sas_token)

因此您可以使用基于服务主体的 Azure AD 访问令牌进行访问。

使用 Azure AD 访问令牌:

from azure.common.credentials import ServicePrincipalCredentials
from azure.storage.blob import BlockBlobService
from azure.storage.common import TokenCredential

TENANT_ID = "xxxxxx"
CLIENT_ID = "xxxxxx"
CLIENT_SECRET = "xxxxxx"
RESOURCE = "https://storage.azure.com/"

credentials = ServicePrincipalCredentials(
    client_id = CLIENT_ID,
    secret = CLIENT_SECRET,
    tenant = TENANT_ID,
    resource = RESOURCE
) 
token_credential = TokenCredential(credentials.token["access_token"])

ACCOUNT_NAME = "pamelastorage123"
CONTAINER_NAME = "pamelac"
blobService = BlockBlobService(account_name=ACCOUNT_NAME, token_credential=token_credential)
blob = blobService.get_blob_to_text(CONTAINER_NAME, "test.txt")
print(blob.content)

注意:请按照这些 steps 分配 Storage Blob Data Contributor 角色并先注册一个应用程序。

有关身份验证的详细信息,请参阅 here