从 python 中的 azure keyvault 检索机密列表
Retrieving list of secrets from azure keyvault in python
我正在尝试使用 python sdk 从 azure keyvault 中检索和打印机密列表。
以下returns一个paged.SecretItemPaged对象:
from azure.keyvault import KeyVaultClient, KeyVaultAuthentication
from azure.common.credentials import ServicePrincipalCredentials
az_client_id = '*****'
az_secret = '*****'
az_tenant = '*****'
credentials = None
def auth_callback(server, resource, scope):
credentials = ServicePrincipalCredentials(
client_id=az_client_id,
secret=az_secret,
tenant=az_tenant,
resource="https://vault.azure.net"
)
token = credentials.token
return token['token_type'], token['access_token']
client = KeyVaultClient(KeyVaultAuthentication(auth_callback))
secrets = client.get_secrets('https://thevault.vault.azure.net/')
print('vault secrets:\n{}'.format(secrets))
例如:
vault secrets:
<azure.keyvault.models.secret_item_paged.SecretItemPaged object at 0x7fc494c78b38>
我不确定如何处理这个对象。文档没有给我任何提示,除非我错过了什么。
SecretItemPaged 页面是一个 iterator 对象,这意味着如果需要,您可以直接在 for 循环中使用它:
for item in secrets:
print_my_secret(item)
或将其更改为列表
secrets_as_list = list(secrets)
这里没有魔法,它只是 Python 的迭代器协议。您还可以使用 next
,并捕获 StopIteration
异常等
查看get_secrets
方法,the doc tells you what kind if object it conveys:
而SecretItem
是documented here。
请注意,所有 SDK 对象都有一个 as_dict
方法,如果您更喜欢将其作为字典而不是具有属性的对象来处理的话。
不要使用 current_page
属性。如果您的秘密多于默认 JSON 可以处理的数量,迭代器协议实现会隐藏,以便您从 Azure 获取多个页面。在执行 list(secrets)
时,您可能会获取 10 个页面并对 Azure 进行 10 次调用,您不知道,您不关心 :)。 current_page
是最后一页的状态。它不是整个元素列表。
(我在这个 SDK 团队的 MS 工作)
编辑Dec/2020
答案仍然有效,尽管功能已移至 azure-keyvault-secrets package instead. Therefore, import are sligtly different, see sample for reading secrets from KeyVault。
我正在尝试使用 python sdk 从 azure keyvault 中检索和打印机密列表。
以下returns一个paged.SecretItemPaged对象:
from azure.keyvault import KeyVaultClient, KeyVaultAuthentication
from azure.common.credentials import ServicePrincipalCredentials
az_client_id = '*****'
az_secret = '*****'
az_tenant = '*****'
credentials = None
def auth_callback(server, resource, scope):
credentials = ServicePrincipalCredentials(
client_id=az_client_id,
secret=az_secret,
tenant=az_tenant,
resource="https://vault.azure.net"
)
token = credentials.token
return token['token_type'], token['access_token']
client = KeyVaultClient(KeyVaultAuthentication(auth_callback))
secrets = client.get_secrets('https://thevault.vault.azure.net/')
print('vault secrets:\n{}'.format(secrets))
例如:
vault secrets:
<azure.keyvault.models.secret_item_paged.SecretItemPaged object at 0x7fc494c78b38>
我不确定如何处理这个对象。文档没有给我任何提示,除非我错过了什么。
SecretItemPaged 页面是一个 iterator 对象,这意味着如果需要,您可以直接在 for 循环中使用它:
for item in secrets:
print_my_secret(item)
或将其更改为列表
secrets_as_list = list(secrets)
这里没有魔法,它只是 Python 的迭代器协议。您还可以使用 next
,并捕获 StopIteration
异常等
查看get_secrets
方法,the doc tells you what kind if object it conveys:
而SecretItem
是documented here。
请注意,所有 SDK 对象都有一个 as_dict
方法,如果您更喜欢将其作为字典而不是具有属性的对象来处理的话。
不要使用 current_page
属性。如果您的秘密多于默认 JSON 可以处理的数量,迭代器协议实现会隐藏,以便您从 Azure 获取多个页面。在执行 list(secrets)
时,您可能会获取 10 个页面并对 Azure 进行 10 次调用,您不知道,您不关心 :)。 current_page
是最后一页的状态。它不是整个元素列表。
(我在这个 SDK 团队的 MS 工作)
编辑Dec/2020
答案仍然有效,尽管功能已移至 azure-keyvault-secrets package instead. Therefore, import are sligtly different, see sample for reading secrets from KeyVault。