一,引言

  又到了新的一周了,也到了我新的分享的时间了,还记得上一周立得Flag,其中 “保证每周输出一篇文章” ,让我特别“在意”(这里用词不太恰当)。主要是我的一个大学舍友,他突然问了我一个关于写博的事情,自己也在上周开通了账号,也想着坚持写博客。在我看来,这确实是一件好事,写博不仅仅是分享的过程;也是自己提炼写博的一个过程,以及文章组织的能力,对自己还是很有好处的。这不仅仅要写内容要精炼,同时也要让别人能看的懂。加油,默默的在这里给他打气。(ง •_•)ง

好了,开始今天的分析

------------------------------------我是分割线------------------------------------

  上一周有介绍到Azure AD资源托管标识的内容,其实就包括如何去操作开启系统分配的托管标识,以及通过开启托管标识,VM如何去访问Azure 中的一些资源,如 “Key Vault” 等。今天去分析一波关于“Service Principal”(服务主体)。

二,正文

1,服务主体对象

  若要访问受 Azure AD 租户保护的资源,需要访问的实体必须由安全主体来表示。 这同时适用于用户(用户主体)和应用程序(服务主体)。安全主体定义 Azure AD 租户中用户/应用程序的访问策略和权限。 这样便可实现核心功能,如在登录时对用户/应用程序进行身份验证,在访问资源时进行授权。当应用程序被授予了对租户中资源的访问权限时(根据注册或许可),将创建一个服务主体对象。 Microsoft Graph ServicePrincipal 实体定义服务主体对象属性的架构。

2,应用程序和服务主体的关系

可以将应用程序对象视为应用程序的全局表示形式(供所有租户使用),将服务主体视为本地表示形式(在特定租户中使用)。

应用程序对象用作模板,常见属性和默认属性从其中派生,以便在创建相应服务主体对象时使用。 因此,应用程序对象与软件应用程序存在 1 对 1 关系,而与其对应的服务主体对象存在 1 对多关系。

必须在将使用应用程序的每个租户中创建服务主体,让它能够建立用于登录和/或访问受租户保护的资源的标识。 单租户应用程序只有一个服务主体(在其宿主租户中),在应用程序注册期间创建并被允许使用。 多租户 Web 应用程序/API 还会在租户中的某个用户已同意使用它的每个租户中创建服务主体。

下图演示了应用程序的应用程序对象和对应的服务主体对象之间的关系,其上下文是在名为 HR 应用的示例多租户应用程序中。 此示例方案中有三个 Azure AD 租户:

  • Adatum -开发HR 应用的公司使用的租户
  • Contoso -contoso 组织使用的租户,即HR 应用的使用者
  • Fabrikam -fabrikam 组织使用的租户,它也使用HR 应用

在此示例方案中:

表 1
步骤 说明
1 是在应用程序的宿主租户中创建应用程序对象和服务主体对象的过程。
2 当 Contoso 和 Fabrikam 的管理员完成同意并向应用程序授予访问权限时,会在其公司的 Azure AD 租户中创建服务主体对象,并向其分配管理员所授予的权限。 另请注意,HR 应用可能配置/设计为允许由用户同意以供个人使用。
3 HR 应用程序的使用者租户(例如 Contoso 和 Fabrikam)各有自己的服务主体对象。 每个对象代表其在运行时使用的应用程序实例,该实例受相关管理员同意的权限控制。

3,使用Azure CLI创建Azure服务主体(示例)

使用 az ad sp create-for-rbac 命令创建服务主体。创建服务主体时,请选择其使用的登录身份验证的类型。

 注意

如果您的帐户无权创建服务主体,将返回一条错误消息,其中包含“权限不足,无法完成操作”。请与您的Azure Active Directory管理员联系以创建服务主体。

3.1,在 “azure portal” 中验证当前的Azure订阅

az account show

3.2,显示订阅名称ID值的列表

az account list --query "[].{name:name, subscriptionId:id}"

3.3,使用 az ad sp create-for-rbac 命令,将其替换<subscription_id>为要使用的订阅帐户的ID

az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscription_id>"

注意:我们将创建一个具有 “Contributor” (贡献者角色:默认角色)的服务主体。该 “Contributor” 角色具有完全的权限读取和写入到Azure的账户,

成功完成后,该命令将显示几个值,包括自动生成的密码  

同时,我们可以在 “azure portal” 中可以找到对应的设置 选择=》Azure Active Directory

点击 “App registrations”

同时,我们可以在当前订阅下的 “IAM”中找到对应的角色访问权限信息。当然了,上面我创建服务主体的时候给的 scope 是整个订阅,也就是我们可以通过这个服务主体去访问azure的任何资源。

例如 "azure devops Pipeline" 在CD的过程,需要配置 "Service Principal"

例如使用Terraform 构建基础架构资源的时候,需要配置 Service Principal

