【Azure Developer】使用 Azure VM 上的用户分配托管标识访问 Azure Key Vault 中国区代码示例

简介: 【Azure Developer】使用 Azure VM 上的用户分配托管标识访问 Azure Key Vault 中国区代码示例

问题描述

Global版本的Azure Key Vault 文档中,有一节介绍在Azure VM中使用标识获取访问令牌,调用Key Vault中的资源。但是在示例中,只有curl的命令执行,而没有代码部分。并且访问的resource都是azure.com,那对于中国区,有那些是需要修改的呢? 使用代码如何完成Token的获取呢?

 

 

 

问题解决

根据原文中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需要修改为中国区endpoint: https%3A%2F%2Fvault.azure.cn

2) Resource 参数值必须与 Azure AD 预期值完全一致。 如果使用资源管理器资源 ID,必须在 URI 的结尾添加斜线。

3)<CLIENT ID> 必须替换为VM中唯一的一个用户标记,当VM有多个用户标记的时候,会遇见400/403错误。

 

 

参考资料

使用 Azure 门户在虚拟机规模集 (VMSS) 上配置 Azure 资源的托管标识:https://docs.azure.cn/zh-cn/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vmss#user-assigned-managed-identity

 

使用 VM 标识获取访问令牌,并使用它调用资源管理器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

 

[完]

相关文章
|
3月前
|
JavaScript 网络协议 API
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
|
3月前
|
API 网络架构
【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称
【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称
|
3月前
|
存储 API C#
【Azure Developer】解决Azure Key Vault管理Storage的示例代码在中国区Azure遇见的各种认证/授权问题 - C# Example Code
【Azure Developer】解决Azure Key Vault管理Storage的示例代码在中国区Azure遇见的各种认证/授权问题 - C# Example Code
|
3月前
|
存储 安全 Python
【Azure Key Vault】在Azure Databricks上获取Azure Key Vault中所存储的机密(secret)的两种方式
【Azure Key Vault】在Azure Databricks上获取Azure Key Vault中所存储的机密(secret)的两种方式
|
3月前
|
API 网络架构
【Azure Developer】如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息
【Azure Developer】如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息
|
3月前
|
存储 Shell 容器
【Azure 存储服务】使用PowerShell脚本创建存储账号(Storage Account)的共享访问签名(SASToken) : New-AzStorageContainerSASToken
【Azure 存储服务】使用PowerShell脚本创建存储账号(Storage Account)的共享访问签名(SASToken) : New-AzStorageContainerSASToken
|
3月前
|
存储 安全 API
【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)
【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)
|
3月前
|
存储 安全 Shell
【Azure 存储服务】关于Azure Storage Account(存储服务) 基于AAD用户的权限设定以及SAS key的管理问题
【Azure 存储服务】关于Azure Storage Account(存储服务) 基于AAD用户的权限设定以及SAS key的管理问题
|
3月前
|
API
【Azure Developer】调用Microsoft Graph API获取Authorization Token,使用的认证主体为 Azure中的Managed Identity(托管标识)
【Azure Developer】调用Microsoft Graph API获取Authorization Token,使用的认证主体为 Azure中的Managed Identity(托管标识)
|
3月前
|
Linux 网络安全 API
【Azure 环境】当在Azure 环境中调用外部接口不通时,如何定位SSL Certificate Problem
【Azure 环境】当在Azure 环境中调用外部接口不通时,如何定位SSL Certificate Problem