我已经在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)
我假设我可以使用在此之前生成的令牌。但是什么是方案和关键?该文档没有解释。还是我看错了要与令牌一起使用的类?
答案 0 :(得分:2)
如果您使用具有托管标识的 VM,则可以使用 azure-identity 的 ManagedIdentityCredential
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,有关创建服务主体的信息,请参见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凭据的设备一样安全。