Azure的官方文档介绍了如何创建用于Azure基于角色的访问控制的自定义角色(RBAC Role)。 我们也可以根据同样的原理把RBAC细粒度资源管理运用于微服务产品的开发部署中。(https://www.azure.cn/documentation/articles/role-based-access-control-custom-roles/)

由于快速变化的业务需求,微服务的系统架构设计经常会发生变化,开发团队常常需要增加一个新的微服务,降级一个旧版本的微服务,把一个微服务分隔成2个。。。而在这个敏捷发布过程中,基础架构则相对稳定,变动较少。而当开发需要在云平台快速地开发调试部署新的微服务的时候,运维则非常担心拥有云资源权限的开发会误删网络,NSG之类的基础架构从而影响到测试环境生产环境的稳定性。我们常常可以看到运维团队坚决反对给开发团队开放权限。

Azure提供的RBAC 自定义角色通过赋予开发所需的最小权限集很好的解决了这个问题。让我们来看一个简单的实例。

我们的系统将部署在Azure的资源组Meow和MeowNetwork中。 MeowNetwork资源组目前包括一个Vnet,其中有2个子网,microservicesubnet用于部署微服务·,GatewaySubnet则用于一些基础设施,比如和公司onpremises网络的连接,我们还可以在这个资源组里加入子网的NSG。Meow资源组则用于部署应用系统比方虚拟机和存储账号。

接下来的任务就是由开发在子网1里部署微服务了。先来分析一下开发需要/不需要什么样的权限。

  1. 开发能够看到和操作整个MeowMeow应用系统的资源,这会帮助他们了解整个系统
  2. 开发能够在vnet里添加虚拟机并做监测
  3. 只有运维可以改动删除vnet,subnet和gatewaysubnet等基础设施的权限

我们先分配资源组Meow参与者和资源组MeowNetwork的网络参与者权限给一个“test”用户

用这个用户账号登录azure后,我们试试能不能在Meow资源组里创建一个虚拟机加入虚拟网

很好,新的vm加入到子网microservicesubnet.

我们再看看这个用户能不能改vnet设置,试试看删一下gateway子网

删掉了!!!

显然把资源组MeowNetwork的网络参与者的权限给用户“test”不是一个好主意。我们需要更细粒度的权限集,这就需要我们使用自定义RBAC角色。

针对我们的需求,最小的权限集应该是所有读取权限加上虚拟机“Virtual Network Subnet -》 其他操作-》Join Virtual Network”的权限

参考http://www.cnblogs.com/hengwei/p/5874776.html来定义一个新的 Virtual Network Joiner 的role. 代码如下:

#获取"Reader"配置
$role = Get-AzureRmRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Virtual Network Joiner"
$role.Description = "Join application (vm) to the existing virtual network" 

#加入“Join Subnet”的权限
$role.Actions.Add("Microsoft.Network/virtualNetworks/subnets/join/action") 

#把Subscription加入到这个Role管理范围中
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/你的subscription id") 

#给用户添加角色
New-AzureRmRoleDefinition -Role $role

New-AzureRmRoleAssignment -SignInName 用户的sign in name -Scope /subscriptions/你的subscription id/resourceGroups/MeowNetwork -RoleDefinitionName "Virtual Network Joiner"

  

此时用户拥有资源组Meow参与者和资源组MeowNetwork的“Virtual Network Joiner”权限,再测试一下,虚拟机可以创建

再看看能不能删子网

显然从管理门户上根本看不到删除选项,成功^_^

题外话: 在测试过程中我们注意到,powershell创建并分配role后权限是立即生效的,但是管理门户上过了半小时左右才显示出这个新创建的role。

总结:

随着越来越多的公司开始实施DevOps,对开发团队开放云平台的权限势在必行。

一个细粒度的资源管理很好地支持并保障了多team合作项目的平稳运行。

在微服务系统开发部署中使用Azure RBAC自定义角色的更多相关文章

  1. 使用SpringCloud实现的微服务软件开发部署到Linux上占用内存过大问题解决办法

    问题描述 最近上线的一个使用JAVA的Spring Cloud开发的ERP软件,部署上线时发现很严重的内存资源占用过高问题,而实际上开发测试并没有很大的访问量,甚至却出现了服务器无法正常访问的现象. ...

  2. JWT如何在Spring Cloud微服务系统中在服务相互调时传递

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78676036 本文出自方志朋的博客 在微服务系统中,为了保证微服务系统的安全,常常使用jw ...

  3. 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

    由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...

  4. .NET Core 微服务架构-Docker部署

    本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(ASP.NET C ...

  5. Apollo-open-capacity-platform 微服务能力开发平台 (转)

    来自大佬的apollo整合微服务的教程:欢迎大家点评和star,链接如下:https://gitee.com/owenwangwen/open-capacity-platform 官方demo链接:h ...

  6. Java生鲜电商平台-高可用微服务系统如何设计?

    Java生鲜电商平台-高可用微服务系统如何设计? 说明:Java生鲜电商平台高可用架构往往有以下的要求: 高可用.这类的系统往往需要保持一定的 SLA,7*24 时不间断运行不代表完全不挂,而是有一定 ...

  7. SpringCloud(9)使用Spring Cloud OAuth2保护微服务系统

    一.简介 OAth2是一个标准的授权协议. 在认证与授权的过程中,主要包含以下3种角色. 服务提供方 Authorization Server. 资源持有者 Resource Server. 客户端 ...

  8. 微服务项目开发学成在线_day02 CMS前端开发

    1 Vue.js与Webpack研究 开发版的浏览器:https://www.google.cn/intl/zh-CN/chrome/dev/ 前端的开发框架:微服务项目开发学成在线_Vue.js与W ...

  9. 流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色

    大规模微服务场景下灰度发布与流量染色实践 https://mp.weixin.qq.com/s/UBoRKt3l91ffPagtjExmYw [go-micro]微服务协作开发.灰度发布之流量染色 - ...

随机推荐

  1. 开发一款直播APP系统软件应该有哪些功能,如何开发?

    1.技术实现层面: 技术相对都比较成熟,设备也都支持硬编码.IOS还提供现成的 Video ToolBox框架,可以对摄像头和流媒体数据结构进行处理,但Video ToolBox框架只兼容8.0以上版 ...

  2. 进程间通信系列 之 消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  3. macOS 中的 Rootless 机制

    一.前因 苹果从 OS X El Capitan 10.11 系统开始使用了 Rootless 机制,可以将该机制理解为一个更高等级的系统的内核保护措施,系统默认将会锁定 /system./sbin. ...

  4. CSS的position/float/display

    一.position position属性取值:static(默认).relative.absolute.fixed.inherit. postision:static:始终处于文档流给予的位置.它可 ...

  5. Linux学习之竿头直上

    今天第二讲昨天我们讲解了10基础命令,今早上我继续为大家讲解10个linux常见命令 今天主要讲解与网络相关的命令和软件安装的命名 NetworkManager 与rpm 在windows中我们查看网 ...

  6. 玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理

    背景 在分布式系统中,我们有多个web app,这些web app可能分别部署在不同的物理服务器上,并且有各自的日志输出.当生产问题来临时,很多时候都需要去各个日志文件中查找可能的异常,相当耗费人力. ...

  7. 第二章 基本图像处理(Image Processing)

    主要内容: 图像的表示----介绍图像是如何表示的,以及所有基本操作的作用对象 高斯滤波-----滤波操作的原理与应用 图像金字塔-----高斯和拉普拉斯 边缘检测-----Sobel算子和Lapla ...

  8. Android GreenDAO3.0——介绍

    引言 最近,学东西比较零散,各种知识混杂,于是记下学习记录,免得又忘了. 官方网址:http://greenrobot.org/greendao/documentation/introduction/ ...

  9. 《大型网站系统与JAVA中间件实践学习笔记》-1

    第一章:分布式系统介绍 定义:分布式系统是一组分布在网络上通过消息传递进行协作的计算机组成系统. 分布式系统的意义 升级单机处理能力的性价比越来越低 单机处理器能力存在瓶颈 处于稳定性和可用性考虑 阿 ...

  10. Java7中的ForkJoin并发框架初探(下)—— ForkJoin的应用

    前两篇文章已经对Fork Join的设计和JDK中源码的简要分析.这篇文章,我们来简单地看看我们在开发中怎么对JDK提供的工具类进行应用,以提高我们的需求处理效率. Fork Join这东西确实用好了 ...