使用 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。
我即将编写我的第一个 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。