Azure资源托管标识浅析和实践

栏目: 编程工具 · 发布时间: 5年前

内容简介:生成云应用程序时需要应对的常见挑战是,如何管理代码中用于云服务身份验证的凭据。 保护这些凭据是一项重要任务。 理想情况下,这些凭据永远不会出现在开发者工作站上,也不会被签入源代码管理系统中。虽然 Azure Key Vault 可用于安全存储凭据、机密以及其他密钥,但代码需要通过 Key Vault 的身份验证才能检索它们。Azure Active Directory (Azure AD) 中的 Azure 资源托管标识功能可以解决此问题。 此功能为 Azure 服务提供了 Azure AD 中的自动托管标

生成云应用程序时需要应对的常见挑战是,如何管理代码中用于云服务身份验证的凭据。 保护这些凭据是一项重要任务。 理想情况下,这些凭据永远不会出现在开发者工作站上,也不会被签入源代码管理系统中。虽然 Azure Key Vault 可用于安全存储凭据、机密以及其他密钥,但代码需要通过 Key Vault 的身份验证才能检索它们。

Azure Active Directory (Azure AD) 中的 Azure 资源托管标识功能可以解决此问题。 此功能为 Azure 服务提供了 Azure AD 中的自动托管标识。 可以使用此标识向支持 Azure AD 身份验证的任何服务(包括 Key Vault)证明身份,无需在代码中放入任何凭据。

Azure 资源托管标识的工作原理:

托管标识分为两种类型:

  • 系统分配托管标识直接在 Azure 服务实例上启用。 启用标识后,Azure 将在实例的订阅信任的 Azure AD 租户中创建实例的标识。创建标识后,系统会将凭据预配到实例。 系统分配标识的生命周期直接绑定到启用它的 Azure 服务实例。 如果实例遭删除,Azure 会自动清理 Azure AD 中的凭据和标识。

  • 用户分配托管标识是作为独立的 Azure 资源创建的。 在创建过程中,Azure 会在由所用订阅信任的 Azure AD 租户中创建一个标识。 在创建标识后,可以将标识分配到一个或多个 Azure 服务实例。 用户分配标识的生命周期与它所分配到的 Azure 服务实例的生命周期是分开管理的。

下图演示了托管服务标识如何与 Azure 虚拟机 (VM) 协同工作:

Azure资源托管标识浅析和实践

系统分配托管标识如何与 Azure VM 协同工作:

1. Azure 资源管理器收到请求,要求在 VM 上启用系统分配托管标识。

2. Azure 资源管理器在 Azure AD 中创建与 VM 标识相对应的服务主体。 服务主体在此订阅信任的 Azure AD 租户中创建。

3. Azure 资源管理器在 VM 上配置标识:使用服务主体客户端 ID 和证书更新 Azure 实例元数据服务标识终结点。

4. VM 有了标识以后,请根据服务主体信息向 VM 授予对 Azure 资源的访问权限。 若要调用 Azure 资源管理器,请在 Azure AD 中使用基于角色的访问控制 (RBAC) 向 VM 服务主体分配相应的角色。 若要调用 Key Vault,请授予代码对 Key Vault 中特定机密或密钥的访问权限。

5. 在 VM 上运行的代码可以从只能从 VM 中访问的一个终结点请求令牌(另一个已经弃用):

  • Azure 实例元数据服务标识终结点(推荐):http://169.254.169.254/metadata/identity/oauth2/token

  • resource 参数指定了要向其发送令牌的服务。 若要向 Azure 资源管理器进行身份验证,请使用 resource=https://management.azure.com/。

  • API 版本参数指定 IMDS 版本,请使用 api-version=2018-02-01 或更高版本。

6. 调用了 Azure AD,以便使用在步骤 3 中配置的客户端 ID 和证书请求访问令牌(在步骤 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 访问令牌。

7. 代码在调用支持 Azure AD 身份验证的服务时发送访问令牌。

用户分配托管标识如何与 Azure VM 协同工作:

1. Azure 资源管理器收到请求,要求创建用户分配托管标识。

2. Azure 资源管理器在 Azure AD 中创建与用户分配托管标识相对应的服务主体。服务主体在此订阅信任的 Azure AD 租户中创建。

3. Azure 资源管理器收到请求,要求在 VM 上配置用户分配托管标识:使用用户分配托管标识服务主体客户端 ID 和证书更新 Azure 实例元数据服务标识终结点。

4. 创建用户分配托管标识以后,请根据服务主体信息向标识授予对 Azure 资源的访问权限。 若要调用 Azure 资源管理器,请在 Azure AD 中使用 RBAC 向用户分配标识的服务主体分配相应的角色。若要调用 Key Vault,请授予代码对 Key Vault 中特定机密或密钥的访问权限。

5. 在 VM 上运行的代码可以从只能从 VM 中访问的一个终结点请求令牌(另一个已经弃用):

  • Azure 实例元数据服务标识终结点(推荐):http://169.254.169.254/metadata/identity/oauth2/token

  • resource 参数指定了要向其发送令牌的服务。 若要向 Azure 资源管理器进行身份验证,请使用 resource=https://management.azure.com/。

  • API 版本参数指定 IMDS 版本,请使用 api-version=2018-02-01 或更高版本。

6. 调用了 Azure AD,以便使用在步骤 3 中配置的客户端 ID 和证书请求访问令牌(在步骤 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 访问令牌。

7. 代码在调用支持 Azure AD 身份验证的服务时发送访问令牌。

=============================================================================================

下面简单介绍下如何使用启用了系统分配的托管标识的 Windows 虚拟机来访问 Azure 资源管理器 API

在资源组下面点击访问控制,然后添加角色分配

Azure资源托管标识浅析和实践

选择角色并将访问权限分配到虚拟机

Azure资源托管标识浅析和实践

然后登录该虚拟机,打开powershell,执行如下命令。使用 Invoke-WebRequest cmdlet,向 Azure 资源终结点的本地托管标识发出请求以获取 Azure 资源管理器的访问令牌。

$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}

Azure资源托管标识浅析和实践

接下来,提取完整响应,响应以 JavaScript 对象表示法 (JSON) 格式字符串的形式存储在 $response 对象中。

1. $content = $response.Content | ConvertFrom-Json

Azure资源托管标识浅析和实践

然后从响应中提取访问令牌。

1. $ArmToken = $content.access_token

Azure资源托管标识浅析和实践

最后,使用访问令牌调用 Azure 资源管理器。 在此示例中,我们还使用 Invoke-WebRequest cmdlet 调用 Azure 资源管理器,并将访问令牌包含在授权标头中。

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{ Authorization ="Bearer $ArmToken"}).content

执行命令后将显示资源组的相关信息。

Azure资源托管标识浅析和实践

为了验证权限,我们去请求别的资源组的信息,结果会提示你没有权限去读取。

Azure资源托管标识浅析和实践


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Web开发实战经典(基础篇)

Java Web开发实战经典(基础篇)

李兴华、王月清 / 清华大学出版社 / 2010-8 / 69.80元

本书用通俗易懂的语言和丰富多彩的实例,通过对Ajax、JavaScript、HTML等Web系统开发技术基础知识的讲解,并结合MVC设计模式的理念,详细讲述了使用JSP及Struts框架进行Web系统开发的相关技术。 全书分4部分共17章,内容包括Java Web开发简介,HTML、JavaScript简介,XML简介,Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,Java......一起来看看 《Java Web开发实战经典(基础篇)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具