三,总结

  使用Azure服务的自动化工具应始终具有受限权限。Azure提供服务主体,而不是让应用程序以完全特权用户身份登录。Azure服务主体是为与应用程序,托管服务和自动化工具一起使用而创建的身份,以访问Azure资源。这种访问受到分配给服务主体的角色的限制,使您可以控制可以访问哪些资源以及可以访问哪个级别。出于安全原因,始终建议将服务主体与自动化工具一起使用,而不是允许他们使用用户身份登录。

服务主体的默认角色是Contributor。该角色具有读取和写入Azure帐户的完整权限

参考资料:RBAC内置角色:https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles

作者:Allen

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

Azure AD(四)知识补充-服务主体的更多相关文章

  1. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  2. Azure AD(五)使用多租户应用程序模式让任何 Azure Active Directory 用户登录

    一,引言 距离上次分享关于 “Azure AD" 的知识过去差不多2个多月了, 今天最近刚好也是学习,分享一下关于Azure AD 使用多租户应用程序模式让任何 Azure Active D ...

  3. Azure AD(六)添加自定义域名

    一,引言 每当我们在 Azure Portal 上创建新的租户时,都会在设置租户的 "初始域名" 后加上 ".onmicrosoft.com",默认情况下 &q ...

  4. Azure AD(三)知识补充-Azure资源的托管标识

    一,引言 来个惯例,吹水! 前一周因为考试,还有个人的私事,一下子差点颓废了.想了想,写博客这种的东西还是得坚持,再忙,也要检查.要养成一种习惯,同时这也是自我约束的一种形式.虽然说不能浪费大量时间在 ...

  5. Azure AD Domain Service(二)为域服务中的机器配置 Azure File Share 磁盘共享

    一,引言 Azure File Share 是支持两种认证方式的! 1)Active Directory 2)Storage account key 记得上次分析的 "Azure File ...

  6. 掀起Azure AD的盖头来——深入理解Microsoft Graph应用程序和服务权限声明

    作者:陈希章 发表于 2017年7月12日 引子 这是一篇计划外的文章.我们都知道要进行Microsoft Graph的开发的话,需要进行应用程序注册.这个在此前我已经有专门的文章写过了.但这里存在一 ...

  7. Azure AD Domain Service(一)将 Azure VM 实例添加到域服务里

    一,引言 有网友提到实际项目中如何将 Azuer VM 实例加入到 Azure AD 域,那我们今天就带着整个问题开始今天的分析!首先我们得了解什么是 Azure AD 域服务,Azure AD 域服 ...

  8. 注册Azure AD 应用程序

    作者:陈希章 发表于2017年3月22日 在此前的文章中,我给大家介绍了分别用Graph 浏览器以及第三方工具(POSTMAN)快速体验Microsoft Graph的功能,其中有一个重要的环节就是, ...

  9. Azure AD(一)入门认识

    一,引言(吹水) 距离上一次介绍Azure Functions的相关博文以及过期快一个月了,本来早早都想好已经规划好的Azure的相关的学习的路线,无奈还是由于自己文笔不好以及自身太懒,导致博文没有更 ...

随机推荐

  1. 【Leetcode】164. Maximum Gap 【基数排序】

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...

  2. day04:购物车的练习(20170216)

    product_list = [ ('IPhone',5900), ('Mac pro',9800), ('Bike',800), ('Watch',16000), ('Coffee',35), (' ...

  3. java中的上下问解释以及ServletContext介绍使用

    摘抄的:所谓上下文,它是用来存储系统的一些初始化信息,例如在jboss中通过配置文件指定了数据源,那么在jboss启动的时候就把这个文件的相关信息上下文中,于是在我们使用这个数据源的时候,就需要先获得 ...

  4. F. Pathwalks动态开辟线段树

    题意:n点m边,然后要求走最多的路,走路的时候经过的边权必须是严格递增. 解法1:传统的区间更新 解法2:发现区间更新只是对两个固定的点所延长形成的区间段,所以问题可以退化成单点更新单点查询. 然后动 ...

  5. poj 2296

    Map Labeler Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2047   Accepted: 682 Descri ...

  6. 官网下载Java连接MySql驱动jar包

    官网地址:http://dev.mysql.com/downloads/connector/ 1.选择下载驱动 2.选择下载 3.可以不登录直接下载 4.下载下来的是zip压缩包,解压之后,文件夹中有 ...

  7. 一,初次接触html+css需要注意的小问题

    不足之处请不吝赐教,在评论区帮忙补充 html最基础的,入门学习的是标签,常用的标签有<a>      定义锚.<b>      定义粗体字.<br>      单 ...

  8. 剑指Offer之矩形覆盖

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 思路:与裴波拉 ...

  9. Docker部署nginx,tomcat,es,可视化

    nginx [root@iz2zeaet7s13lfkc8r3e2kz /]# docker pull nginx #下载 Using default tag: latest latest: Pull ...

  10. C# 根据BackgroundWoker异步模型和ProgressBar控件,自定义进度条控件

    前言 程序开发过程中,难免会有的业务逻辑,或者算法之类产生让人能够感知的耗时操作,例如循环中对复杂逻辑处理;获取数据库百万乃至千万级数据;http请求的时候等...... 用户在使用UI操作并不知道程 ...