概述
Nacos引擎支持IAM权限管理实现控制面细粒度鉴权,通过创建IAM自定义策略,用户可以实现对Nacos引擎命名空间及其资源访问及操作权限的控制。本文介绍如何通过IAM自定义策略为Nacos配置细粒度鉴权。
IAM权限简介
如果需要对Nacos资源进行精细的权限管理,可以使用统一身份认证(Identity and Access Management,简称IAM)服务。IAM是一种基于用户的授权策略。通过设置IAM自定义策略,您可以控制用户访问您名下哪些资源的权限,例如限制您的用户只拥有对某一个命名空间的读权限等。
默认情况下,天翼云主账号拥有对资源的完全控制权限,而主账号创建的IAM用户没有任何权限。主账号将IAM用户加入用户组,并给用户组授予策略或角色之后,IAM用户获得相应的权限,这一过程称为授权。授权后,IAM用户就可以基于被授予的权限对云服务进行操作。
IAM策略
在向用户组授权时,需要选择授权策略。授权策略有两种:系统策略和自定义策略。
微服务引擎注册配置中心服务预置了RCC-admin、RCC-user和RCC-viewer三个系统策略:
RCC-admin拥有微服务引擎-注册配置中心(RCC)全读写访问权限;
RCC-user仅用于管理微服务引擎-注册配置中心(RCC)控制台的资源操作,但不包含新购、续订、变配、退订等订单类相关操作;
RCC-viewer拥有微服务引擎-注册配置中心(RCC)只读访问权限;
为了实现Nacos命名空间级别的权限控制,在授权时,需要创建自定义策略并授权,目前支持以下两种方式创建自定义策略:
可视化视图:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源等策略内容,可自动生成策略。
JSON视图:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。
关于创建自定义策略的详细介绍,请参考IAM关于创建自定义策略的介绍。
策略语法
策略结构:包括Version(策略版本号)和Statement(策略权限语句)两部分,其中Statement可以有多个,表示不同的授权项。
策略参数:包含Version和Statement两部分。Statement(策略权限语句)中包含授权效果(Effect)、授权项(Action)、资源(Resource)等信息。
关于策略结构和参数的详细介绍,请参考IAM关于策略语法的介绍。
授权项(Action)
目前支持命名空间级别权限控制的授权项如下:
| 权限 | Action |
| 查询Nacos命名空间信息 | rcc:inst:query_nacos_namespace_info |
| 查询Nacos服务信息 | rcc:inst:query_nacos_service_info |
| 查询Nacos配置信息 | rcc:inst:query_nacos_config_info |
| Nacos命名空间管理 | rcc:inst:nacos_namespace_manage |
| Nacos服务管理 | rcc:inst:nacos_service_manage |
| Nacos配置管理 | rcc:inst:nacos_config_manage |
资源(Resource)
资源路径CTRN是描述天翼云资源的表达式,微服务引擎-注册配置中心描述Nacos命名空间资源的表达式如下:
ctrn:rcc:{V#regionId}:{K#accountId}:nacos/{V#instanceId}/namespaceId/{V#namespaceId}
参数说明:
| 参数 | 描述 |
| regionId | 资源池标识(regionCode),支持通配符‘*’。 |
| accountId | 账户标识,系统自动填充。目前不参与鉴权。 |
| instanceId | Nacos实例ID,支持通配符‘*’。 |
| namespaceId | Nacos命名空间ID,支持通配符‘*’ 例1:* 表示对任意命名空间指定权限。 例2:prod* 表示对ID以pord开头的命名空间指定权限。 |
操作步骤
登录IAM控制台。
点击左侧导航窗格的“策略管理”,点击策略管理页面的“创建自定义策略”按钮,进入创建自定义策略页面。
输入策略名称、策略描述等基本信息后,点击“下一步”。
选择“可视化视图”。
效果:选择“允许”或“拒绝”。
云服务:选择“微服务引擎-注册配置中心”。
选择“操作”,根据需求勾选相关的产品权限。
资源:选择“特定资源”,单击“添加资源”可以根据目前权限的关联资源路径模板来指定需要授权的资源。
单击“确定”,完成自定义策略的创建。
将创建好的自定义策略授予给用户。
自定义策略示例
示例1:给用户授予的所有命名空间的权限
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "rcc:inst:query_nacos_service_info", "rcc:inst:query_nacos_config_info", "rcc:inst:query_nacos_namespace_info", "rcc:inst:nacos_service_manage", "rcc:inst:nacos_namespace_manage", "rcc:inst:nacos_config_manage" ], "Resource": [ "ctrn:rcc:*:*:nacos/*/namespaceId/*" ] } ] }
|
示例2:给用户授予实例特定命名空间的权限
示例表示用户可以访问命名空间ID以test开头的命名空间
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "rcc:inst:query_nacos_service_info", "rcc:inst:query_nacos_config_info", "rcc:inst:query_nacos_namespace_info", "rcc:inst:nacos_service_manage", "rcc:inst:nacos_namespace_manage", "rcc:inst:nacos_config_manage" ], "Resource": [ "ctrn:rcc:*:*:nacos/*/namespaceId/test*" ] } ] } |
示例3:给用户授予禁止访问实例特定命名空间的权限
示例表示禁止用户访问所有Nacos实例中命名空间ID以prod开头的命名空间
{ "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "rcc:inst:query_nacos_service_info", "rcc:inst:query_nacos_config_info", "rcc:inst:query_nacos_namespace_info", "rcc:inst:nacos_service_manage", "rcc:inst:nacos_namespace_manage", "rcc:inst:nacos_config_manage" ], "Resource": [ "ctrn:rcc:*:*:nacos/*/namespaceId/prod*" ] } ] } |
注意
由于权限策略同步存在一定的延迟,在授予相关的权限后,可能需要等待5~10分钟权限才能生效,请您耐心等候。