簡體   English   中英

從 Azure 中的托管標識生成的訪問令牌如何與 Python SDK 一起使用?

[英]How is the access token generated from a managed identity in Azure used with the Python SDK?

我在 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

存在一個訪問令牌 class AccessToken(scheme, token, key)我假設我可以使用我之前在這里生成的令牌。 但是什么是方案和密鑰? 文檔沒有解釋它。 還是我在查看與令牌一起使用的錯誤 class ?

如果你使用的是具有托管標識的 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 中有用於替換azure-keyvault的 Key Vault 的新軟件包:

每個包中的客戶端都可以使用來自azure-identity的任何憑據進行身份驗證。

(我在 Python 中研究 Azure SDK)

我不建議您使用 VM 的托管標識來訪問 KeyVault。 如果您打算運行腳本/代碼,您應該創建一個服務主體。

最好的方法是使用 Azure CLI。 有關安裝 CLI 的說明,請參閱此處,並參閱以創建您的服務主體。

在 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 和租戶 (id) 都是az ad sp create-for-rbac --name {APP-NAME} CLI 命令的輸出。

請記住查看和調整您創建的 sp 的角色分配。 並且您的 KeyVault 僅與有權訪問您的 sp 憑據的設備一樣安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM