![](/img/trans.png)
[英]Accessing Azure SQL Server using 1) Python (local script--not going to be Azure function), 2) pyodbc & 3) Azure user-managed identity
[英]How to use User-Managed Identity from Azure Cloud Function (python) in making a request to Azure KeyVault?
我目前的設置:
我的 DevOps 人員創建了一個用戶管理身份並將其添加到 Azure 密鑰保管庫的訪問策略中。
我創建了一個 function 應用程序testing-01
並在平台設置下為其分配了 User-ManagedIdentity。
我使用 Python 3.6 作為運行時語言。
這是我用來檢查是否能夠從密鑰保管庫訪問機密的輔助方法。 我正在回復它的回應。
def cred_checker():
credential = ManagedIdentityCredential()
# credential = ManagedIdentityCredential(client_id='client_id
vault_name= "myvault"
client = SecretClient(vault_url=f"https://{vault_name}.vault.azure.net/", credential=credential)
username = client.get_secret(name="username")
password= client.get_secret(name="password")
return f"AKV client created successfully {client} .<br> name: {username},<br> pass: {password} "
我能夠毫無錯誤地創建客戶端。 但是當我嘗試從中獲取秘密時,我得到了這個 ClientAuthenticationError:
Exception while executing function: Functions.HttpTriggerFunc <--- Result: Failure Exception: ClientAuthenticationError: Unexpected response '{'statusCode': 400, 'message': 'Unable to load requested managed identity.', 'correlationId': '92daf146-fed2-4a75-8359-9r955939815e'}'
當您使用用戶分配的身份時,您需要在ManagedIdentityCredential()
中指定 MSI 的client_id
。
credential = ManagedIdentityCredential(client_id="xxxxxxxx")
要獲取client_id
,請導航到您的 function 應用程序 -> Identity
-> User assigned
-> 單擊您的用戶分配身份 -> 復制client_id
。
以下是在 python 中使用托管標識的方法:
from msrestazure.azure_active_directory import MSIAuthentication
creds = MSIAuthentication()
client = SecretClient(vault_url=MyVaultUrl, credentials=creds)
但是,要使其正常工作,您必須將身份分配給 azure function 作為部署的一部分。 如果您使用的是 terraform,那么您可以使用一個提供程序,它接受一個身份 {} 塊,您可以在其中指定 type="UserAssigned" 和 identity_ids = ["id1", "id2",...]
盡管您已將功能(用戶管理的身份)添加到訪問策略中,但您還需要將其添加到 RBAC 角色以允許其訪問 Key Vault 資源。
在 Key Vault 上的角色分配中將功能(用戶管理身份)添加為“貢獻者”在此處輸入圖像描述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.