从python中的Azure Keyvault检索秘密列表

时间:2018-07-29 09:23:27

标签: python azure azure-keyvault

我正在尝试使用python sdk从azure密钥库中检索并打印秘密列表。

以下内容返回一个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>

我不确定如何处理该对象。该文档没有给我任何提示,除非我刚刚错过了一些东西。

1 个答案:

答案 0 :(得分:0)

SecretItemPaged页面是iterator对象,这意味着您可以根据需要直接在for循环内使用它:

for item in secrets:
    print_my_secret(item)

或将其更改为列表

secrets_as_list = list(secrets)

这里没有魔术,这只是Python的迭代器协议。您还可以使用next,并捕获StopIteration异常,等等。

通过查看get_secrets方法,该文档会告诉您它传达的对象是哪种类型: https://docs.microsoft.com/en-us/python/api/azure-keyvault/azure.keyvault.key_vault_client.keyvaultclient?view=azure-python#get-secrets

enter image description here

此处记录了SecretItemhttps://docs.microsoft.com/en-us/python/api/azure-keyvault/azure.keyvault.models.secret_item_py3.secretitem?view=azure-python

请注意,如果您希望将其作为dict而不是具有属性的对象,则所有SDK对象都具有as_dict方法。

请勿使用current_page属性。如果您拥有比默认JSON无法处理的更多机密,则迭代器协议实现会为您隐藏从Azure获取多个页面的过程。做list(secrets)时,您可能会获取10个页面并对Azure进行10次调用,而您并不知道:)。 current_page是最后一页的状态。这不是元素的完整列表。

(我在此SDK团队的MS部门工作)