首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正在从python中的azure密钥库中检索密钥列表

正在从python中的azure密钥库中检索密钥列表
EN

Stack Overflow用户
提问于 2018-07-29 17:23:27
回答 1查看 2.2K关注 0票数 1

我正在尝试使用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>

我不确定如何处理这个对象。文档没有给我任何提示,除非我错过了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-31 00:18:50

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

SecretItemdocumented here

注意,所有SDK对象都有一个as_dict方法,如果你更喜欢将它作为一个dict来处理,而不是一个有属性的对象。

不要使用current_page属性。如果您有超过默认JSON可以处理的秘密,迭代器协议实现将为您隐藏从Azure获取多个页面。当做list(secrets)时,你可能会获取10个页面并调用10次Azure,你不知道,你不关心:)。current_page是最后一页的状态。它不是元素的整个列表。

(我在微软的SDK团队工作)

编辑/2020年12月

答案仍然有效,尽管功能已经移到了azure-keyvault-secrets包中。因此,导入是有细微差别的,请参阅sample for reading secrets from KeyVault

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51578921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档