计算巢简介
计算巢是阿里云开放给ISV与其客户的服务管理PaaS平台,旨在解决ISV云上交付、部署、运维问题,建立ISV与客户之间的通道。针对ISV的实际场景,计算巢提供了私有化部署、托管版部署、代运维服务三种模式。托管版和私有化部署的区别是针对于部署在ISV的账号下还是部署在用户账号下。本文主要介绍计算巢不同场景下使用资源组功能的最佳实践。
功能介绍
资源组能够对用户拥有的云资源从用途、权限、归属等维度上进行分组,实现企业内部多用户、多项目的资源分级管理,实现比云账号更细粒度的鉴权。
计算巢目前有服务(service)和服务实例(serviceinstance)这两种资源接入了资源组,服务作为ISV的资源,在服务商侧支持ISV按照资源组对服务进行分组分权管理。服务实例这种资源比较特殊,严格意义上来说,私有化部署场景下服务实例是用户的资源,全托管场景下服务实例是服务商的资源,但是无论哪种场景下,服务实例都既和用户有关,又和服务商有关。
在资源组的定义中,资源的唯一键是由账号id+资源类型+地域+资源id组成的,支持一个资源加入到不同用户的资源组中的场景。在此业务背景下,服务实例这种资源既会加入到用户和的资源组中也会加入到服务商的资源组中,用户侧和服务商侧都支持利用资源组对服务实例进行分组分权管理。
服务接入资源组
-
创建服务页面,选择服务要加入的资源组, 如果不指定资源组,资源会放入默认资源组中
-
服务创建成功之后,在服务列表页面,可以按照资源组筛选相应的资源。
服务实例接入资源组
服务实例既要加到用户侧的资源组中,也要加到服务商侧的资源组中,那具体加入的资源组如何确定呢?
服务实例是一种特殊的资源,不是实体资源,一个服务实例下会有多个云产品资源,相当于一系列云资源的纳管,那服务实例加入了资源组后,其下云资源的资源组该如何确定呢?
针对这两个问题,分别以私有化服务和全托管服务两种场景进行解释。
私有化部署服务
一个私有化部署服务, 位于服务商的默认资源组下,用户根据此服务创建服务实例。
用户创建服务实例时,指定要加入的资源组,选定“阿里云”这个资源组, 如果此处选定了资源组,在后续选择已有的资源时也会限制只能从该资源组中选择,以此来确保服务实例及服务实例依赖的资源处于一个资源组中。
用户侧:实例创建完成之后,用户侧的服务实例位于创建时选择的资源组中,服务实例列表页可以根据该资源组筛选出相应的服务实例。
该服务实例下创建的资源,也位于选择的资源组中,和用户服务实例的资源组保持一致。
服务商侧:创建的服务实例位于默认资源组中,与其对应的服务所在的资源组保持一致。
全托管服务
一个全托管服务,位于用户侧“gh-test”的资源组下,全托管服务既可以用户创建服务实例,也可以服务商替用户创建服务实例:
用户侧创建全托管服务实例
此种场景下用户侧的服务实例具体要加入到哪个资源组中,在用户侧创建服务实例时确定,服务商侧的服务实例加入到该服务所在的资源组中。这个问题和私有化部署场景下相同。
与私有化场景下不同的点在于,全托管服务实例下的资源是部署在服务商账号下的,所以服务实例下的资源是位于服务商的资源组中, 与服务商侧服务实例的资源组保持一致。
服务商侧为用户创建全托管服务实例
全托管服务的用户类型有阿里云用户和非阿里云用户,如果是针对阿里云用户的全托管服务,服务商为阿里云用户创建服务实例时,设定用户的aliuid,和选定的资源组信息。
服务实例创建完成后,服务商侧的服务实例位于所选的资源组中,并非位于服务所在的资源组中
该服务实例下创建的资源,也位于选择的资源组中,和服务商侧服务实例的资源组保持一致。
用户侧的服务实例位于用户的默认资源组中。
针对非阿里云用户的全托管服务,服务商侧的设置和上述保持一致,只是无需将该资源加入到用户资源组中。也可以理解成用户侧的资源组和服务商侧的资源组保持一致。
总结
如果是用户创建的服务实例,加入的用户侧资源组在创建服务实例时确定,加入的服务商侧的资源组和服务的资源组保持一致。
如果是服务商创建的服务实例,服务商侧的资源组在创建实例时选择,如果是为阿里云用户创建服务实例,那么会放入到该阿里云用户的默认资源组中,如果是非阿里云用户,无需将该资源加入到用户资源组中。
私有化部署服务的场景下,服务实例下的资源及其依赖的资源与用户侧服务实例的资源组保持一致,全托管服务的场景下,服务实例下的资源及其依赖的资源与服务商侧服务实力的资源组保持一致。
跨资源组转移服务实例时,所依赖的资源及其创建出的资源不会自动转组,如果依赖资源也需要跟随转移时,需要单独转移依赖资源。请参考跨资源组转移资源。
典型场景
-
服务商对服务实例进行分组分权
全托管服务下:服务商为非阿里云用户创建服务实例时,希望各个用户的资源是隔离的,通过授权Ram子账号的方式给用户查看服务实例及其资源时,通过资源组分组分权就方便很多。具体步骤如下:
-
在资源组控制台创建两个资源组,名为 资源组A 和 资源组B, 资源组A和资源组B中分别有需要使用的已有的资源。
-
服务商需要为用户A和用户B分别创建两个Ram子账号Account A和 Account B,在 资源组A 中添加Account A的授权,在 资源组B 中添加Account B的授权, 计算巢用户侧需要添加AliyunComputeNestUserFullAccess的权限。若还需其他权限,可根据需求对用户A和用户B进行授权。具体步骤,请参见 添加RAM身份并授权 。通过对两个Ram子账号赋不同资源组范围的权限,实现两个用户的资源隔离和权限隔离。
-
服务商为用户A创建服务实例时,选对资源组A,之后在选择已有基础资源配置时,也只能从当前选定的资源组A中选择。
-
服务商为用户B创建服务实例时,选对资源组B,之后在选择已有基础资源配置时,也只能从当前选定的资源组B中选择。
-
服务实例创建完成之后,服务商侧可以从商家侧的服务实例列表按照资源组查看服务实例。同时各个实例下的资源都和实例所处的资源组保持一致。
-
若服务商要把服务实例交付给用户查看,可将上述的Account A 和Account B分别给到用户A和用户B, 由于Account A只有资源组A的权限,Account B只有资源组B的权限,所以可以实现两个用户的资源隔离和权限隔离。以用户A为例,用户A以Account A账号登录计算巢控制台后,只有在选择资源组A时,才能看到自己的资源。
选择其他的资源组时,就会提示没有权限,以此就实现了多用户的权限隔离。
小结
资源组能够帮助解决单个阿里云账号内的资源分组和授权管理的复杂性问题,计算巢服务实例涉及的业务场景也比较复杂,通过灵活地使用资源组功能,拓宽了计算巢的能力边界。