在Azure中存储服务主体凭据以使用Python验证密钥保管库

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

我目前正在使用Python从Azure blob存储中读取文件并将其存储在数据框中。为了验证blob存储,我使用服务主体凭据从Azure密钥保管库中提取存储帐户密钥。

我的代码如下:

from azure.keyvault import KeyVaultClient, KeyVaultAuthentication
from azure.common.credentials import ServicePrincipalCredentials

def auth_callback(server, resource, scope):
    credentials = ServicePrincipalCredentials(
        client_id = '',
        client_secret='',
        tenant = '',
        resource = "https://samplename.vault.azure.net/"
    )
    token = credentials.token
    return token['token_type'], token['access_token']

client = KeyVaultClient(KeyVaultAuthentication(auth_callback))

key_bundle = client.get_key('https://samplename.vault.azure.net/', '','')
json_key = key_bundle.key 

但是,我必须在代码中保存服务主键,我觉得这不是最好的做法。

我怎么能避免这个?

我还想过将服务主体凭证存储在存储在blob存储中的单独配置文件中,然后从Python中读取它。但这也涉及最终将tee服务主体的凭证存储在文本文件中。

我从Azure Batch运行Python。

python azure service-principal
2个回答
0
投票

最佳答案取决于您执行代码的位置。

如果您在Azure VM,Azure容器或Azure中的任何内容上执行它,那么您的方案正是MSI(托管系统标识)存在的原因:)。我强烈建议您查看MSI文档:https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview

Python SDK完全支持此功能。

如果你在自己的外部环境中执行,那么问题不是特定于Azure的,你可以使用像“keyring”这样的库来处理存储这种秘密:

https://pypi.org/project/keyring/#what-is-python-keyring-lib

(披露:我在Python SDK团队的MS工作)


0
投票

使用Azure Batch的当前最佳实践是为您的服务主体使用基于证书的身份验证。为此,请使用“证书API”(https://docs.microsoft.com/en-us/python/api/azure-batch/azure.batch.operations.certificate_operations.certificateoperations?view=azure-python#add-certificate--certificate-add-options-none--custom-headers-none--raw-false----operation-config-)将证书添加到Batch。然后,在创建池时,可以指定“certificate_references”以将这些证书安装到池中的每个节点(https://docs.microsoft.com/en-us/python/api/azure-batch/azure.batch.models.pooladdparameter?view=azure-python)。

如果您更喜欢使用基于密钥的身份验证,则还可以将密钥指定为池中的环境变量,这些变量将在REST中加密

我们收到了很多添加MSI支持的请求,但目前我不知道计划添加的时间表。

(披露:我在Azure Batch团队的MS工作)

© www.soinside.com 2019 - 2024. All rights reserved.