我已经在Azure中设置了具有托管身份的VM计算机。我在这里遵循指南https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-linux-vm-access-arm
所以现在我有了访问令牌。但是我不明白的是如何使用此令牌访问密钥库?我正在使用Python SDK。在此处查看SDK的文档https://docs.microsoft.com/en-us/python/api/azure-keyvault/azure.keyvault?view=azure-python
[存在访问令牌类AccessToken(scheme, token, key)
我假设我可以使用在此之前生成的令牌。但是什么是方案和关键?该文档没有解释。还是我看错了要与令牌一起使用的类?
我不建议您使用VM的托管身份来访问KeyVault。如果要运行脚本/代码,则应创建服务主体。
最佳方法是使用Azure CLI。有关安装CLI的说明,请参见here,并参考this或this创建服务主体。
在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凭据的设备一样安全。