Azure 应用的托管身份与服务主体

Microsoft Entra ID -- 前称 Azure Active Directory -- 提供强大的身份验证和授权功能。托管身份和服务主体通过限制凭据暴露的风险来帮助确保对 Azure 资源的访问安全。

托管身份为Azure原生应用程序自动管理身份,而服务主体则非常适合需要访问Azure资源的外部应用程序。

托管身份简化了授予Azure服务访问其他资源的过程,通过自动管理标识来实现。相比之下,服务主体提供了更详细的控制级别,对于自动化任务和将外部应用程序集成到Azure资源中至关重要。区分这两种方法提高了安全性,并简化了资源管理和运营效率。

在比较 Azure 中的托管身份和服务主体时,出现以下关键差异:

  • 身份分配和删除。
  • 自动与手动凭据管理。
  • 凭据暴露和风险。
  • 在 Azure 原生应用程序与外部应用程序中的使用。

理解这些身份验证方法对于维护安全和高效的云基础设施至关重要,无论是配置需要访问存储账户的虚拟机,还是使用 Azure DevOps 自动化部署。

托管身份(managed identity)

Microsoft Entra ID 中的受管身份使 Azure 服务能够在不安全地管理凭据的情况下,向其他 Azure 资源进行身份验证。它自动提供一个可以获取 Entra ID 令牌的身份。这个过程消除了硬编码凭据的需要,从而增强了安全性,并简化了身份验证和授权。

受管身份有两种选项可供选择:

  1. 系统分配的托管身份。
  2. 用户分配的托管身份。

什么是系统分配的托管身份?

系统分配的托管身份是与 Azure 服务实例(例如 VM 或 Web 应用)一起自动创建的。该身份与该资源绑定,使其易于管理但无法共享。例如,由于该身份与服务共享相同的生命周期,删除服务也会删除该身份。这种类型的身份在单个资源需要访问其他 Azure 资源并且需要最少的管理时效果最好。系统分配的托管身份具有以下属性:

  • 自动创建。
  • 标识生命周期与服务绑定。
  • 需要最少的管理。
  • 最适用于单个资源。

什么是用户分配的托管身份?

一个具有用户分配的托管身份的Azure资源独立操作,用户可以将该身份分配给一个或多个服务实例。用户手动创建该身份作为独立资源,并与任何服务实例分开管理。该身份在明确删除之前会一直存在。当多个资源共享相同身份时,这个资源特别有用。当用户需要对身份的生命周期管理有更多灵活性和控制时,它也是有益的。总之,用户分配的托管身份具有以下特点:

  • 独立创建。
  • 可以在多个资源之间共享。
  • 更大的管理控制。
  • 需要手动删除。 

演示 

让我们快速演示一个场景,使用虚拟机作为 Azure 资源:

从 Azure 门户中,选择虚拟机;在设置中找到身份。

将状态设置为开启,并保存更改。

然后切换到 Azure key vault / IAM,我们可以定义这个系统分配的托管身份,拥有reader. role(或其他权限)。例如,读取 Azure 存储帐户的访问密钥或类似的东西。在指派的对象中选择managed identity。

同样,让我们在下一个示例中移除虚拟机的系统分配托管身份,使用用户分配的身份(一个 Azure 资源只能链接一个,不能同时链接两个……):从 Azure 虚拟机面板中,导航到身份并将“状态”切换按钮关闭。保存设置时会提示您进行确认。

创建一个user managed identity

 然后将该user managed identity指派给这台web01 vm。

最后在key vault /IAM中为该user identity分配read role。让它能够读取key valut 中的secret。

 保存更改后,结果是现在 Azure 虚拟机以及分配给它们的用户分配的托管标识的 Web 应用程序都可以从 Azure 密钥保管库中读取我们的secret。

什么是服务主体?

服务主体的定义

服务主体是Microsoft Entra ID中的一种安全身份,使得应用程序、托管服务和自动化工具能够安全地访问Azure资源。它的功能类似于用户身份,但它代表的是一个应用程序或服务,需进行身份验证并获得授权以访问特定资源,而不是人类用户。

