我正在尝试使用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>
我不确定如何处理该对象。该文档没有给我任何提示,除非我刚刚错过了一些东西。
答案 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
此处记录了SecretItem
:
https://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部门工作)