有没有更安全的方法来使用Azure SDK中的WorkloadIdentityCredential Python类?

问题描述 投票:0回答:1

我之前使用 ClientSecretCredential 类通过 Azure SDK 进行身份验证,但服务主体更改为工作负载联合身份验证模型,因此我改用 WorkloadIdentityCredential 身份验证,但这要求令牌位于文件中,因此为令牌创建一个临时文件,但是有更好/更安全的方法吗?

这是最初的认证

credential = ClientSecretCredential(tenant_id = args.tenant, client_id = args.client_id, client_secret = args.client_secret)

这是我目前一直在用的

temp_token_file = "temp_token_file.txt"
with open(temp_token_file, "w") as f:
    f.write(args.oidc_token)    
credential = WorkloadIdentityCredential(tenant_id=args.tenant, client_id=args.client_id, token_file_path=temp_token_file) 
python azure azure-devops azure-pipelines azure-sdk-python
1个回答
0
投票

通常,支持

WorkloadIdentityCredential
的环境(例如 Azure Kubernetes 服务)将为要使用的凭据设置/注入必要的环境变量(
AZURE_AUTHORITY_HOST
AZURE_CLIENT_ID
AZURE_TENANT_ID
AZURE_FEDERATED_TOKEN_FILE
) 。文件中由
AZURE_FEDERATED_TOKEN_FILE
表示的令牌是短暂的,只能从 Azure 环境内部访问。如果您的环境支持它,那么您可以直接使用
WorkloadIdentityCredential
而不带任何参数:

from azure.identity import WorkloadIdentityCredential

credential = WorkloadIdentityCredential()

但是,由于您似乎可能在 Azure Pipelines 中运行此操作,因此通常建议您使用

AzurePipelineCredential
(前提是您已进行必要的配置)。更多信息这里,以及示例用法:

from azure.identity import AzurePipelinesCredential


service_connection_id = os.environ.get("AZURESUBSCRIPTION_SERVICE_CONNECTION_ID")
client_id = os.environ.get("AZURESUBSCRIPTION_CLIENT_ID")
tenant_id = os.environ.get("AZURESUBSCRIPTION_TENANT_ID")
system_access_token = os.environ.get("SYSTEM_ACCESSTOKEN")
if service_connection_id and client_id and tenant_id and system_access_token:
    credential = AzurePipelinesCredential(
        tenant_id=tenant_id,
        client_id=client_id,
        service_connection_id=service_connection_id,
        system_access_token=system_access_token,
    )
© www.soinside.com 2019 - 2024. All rights reserved.