服务主体的分类

服务主体使得应用程序能够以最小权限登录并执行任务,确保操作的安全性。Azure中有三种主要类型的服务主体:

  • 应用程序服务主体。当应用程序在Microsoft Entra ID中注册时,会创建应用程序服务主体。它们代表该应用程序在其部署中的身份,使其能够在Azure或Microsoft Entra ID中进行身份验证并访问资源。
  • 托管身份服务主体。在Azure上启用托管身份时,会创建托管身份服务主体。这种类型的主体通过为应用程序提供身份,简化了凭证管理,使其能够连接到支持Azure身份验证的资源。
  • 传统服务主体。这些主体是较旧的方法,通常涉及手动管理凭证,例如密码或证书。组织通常在现代身份验证机制不可行的环境中使用这些主体。 

演示: 

PS /home/rockwang415> az ad sp create-for-rbac --name "rockdevblogsp"                                                                                

复制这些信息;在 Azure DevOps 服务连接的例子中,这些信息将如下使用: 

您只需在相应的参数字段中复制正确的信息:

Subscription Id =  用“/subscriptions/xxxxxx-xxxx-xxxx” 替换
Subscription Name =  从Azure Portal / Subscriptions中查看
Service Principal Id = 从前面的命令的appId获得
Service Principal Key = 从前面命令的password 获得
Tenant ID =  azure ad tenant 标识ID

托管身份与服务主体之间的区别

  • 理解托管身份与服务主体之间的区别对于选择适当的 Azure 资源身份验证方法至关重要。虽然两者都能让应用程序和服务安全地访问 Azure 资源,但它们具有不同的特征和使用场景。
  • 托管身份简化了凭据管理,因为 Azure 会自动处理和轮换它们。服务主体则需要手动处理客户端密钥或证书,并必须安全存储和轮换。
  • 在生命周期和范围方面,用户可以将托管身份分配为系统分配(用于单个资源)或用户分配(可在多个资源之间共享)。与此同时,用户可以独立创建和删除服务主体,从而提供更细致的访问控制。
  • 托管身份适合 Azure 原生资源,而服务主体适合需要与 Azure 交互的外部应用程序或服务。
  • 在安全性方面,托管身份通过避免凭据暴露来增强安全性,由 Azure 管理轮换。相反,服务主体要求严格管理凭据以降低风险。

何时使用

  • 每种方式使用托管身份或服务主体的决定取决于几个因素。当应用程序或服务在 Azure 内运行时,使用托管身份。Azure 可以自动处理凭据管理,并最大程度地降低凭据暴露的风险。托管身份还简化了身份验证过程并自动化身份管理,从而减少了管理工作量。
  • 当应用程序或服务在 Azure 之外运行时,服务主体是最佳选择。它是自动化与 Azure 资源交互的任务或脚本的必要条件,或者需要对权限和访问级别进行更细致的控制。服务主体还对于与外部服务或第三方应用程序的集成是必要的。它们需要安全的凭据处理和持续的管理,但为外部应用程序提供了更多灵活性。
  • 这两种方法都支持 Azure RBAC 进行访问控制,尽管服务主体更适合外部使用。托管身份通过最低限度的凭据暴露简化了合规性,而服务主体需要更严格的政策以满足 GDPR 或 HIPAA 等法规。

真实场景示例

  • 管理身份的一个使用案例是当 Azure Functions 需要从 Azure Queue Storage 读取数据并写入 Azure Cosmos DB 时。用户为函数启用一个系统分配的管理身份,并在 Azure RBAC 中分配必要的角色。这简化了身份验证,并消除了凭据管理,由 Azure 处理安全性和凭据轮换。
  • 对于服务主体,想象一下一个在第三方 CI/CD 工具中将代码部署到 Azure 的 DevOps 管道。用户可以在 Microsoft Entra ID 中创建一个服务主体,分配诸如贡献者的角色,并在 CI/CD 工具中安全存储其凭据。这个设置使工具能够安全地进行身份验证并自动化 Azure 资源管理。 

