慕的地8271018
2023-03-01 16:50:48
我正在Azure Managed Identity為我的 python 使用功能Azure Functions App ,并希望能夠Client ID從 Function App 本身中獲取當前分配的內容。搜索文檔和azure-identitypython 資源沒有給出我期望的結果。也許我可以:自己查詢Azure Instance Metadata Service得到這個ID。(對這個選項不是很滿意)env在 ARM 部署階段/或稍后手動將其提供為變量。(看起來不錯且高效,但不確定這里的最佳做法是什么)更新托管 o 讓它與 ARM 模板和環境變量一起工作使用系統標識部署 FunctionApp將系統標識提供為同一 FunctionApp 的 env 變量想法是使用Microsoft.Resources/deployments子模板更新功能應用程序配置:{ "name": "AZURE_CLIENT_ID",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appName')), '2019-08-01', 'full').identity.principalId]"
},
1 回答
慕仙森
TA貢獻1827條經驗 獲得超8個贊
最簡單的選擇是轉到 Functions 應用程序的標識選項卡,然后打開“系統分配的托管標識”。然后,您無需提供 client_id 即可獲取訪問令牌,因為如果 Function 應用程序有一個身份,令牌請求只會選擇系統分配的身份。
如果您使用“用戶分配的托管標識”,則需要提供 client_id:通過 env 或直接在您的代碼中提供。
你可能已經知道,但只是一個額外的注意事項:你還需要確保你已經為你正在訪問的資源授予了對你的托管標識的訪問權限,例如:轉到你的函數應用程序需要訪問和分配的 Azure 資源您的托管身份的適當角色。
您的選項 1(查詢 Azure 實例元數據服務)僅在 VM 上可用。
更新
由于您需要 client_id 用于其他目的,您還可以考慮從對訪問令牌請求的響應中讀取它:client_id 是與訪問令牌一起返回給您的 JSON 令牌中的參數之一,其值是您使用的托管身份的 client_id(在您的情況下,系統分配的托管身份)
這是一個示例令牌響應來說明這一點:
{
access_token: <...>,
resource: <...>,
token_type: 'Bearer',
client_id: <client_id of the managed identity used to get this token>
}
添加回答
舉報
0/150
提交
取消
