Azure AD(三)知识补充-Azure资源的托管标识
一,引言
来个惯例,吹水!😅😅😅😅😅
前一周因为考试,还有个人的私事,一下子差点颓废了。想了想,写博客这种的东西还是得坚持,再忙,也要检查。要养成一种习惯,同时这也是自我约束的一种形式。虽然说不能浪费大量时间在刷朋友圈,看自媒体的新闻,看一些营销号的视频等等,不喜勿喷啊,这是我个人的一些观念,也没有带认识眼光啊!好了,废话不多说,在此先立个Flag,
1,保证每周输出一片文章。
2,开始坚持每周4次的5公里跑步。
好了,开始今天的分析👇👇👇👇👇
------------------------------------我是分割线------------------------------------
之前有个章节讲到Azure AD的一些基础概念,以及Azure AD究竟可以用来做什么?,还讲了讲如何在我们的项目中集成Azure AD 保护我们的API资源!讲了这些,其实远远不够,AD里里面还有好多概念性的知识,同时也是在其他模块中有使用到的,就比如什么叫“托管标识”,托管标识又分为“系统托管标识”和“用户托管标识”;什么叫“服务主体”,它又能干什么,和Azure又有什么关系?好的,那么今天就带着这些问题,我们来剖析,探个究竟!。
二,正文
1,“什么是托管标识”
- 客户端ID:Azure AD 生成的唯一标识符,在其初始预配期间与应用程序和服务主体绑定。
- 主体 ID - 托管标识的服务主体对象的对象 ID,用于授予对 Azure 资源的基于角色的访问权限。
- Azure 实例元数据服务 (IMDS) - 一个 REST 终结点(url链接),可供通过 Azure 资源管理器创建的所有 IaaS VM 使用。
2,托管标识分为两种类型:
- 系统分配托管标识:直接在 Azure 服务实例上启用。 启用标识后,Azure 将在实例的订阅信任的 Azure AD 租户中创建实例的标识。 创建标识后,系统会将凭据预配到实例。 系统分配标识的生命周期直接绑定到启用它的 Azure 服务实例。 如果实例遭删除,Azure 会自动清理 Azure AD 中的凭据和标识。
- 用户分配托管标识:是作为独立的 Azure 资源创建的。 在创建过程中,Azure 会在由所用订阅信任的 Azure AD 租户中创建一个标识。 在创建标识后,可以将标识分配到一个或多个 Azure 服务实例。 用户分配标识的生命周期与它所分配到的 Azure 服务实例的生命周期是分开管理的。
下图演示了托管服务标识如何与 Azure 虚拟机 (VM) 协同工作:
3,系统分配托管标识如何与 Azure VM 协同工作
-
Azure 资源管理器收到请求,要求在 VM 上启用系统分配托管标识。(图1)
-
Azure 资源管理器在 Azure AD 中创建与 VM 标识相对应的服务主体。 服务主体在此订阅信任的 Azure AD 租户中创建。
-
Azure 资源管理器通过使用服务主体客户端 ID 和证书更新 Azure 实例元数据服务标识终结点来配置 VM 上的标识。
-
VM 有了标识以后,请根据服务主体信息向 VM 授予对 Azure 资源的访问权限。 若要调用 Azure 资源管理器,请在 Azure AD 中使用基于角色的访问控制 (RBAC) 向 VM 服务主体分配相应的角色。 若要调用 Key Vault,请授予代码对 Key Vault 中特定机密或密钥的访问权限。
-
在 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 或更高版本。
- resource 参数指定了要向其发送令牌的服务。 若要向 Azure 资源管理器进行身份验证,请使用
-
调用了 Azure AD,以便使用在步骤 3 中配置的客户端 ID 和证书请求访问令牌(在步骤 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 访问令牌。
-
代码在调用支持 Azure AD 身份验证的服务时发送访问令牌。
4,用户分配托管标识如何与 Azure VM 协同工作
-
Azure 资源管理器收到请求,要求创建用户分配托管标识。
-
Azure 资源管理器在 Azure AD 中创建与用户分配托管标识相对应的服务主体。 服务主体在此订阅信任的 Azure AD 租户中创建。
-
Azure 资源管理器收到在 VM 上配置用户分配的托管标识的请求,并使用用户分配的托管标识服务主体客户端 ID 和证书更新 Azure 实例元数据服务标识终结点。
-
创建用户分配托管标识以后,请根据服务主体信息向标识授予对 Azure 资源的访问权限。 若要调用 Azure 资源管理器,请在 Azure AD 中使用 RBAC 向用户分配标识的服务主体分配相应的角色。 若要调用 Key Vault,请授予代码对 Key Vault 中特定机密或密钥的访问权限。
备注
也可在步骤 3 之前执行此步骤。
-
在 VM 上运行的代码可以从只能从 VM 中访问的 Azure 实例元数据服务标识终结点请求令牌:
http://169.254.169.254/metadata/identity/oauth2/token
- resource 参数指定了要向其发送令牌的服务。 若要向 Azure 资源管理器进行身份验证,请使用
resource=https://management.azure.com/
。 - 客户端 ID 参数指定为其请求令牌的标识。 当单台 VM 上有多个用户分配的标识时,此值是消除歧义所必需的。
- API 版本参数指定 Azure 实例元数据服务版本。 请使用
api-version=2018-02-01
或指定更高的版本。
- resource 参数指定了要向其发送令牌的服务。 若要向 Azure 资源管理器进行身份验证,请使用
-
调用了 Azure AD,以便使用在步骤 3 中配置的客户端 ID 和证书请求访问令牌(在步骤 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 访问令牌。
-
代码在调用支持 Azure AD 身份验证的服务时发送访问令牌。
稍后会提示
注意,此时在AD的应用注册页面是找不到刚刚注册的应用的,只有在给Azure 资源分配托管标识去访问Azure资源管理器时,可以搜索到。我这里是提前创建了是一个vm资源,也就是使用vm系统分配的托管标识访问Azure Key Vault。简而言之,Azure Key Vault作为密钥保管库,Key Vault 随后可让客户端应用程序使用机密访问未受 Azure Active Directory (AD) 保护的资源。 托管服务标识由 Azure 自动管理,可用于向支持 Azure AD 身份验证的服务进行身份验证,这样就无需在代码中插入凭据了。
但是Azure中资源和资源之间是相互隔离的,不能够相互访问。
所以,我们需要开启vm的系统分配的托管标识,然后再key vault 中开启 vm的访问策略。如下所示
添加 “vm001” 对 “key vault” 的访问策略
创建 “机密” 信息
名称输入:conn;值输入 123 ,点击“创建”,
然后使用ssh 登陆刚刚创建好的vm001上,获取访问 “key vault” 的 “access_token”
在终端窗口中,使用 CURL 向 Azure 资源终结点的本地托管标识发出请求,以获取 Azure Key Vault 的访问令牌
世纪互联版
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.cn' -H Metadata:true
全球版
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true
可以使用此访问令牌对 Azure Key Vault 进行身份验证。 下一个 CURL 请求显示如何使用 CURL 和 Key Vault REST API 从 Key Vault 读取密钥。 将需要 Key Vault 的 URL,该 URL 位于 Key Vault 的“概述” 页的“软件包” 部分。 另外,还需要在前面的调用中获取的访问令牌
curl https://<YOUR-KEY-VAULT-URL>/secrets/<secret-name>?api-version=2016-10-01 -H "Authorization: Bearer <ACCESS TOKEN>"
通过在请求头添加Bearer认证,获取key vault 中刚刚创建的机密信息 名称 “conn”,值 “123”
bingo,成功的拿到密钥。开启系统分配的托管标识,其实就是授予例如 Azure VM资源的托管标识对另外一个Azure 资源的访问权限。
三,结尾
今天的文章大概介绍了 Azure系统的托管标识到底是个什么东西,可以用来干什么,这里不仅仅可以去 VM 访问 "key Vault",还可以访问 “Azure 存储”,“Azure Cosmos DB”等,都是同样的道理。
下一篇开始讲解一下关于用户自己分配的托管标识,已经作一下演示,同时演示使用用户分配的托管身份运行应用程序。
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。