结论

确保在云计算中获得资源的访问权限至关重要。Microsoft Azure 提供了两种基本的身份验证方法:托管身份和服务主体。托管身份最适合内部 Azure 资源,它们提供无缝、安全的身份验证,而无需管理凭据。服务主体则适用于需要详细访问控制的外部应用程序或自动化任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16 C 语言布尔类型与 sizeof 运算符详解:布尔类型的三种声明方式、执行时间、赋值规则

1 布尔类型 1.1 布尔类型概述 布尔类型用于表示逻辑上的真(true)和假(false)两种状态,是编程中条件判断和逻辑运算的基础。在 C 语言中,布尔值的表示方式随着标准的发展而不断完善。 1.2 布尔类型的三种声…

【C++详解】string各种接口如何使用保姆级攻略

文章目录 一、string介绍二、string使用构造函数析构函数赋值运算符重载string的遍历修改方法1、下标[]2、迭代器3、范围for 迭代器使用详解const迭代器反向迭代器(reverse) Capacity(容量相关)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(缩容)reserve(扩…

回调函数应用示例

回调函数是一种通过函数指针(或引用)调用的函数,它在特定事件或条件发生时被另一个函数调用。回调函数的核心思想是将函数作为参数传递,以便在适当的时候执行自定义逻辑,常用于异步编程、事件驱动架构等场景。 业务场景…

linux标准库头文件解析

linuxc标准库 C 标准库&#xff08;C Standard Library&#xff09;包含了一组头文件&#xff0c;这些头文件提供了许多函数和宏&#xff0c;用于处理输入输出、字符串操作、数学计算、内存管理等常见编程任务。。 头文件功能简介<stdio.h>标准输入输出库&#xff0c;包含…

Unbuntu 命令

Ubuntu 命令速查表​ ​分类​​命令​​功能描述​​示例/常用选项​​​​文件与目录​ls列出目录内容ls -a&#xff08;显示隐藏文件&#xff09;; ls -lh&#xff08;详细列表易读大小&#xff09; cd切换目录cd ~&#xff08;主目录&#xff09;; cd ..&#xff08;上级…

怎么在excel单元格1-5行中在原来内容前面加上固定一个字?

环境&#xff1a; WPS 2024 问题描述&#xff1a; 怎么在excel单元格1-5行中在原来内容前面加上固定一个字&#xff1f; 解决方案&#xff1a; 1.在Excel中&#xff0c;如果您想在单元格的内容前面添加一个固定的字&#xff0c;可以通过以下几种方法实现&#xff1a; 方法…

Linux zip、unzip 压缩和解压

zip 命令用于压缩文件&#xff0c;压缩后的文件后缀名为 .zip 。 对应的解压命令是 unzip 。 测试用的目录结构如下&#xff0c; userzn:~/test$ tree . ├── folder1 │ ├── folder111 │ │ └── file1.txt │ └── main1.c ├── folder2 │ ├── …

【C语言练习】047. 理解递归与循环的转换

047. 理解递归与循环的转换 047. 理解递归与循环的转换1. 递归与循环的基本概念递归循环2. 递归与循环的转换示例1:计算阶乘示例2:汉诺塔问题3. 递归与循环的适用场景递归:循环:一、递归的适用场景与代码示例1. 分治问题2. 树形结构遍历3. 复杂状态问题二、循环的适用场景与…

我的创作纪念日——《惊变256天》

我的创作纪念日——《惊变256天》 机缘收获日常成就憧憬 最近&#xff0c;博主收到了 CSDN 发来的系统消息&#xff0c;这才惊觉&#xff0c;自上次第128天创作纪念日之后&#xff0c;竟又悄然走过了 128 天。站在 256 天这个颇具意义的里程碑前回望&#xff0c;博主在2023 年 …

Redis 事务与管道:原理、区别与应用实践

在现代分布式系统开发中&#xff0c;Redis 作为高性能的内存数据库&#xff0c;其事务处理和管道技术是开发者必须掌握的核心知识点。本文将深入探讨 Redis 事务和管道的实现原理、使用场景、性能差异以及最佳实践&#xff0c;帮助开发者根据实际需求选择合适的技术方案。 一、…

Mysql 8.0.32 union all 创建视图后中文模糊查询失效

记录问题,最近在使用union all聚合了三张表的数据,创建视图作为查询主表,发现字段值为中文的筛选无法生效.......... sql示例: CREATE OR REPLACE VIEW test_view AS SELECTid,name,location_address AS address,type,"1" AS data_type,COALESCE ( update_time, cr…

Spatial Transformer Layer

我们知道cnn是无法识别到经过缩放和旋转的图片的,但是这个spatial transformer这个neutral network是可以做到的,可以被放到cnn里 接下来就是讲解一个空间变换层地例子:我们可以看到,layerl就是layerl-1经过平移得到的,其中,我们layerl中的每一个元素,是上一层每一个元素与权重…

spark-standalone

一、定义&#xff1a;Standalone 模式是一种独立的集群部署模式&#xff0c;自带完整服务&#xff0c;可单独部署到一个集群中&#xff0c;无需依赖任何其他资源管理系统。 二、配置步骤 1.和前面一样拉到hadoop101的/opt/module这个目录里面。 2.压缩 3.重命名为spark-sta…

Vim编辑器命令模式操作指南

Vim 的命令模式&#xff08;即 Normal 模式&#xff09;是 Vim 的核心操作模式&#xff0c;用于执行文本编辑、导航、搜索、保存等操作。以下是命令模式下的常用操作总结&#xff1a; 1. 模式切换 进入命令模式&#xff1a;在任何模式下按 Esc 键&#xff08;可能需要多次按&a…

网络体系结构(OSI,TCP/IP)

网络体系结构 一、设计分层网络模型 简化设计&#xff1a;分层将复杂的大系统分解成小模块&#xff0c;每一层专注处理特定功能模块化&#xff1a;每一层独立&#xff0c;便于开发、调试、更新和维护互操作&#xff1a;不同厂家、不同系统之间可以互相兼容&#xff0c;统一标…

经典 算法

算法 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令。简单来说&#xff0c;算法 就是解决一个问题的具体方法和步骤。在计算机科学中&#xff0c;算法是程序设计的核心&#xff0c;它决定了程序如何执 行特定的…

【Spark】-- DAG 和宽窄依赖的核心

目录 Spark DAG 和宽窄依赖的核心 一、什么是 DAG? 示例:WordCount 程序的 DAG 二、宽依赖与窄依赖 1. 窄依赖 2. 宽依赖 三、DAG 与宽窄依赖的性能优化 1. 减少 Shuffle 操作 2. 合理划分 Stage 3. 使用缓存机制 四、实际案例分析:同行车判断 五、总结 Spark D…

C#中UI线程的切换与后台线程的使用

文章速览 UI线程切换示例 后台线程使用示例 两者对比适用场景Application.Current.Dispatcher.InvokeTask.Factory.StartNew 执行同步性Application.Current.Dispatcher.InvokeTask.Factory.StartNew 一个赞&#xff0c;专属于你的足迹&#xff01; UI线程切换 在WPF应用程序…

【HTML】个人博客页面

目录 页面视图​编辑 页面代码 解释&#xff1a; HTML (<body>): 使用了更加语义化的HTML5标签&#xff0c;例如<header>, <main>, <article>, <footer>。文章列表使用了<article>包裹&#xff0c;结构清晰。添加了分页导航。使用了Font…

第J1周:ResNet-50算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 我的环境 语言环境:Python3.8 编译器:Jupyter Lab 深度学习环境:Pytorchtorch1.12.1cu113 torchvision0.13.1cu113 一、准备工作 二、导入数据 三、划分数据…