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) 协同工作:

clip_image002

系统分配托管标识如何与 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

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

clip_image004

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

clip_image005

然后登录该虚拟机,打开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"}

clip_image007

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

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

 

clip_image009

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

1. $ArmToken = $content.access_token

 

clip_image011

最后,使用访问令牌调用 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

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

clip_image013

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

clip_image015

原文地址:http://blog.51cto.com/shutong/2348202

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Microsoft云包括了Azure、PowerPlatform、Microsoft365、GitHub、Dynamics365等,虽然许多企业应用程序开发领导者了解在Azure上创建应用程序的价值,但事实是您可以将整个Microsoft云作为应用程序平台.有一篇文章:在Microsoft云上构建应用程序从应用程序开发角度介绍了M
《WindowsAzurePlatform系列文章目录》 我们在使用AzureAPIManagement(APIM)实现服务网关的时候,一般都是面向互联网的。比如场景一:AzureAPIManagement保护AzureVM上部署的ApacheWebService,客户端是来自于Internet的用户。整体的数据流是:用户->I
微软免费使用一年的Azure虚拟机,默认提供了一个64G的磁盘,但是系统却只给分配了32个G,尝试了几次扩大分区,最终都导致系统崩溃了,只能重新开虚拟机,无奈,只好网上找来现成的脚本,自动调整分区大小,只需要输入想调整为多少G即可,终于成功把系统分区扩大了。更改分区大小的脚本:if[[$#-eq
2022年5月25日,Meta公司选择Azure作为战略云供应商,推进人工智能创新,深化PyTorch合作https://azure.microsoft.com/en-us/blog/meta-selects-azure-as-strategic-cloud-provider-to-advance-ai-innovation-and-deepen-pytorch-collaboration/微软致力于负责任地推进人工智能的
上篇请访问这里做一个能对标阿里云的前端APM工具(上)样本多样性问题上一小节中的实施方案是微观的,即单次性的、具体的。但是从宏观上看,我需要保证性能测试是公允的,符合大众预期的。为了达到这种效果,最简单的方式就是保证测试的多样性,让足够多人访问产生足够多的样本来,但这对于一个
一年一度的MicrosoftBuild终于来了,带来了非常非常多的新技术和功能更新。不知道各位小伙伴有没有和我一样熬夜看了开幕式和五个核心主题的全过程呢?接下来我和大家来谈一下作为开发者最应关注的七大方向技术更新。AI能力的提升1.AzureOpenAIService终于来了开发人员可
问题描述使用AzureStorageAccount的共享访问签名(ShareAccessSignature)生成的终结点,连接时遇见  TheAzureStorageendpointurlismalformed(Azure存储终结点URL格式不正确)StorageAccountSDKinpom.xml:<dependency><groupId>com.azure</groupI
Azure提供的负载均衡服务叫LoadBalancer,它工作在ISO七层模型的第四层,通过分析IP层及传输层(TCP/UDP)的流量实现基于"IP+端口"的负载均衡。AzureLoadBalancer的主要功能负载均衡基于ISO四层的负载均衡,请参考下图(此图来自互联网):端口转发通过创建入站NAT规则,
各位好,今天继续来讨论关于Azure平台的技术问题,这次我们来讨论关于监控的话题,各个云平台都会为用户预留获取监控数据的接口,Azure也不例外,拿最基础用法来说,用户可以从AzurePortal中获取所需要的监控信息,比如Azure虚拟机的磁盘IO,CPU百分比,内存等,除此之外,还可以通过定义各种action,针对
在以往我们创建高可用Web应用程序时,负载均衡器是必不可少的组件。我们都使用传统内部服务器的负载均衡器,其中我们的应用程序在N个实例上运行,负载均衡器位于这些服务器的前面,并根据某些预定义的算法和设置向后端服务器分配负载。迁移到云中,我们需要了解如何使用Azure组件实现相同的
AzureEventGrid是一个托管事件路由平台,使我们能够实时响应Azure中托管的应用程序或拥有的任何Azure资源中发生的更改。EventGrid处理来自Azure服务的内置Azure事件以及来自应用程序的自定义事件,并实时发布它们。它可以每秒动态扩展和处理数百万个事件,Azure为生产工作负载提供99.
今天来谈一谈automation中另外一个很关键的内容,也就是updatemanagement,不同于configurationmanagement,updatemanagement主要用于管理windows以及LinuxVM中的补丁内容,当然和configurationmanagement一样,updatemanagement不仅仅可以管理Windows中VM的补丁,也可以管理non-Azure
下边来谈一谈Azure中Alert更多的应用,正常来说,云厂商都会有自己的SLA保证,比如目前来说,在可用性集里的虚拟机,SLA是99.95%,这点可以从商务角度保护客户的一部分利益。但是,从技术上来说,任何云都不可能保证100%的可用性,所以有些时候也会出现一些service的outage,对用户来说,第一时间知晓这
MicrosoftAzure中提供了多种类型和大小的虚拟机,我们将通过本来来了解下微软具体提供了哪些类型和大小的虚拟机,以方便在项目过程中进行评估。类型大小说明常规用途B,Dsv3,Dv3, DSv2,Dv2,Av2, DCCPU 与内存之比平衡。适用于测试和开发、小到中型数据库和低到中等流量Web
假定我们正在运行某个应用程序,此应用程序需要用户在应用程序中提交大量图片文件,那么对于系统管理员来说手动审核这些图片是很消耗时间的,并且对于图片的审核也许并不是即时的。为了解决这一问题,这篇文章将向大家演示如何使用AzureFunction和CognitiveServices来对上传到应用程序的
中国-北京[2018.12.10]2018年12月7日,历时60余天,在超过150+的面试中,21家企业经三轮筛选晋级终审,最终14家企业在激烈的角逐中成功入选微软加速器·北京13期创新企业名单。颉一软件有幸拔得头筹,很快将与MicrosoftAzure开展深度合作,开启全面加速企业级用户数字化转型之路!微软加速器·
假定我们有某个应用程序会将文件存储到AzureBlob中,存储在Blob中的数据保存七天,七天以后需要对其进行删除。这需求可以使用AzurePowerShellRunbook来完成,但是我想看看是否可以用很少甚至没有代码来完成。经过一番探索我发现AzureLogicApp非常适合这种情况。你可以用LogicApp创
接下来继续之前给各位介绍的内容,我们接着来谈下Azureautomation中关于configurationmanagement的内容,上一篇中介绍了关于inventory的应用,通过inventory,可以快速收集Azure与非Azure服务器中的资产信息。除此之外,configurationmanagement中changetracking也是个非常实用的功能,通
安全分层方法 数据几乎所有情况下,攻击者都会攻击以下数据:存储在数据库中的数据存储在虚拟机磁盘上的数据存储在Office365等SaaS应用程序上的数据存储在云存储中的数据存储数据和控制数据访问权限的人员有责任确保数据得到恰当保护。通常情况下,存在相应法规要
生成云应用程序时需要应对的常见挑战是,如何管理代码中用于云服务身份验证的凭据。保护这些凭据是一项重要任务。理想情况下,这些凭据永远不会出现在开发者工作站上,也不会被签入源代码管理系统中。虽然AzureKeyVault可用于安全存储凭据、机密以及其他密钥,但代码需要通过KeyVa