python - 在 Azure 中存储服务主体凭据以使用 Python 对 Key Vault 进行身份验证
问题描述
我目前正在使用 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,并希望在门户或 python 脚本中不显示任何凭据的情况下访问 Key Vault,因此我需要使用证书而不是密钥。我认为这必须是批处理服务的一个非常常见的用例。
我可以使用 Powershell 脚本中的证书指纹访问 Key Vault,但我可以找到从 python 访问它的唯一方法是将 AZURE_CLIENT_CERTIFICATE_PATH 环境变量设置为指向不受密码保护的 pem 证书并使用 DefaultAzureCredential 类。批处理服务需要受密码保护的 cer 或 pfx 证书,因此任何解决方案都会非常繁琐——我唯一能想到的是将 pfx 转换为 pem,然后设置环境变量,其中 pfx 密码可见代码或门户网站上。
如果有更简单的方法请告诉我。否则我认为这是批处理服务中的一个重大差距,这在其他方面非常有用。
推荐阅读
- mysql - 插入转储 MySQL MariaDB
- java - 了解java代码中最小生成树的一部分
- javascript - 我可以使用 google v8 在 C++ 回调函数中获取 JavaScript 函数的源文本吗?
- python - 在 Dask 中,有没有办法在依赖项可用时处理它们,例如 multiprocessing.imap_unordered?
- javascript - 以下哪个 React shouldComponentUpdate 渲染策略是正确的?
- javascript - 打开另一个页面并滚动到锚点
- python - 在 Python 中查询多个 API 以添加到一个 DataSet 的最佳方法
- firebase - 函数 PubSub 计划未运行
- google-apps-script - 创建按钮以导航到给定的工作表名称
- swift - 这些是什么类型的广告?iAds/Admob?