問題描述
在Global版本的Azure Key Vault 文檔中盟萨,有一節(jié)介紹在Azure VM中使用標(biāo)識(shí)獲取訪問令牌凉翻,調(diào)用Key Vault中的資源。但是在示例中捻激,只有curl的命令執(zhí)行制轰,而沒有代碼部分前计。并且訪問的resource都是azure.com,那對(duì)于中國(guó)區(qū)垃杖,有那些是需要修改的呢? 使用代碼如何完成Token的獲取呢男杈?
問題解決
根據(jù)原文中curl的命令
curl -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com/&client_id=<UAMI CLIENT ID>"
把修改為C#代碼:
private static readonly string TokenUrl = @"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.com/&client_id=<UAMI CLIENT ID>";
private static string GetToken(string tokenUrl)
{
var request = WebRequest.Create(tokenUrl);
request.Headers.Add("Metadata", "true");
var response = request.GetResponse();
return ParseWebResponse(response, "access_token");
}
需要注意修改的地方為:
1) Resource需要修改為中國(guó)區(qū)endpoint: https%3A%2F%2Fvault.azure.cn
2) Resource 參數(shù)值必須與 Azure AD 預(yù)期值完全一致。 如果使用資源管理器資源 ID调俘,必須在 URI 的結(jié)尾添加斜線伶棒。
3)<CLIENT ID> 必須替換為VM中唯一的一個(gè)用戶標(biāo)記,當(dāng)VM有多個(gè)用戶標(biāo)記的時(shí)候彩库,會(huì)遇見400/403錯(cuò)誤肤无。
參考資料
使用 Azure 門戶在虛擬機(jī)規(guī)模集 (VMSS) 上配置 Azure 資源的托管標(biāo)識(shí):https://docs.azure.cn/zh-cn/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vmss#user-assigned-managed-identity
使用 VM 標(biāo)識(shí)獲取訪問令牌,并使用它調(diào)用資源管理器: https://docs.microsoft.com/zh-cn/azure/active-directory/managed-identities-azure-resources/msi-tutorial-linux-vm-access-arm#get-an-access-token-using-the-vms-identity-and-use-it-to-call-resource-manager
[完]
當(dāng)在復(fù)雜的環(huán)境中面臨問題骇钦,格物之道需:濁而靜之徐清宛渐,安以動(dòng)之徐生。 云中眯搭,恰是如此!
標(biāo)簽: Azure VM用戶標(biāo)識(shí)獲取訪問KeyVault的Token, Azure Developer