Azure资源托管标识浅析和实践
生成云应用程序时需要应对的常见挑战是,如何管理代码中用于云服务身份验证的凭据。 保护这些凭据是一项重要任务。 理想情况下,这些凭据永远不会出现在开发者工作站上,也不会被签入源代码管理系统中。虽然 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 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
在资源组下面点击访问控制,然后添加角色分配
选择角色并将访问权限分配到虚拟机
然后登录该虚拟机,打开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"}
接下来,提取完整响应,响应以 JavaScript 对象表示法 (JSON) 格式字符串的形式存储在 $response 对象中。
1. $content = $response.Content | ConvertFrom-Json
然后从响应中提取访问令牌。
1. $ArmToken = $content.access_token
最后,使用访问令牌调用 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
执行命令后将显示资源组的相关信息。
为了验证权限,我们去请求别的资源组的信息,结果会提示你没有权限去读取。
转载于:https://blog.51cto.com/shutong/2348202
Azure资源托管标识浅析和实践相关推荐
- ZA303学习笔记六管理应用程序的安全(密钥保管库,托管标识,管理应用程序,CA证书)
管理应用程序的安全 部署和配置密钥库 Azure Key Vault密钥库 Azure Key Vault密钥库作用 Key Vault 对象 Azure密钥保管库高可用性 Azure Key Vau ...
- 【壹刊】Azure AD(三)Azure资源的托管标识
一,引言 来个惯例,吹水!???????????????????? 前一周因为考试,还有个人的私事,一下子差点颓废了.想了想,写博客这种的东西还是得坚持,再忙,也要检查.要养成一种习惯,同时这也是自我 ...
- 使用 DMV 进行监视_监视资源使用情况(2)_针对 Azure SQL 数据库和 Azure SQL 托管实例进行手动性能优化
本文适用:AZURE SQL托管实例 上一篇我们探讨了AZURE SQL数据库中的监视资源方式,本篇中将继续讨论对ZURE SQL托管实例的监视资源使用情况 sys.server_resource_s ...
- 使用 DMV 进行监视_监视资源使用情况(1)_针对 Azure SQL 数据库和 Azure SQL 托管实例进行手动性能优化
本文适用:AZURE SQL数据库 AZURE SQL数据库/托管实列,由于引入PORTAL等管理工具的概念,所以在监视资源上面我们的手段就比较多样化了,在本篇以及接下来的后续篇章中会详细展开,敬请期 ...
- idea资源包下创建资源包_资源包技巧和最佳实践
idea资源包下创建资源包 今天是资源捆绑日. 通常,这是Java中最著名的国际化机制(i18n). 使用它应该很容易. 但是,弄污双手时会出现许多小问题. 如果您有相同的想法,则此文章适合您. 基本 ...
- azure 使用_如何使用Azure的托管MariaDB
azure 使用 如果微软要成功使Azure成为未来,就需要将开发人员带到其云平台. 如果我们回到PC的早期,那仍然很容易,那时仍可以构建和锁定生态系统. 但是我们生活在一个开发人员可以选择的世界中, ...
- 如何使用Azure的托管MariaDB
如果微软要成功使Azure成为未来,它需要将开发人员带到其云平台. 如果我们回到PC的早期,那仍然很容易,那时仍可以建立和锁定生态系统. 但是我们生活在一个开发人员可以选择的世界中,他们可以为手头的任 ...
- 使用 DMV 进行监视_监视查询性能_针对 Azure SQL 数据库和 Azure SQL 托管实例进行手动性能优化
本文适用:AZURE SQL数据库,AZURE SQL托管实例 SQL是系统和数据库交互的重要方式,日常工作中我们经常被性能糟糕的SQL所干扰.同样在AZURE数据库中,我们依旧面临相同的问题.缓慢或 ...
- 使用Powershell批量为Azure资源添加Tags
在使用Azure的过程中,我们可以将Tags应用于Azure资源,从而可以将元数据逻辑的组织到某些分类中.每个Tags由名称和值组成.例如,我们可以将名称"Environment" ...
最新文章
- keepalived介绍和配置
- Stereo Matching 立体匹配学习资料
- JZOJ 5397. 【NOIP2017提高A组模拟10.6】Biology
- 论文浅尝 | 基于事理图谱的脚本事件预测
- SqlServer中使用Mysql中的limit分页功能
- 读书随笔:The Book of Why——CHAPTER 1:The Ladder of Causation
- 修复微商城提交购物车时部分手机号码不识别
- CentOS8下vi编辑器常用命令
- python网络爬虫笔记-re正则表达式
- 从学生到专家,C语言开发必读的8本书
- eclipse如何配置Maven
- Properties综合应用,冲冲冲
- 路由器重温——RIP路由
- 成为一名合格的算法工程师需要掌握哪些技能?
- 一只小蜜蜂...(递推求解)
- js前端可视化 | 单位平面向量旋转的数学原理与计算
- 微信小程序的悬浮按钮
- 打包/发包工具-需求分析一
- OpenStack Magnum 项目简介
- 二部六层电梯程序西门子1200二部六层电梯程序
热门文章
- GBase 数据同步工具RTSync
- 微信小程序 手写签名_微信小程序 绘图 canvas 手写板
- 破解学习笔记-----不脱壳破解
- 04UE4 C++ 入门【力和扭矩】
- Lottie--前端动画效果--UI输出json格式--lottie动画在JavaScript中使用
- ajaxpro 使用
- 第一代至第五代计算机分别是,计算机应用基础教案—计算机的分类与发展(中职教育)...
- 长安大学计算机专业考研科目,长安大学(专业学位)计算机技术研究生考试科目和考研参考书目...
- JAVA8 LinkedList 链表源码详细解析
- 基于 Qt Quick+websocket 的Web扫描仪驱动开发