从Azure中的托管身份生成的访问令牌如何与Python SDK一起使用?

时间:2019-10-29 17:10:57

标签: python azure token

我已经在Azure中设置了具有托管身份的VM计算机。 我在这里遵循指南https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-linux-vm-access-arm

所以现在我有了访问令牌。但是我不明白的是如何使用此令牌访问密钥库?我正在使用Python SDK。在https://docs.microsoft.com/en-us/python/api/azure-keyvault/azure.keyvault?view=azure-python

处查看SDK的文档

存在访问令牌类AccessToken(scheme, token, key) 我假设我可以使用在此之前生成的令牌。但是什么是方案和关键?该文档没有解释。还是我看错了要与令牌一起使用的类?

2 个答案:

答案 0 :(得分:2)

如果您使用具有托管标识的 VM,则可以使用 azure-identityManagedIdentityCredential class 为 Key Vault 客户端创建凭据。当您使用 Key Vault 客户端时,凭据将为您获取和使用访问令牌:

from azure.identity import ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient

credential = ManagedIdentityCredential()
client = SecretClient("https://{vault-name}.vault.azure.net", credential)
secret = client.get_secret("secret-name")

请注意,我正在使用 SecretClient 从 Key Vault 中获取机密;有用于在 Python 中使用 Key Vault 的新包替代了 azure-keyvault

每个包中的客户端都可以使用来自 azure-identity 的任何凭据进行身份验证。

(我使用 Python 开发 Azure SDK)

答案 1 :(得分:0)

我不建议您使用VM的托管身份来访问KeyVault。如果打算运行脚本/代码,则应创建服务主体。

执行此操作的最佳方法是使用Azure CLI。有关安装CLI的说明,请参见here,有关创建服务主体的信息,请参见thisthis

在Python中管理资源的最佳方法是使用ADAL,该文档已记录:

https://github.com/AzureAD/azure-activedirectory-library-for-python

但是,在您的情况下,管理KeyVault变得更加容易,因为Python的KeyVault库还为您提供了无需直接使用ADAL即可获取访问令牌的身份验证方法。看到这里:

https://docs.microsoft.com/en-us/python/api/overview/azure/key-vault?view=azure-python

from azure.keyvault import KeyVaultClient
from azure.common.credentials import ServicePrincipalCredentials

credentials = ServicePrincipalCredentials(
    client_id = '...',
    secret = '...',
    tenant = '...'
)

client = KeyVaultClient(credentials)

# VAULT_URL must be in the format 'https://<vaultname>.vault.azure.net'
# KEY_VERSION is required, and can be obtained with the KeyVaultClient.get_key_versions(self, vault_url, key_name) API
key_bundle = client.get_key(VAULT_URL, KEY_NAME, KEY_VERSION)
key = key_bundle.key

在上面,client_id,secret和tenant(id)都是az ad sp create-for-rbac --name {APP-NAME} CLI命令的输出。

请记住要查看和调整您创建的sp的角色分配。而且,您的KeyVault仅与可以访问您的sp凭据的设备一样安全。