如果系统权限策略不能满足您的要求,您可以创建自定义权限策略实现最小授权。使用自定义权限策略有助于实现权限的精细化管控,是提升资源访问安全的有效手段。本文介绍微服务引擎MSE使用自定义权限策略的场景和策略示例。
什么是自定义权限策略
在基于RAM的访问控制体系中,自定义权限策略是指在系统权限策略之外,您可以自主创建、更新和删除的权限策略。自定义权限策略的版本更新需由您来维护。
创建自定义权限策略后,需为RAM用户、用户组或RAM角色绑定权限策略,这些RAM身份才能获得权限策略中指定的访问权限。
已创建的权限策略支持删除,但删除前需确保该策略未被引用。如果该权限策略已被引用,您需要在该权限策略的引用记录中移除授权。
自定义权限策略支持版本控制,您可以按照RAM规定的版本管理机制来管理您创建的自定义权限策略版本。
操作文档
通过可视化编辑模式创建自定义权限策略
使用RAM管理员登录RAM控制台。
在左侧导航栏,选择 。
在权限策略页面,单击创建权限策略。
在创建权限策略页面,单击可视化编辑页签。
配置权限策略,如下。
在效果区域,选择允许或拒绝。
在服务区域,选择云服务。
说明支持可视化编辑模式的云服务以控制台界面显示为准。
在操作区域,选择全部操作或指定操作。
系统会根据您上一步选择的云服务,自动筛选出可以配置的操作。如果您选择了指定操作,您需要继续选择具体的操作。
在资源区域,选择全部资源或指定资源。
系统会根据您上一步选择的操作,自动筛选出可以配置的资源类型。如果您选择了指定资源,您需要继续单击添加资源,配置具体的资源ARN。您可以使用匹配全部功能,快速选择对应配置项的全部资源。
说明为了权限策略的正常生效,对操作关联的必要资源ARN标识了必要,强烈建议您配置该资源ARN。
在条件区域,单击添加条件,配置条件。
条件包括阿里云通用条件和服务级条件,系统会根据您前面配置的云服务和操作,自动筛选出可以配置的条件列表。您只需要选择对应条件键配置具体内容。
单击添加语句,重复上述步骤,配置多条权限策略语句。
检查并优化权限策略内容。
基础权限策略优化
系统会对您添加的权限策略语句自动进行基础优化。基础权限策略优化会完成以下任务:
删除不必要的条件。
删除不必要的数组。
可选:高级权限策略优化
您可以将鼠标悬浮在可选:高级策略优化上,单击执行,对权限策略内容进行高级优化。高级权限策略优化功能会完成以下任务:
拆分不兼容操作的资源或条件。
收缩资源到更小范围。
去重或合并语句。
输入权限策略名称和备注。
单击确定。
配置注册中心常用自定义授权样例
授予用户某些实例的只读服务的权限。
{ "Version": "1", "Statement": [ { "Action": [ "mse:QueryNacosNaming" ], "Resource": [ "acs:mse:*:*:instance/${instanceId1}", "acs:mse:*:*:instance/${instanceId2}" ], "Effect": "Allow" } ] }
授予用户某些实例读取和修改服务的权限。
{ "Version": "1", "Statement": [ { "Action": [ "mse:QueryNacosNaming", "mse:UpdateNacosNaming" ], "Resource": [ "acs:mse:*:*:instance/${instanceId1}", "acs:mse:*:*:instance/${instanceId2}" ], "Effect": "Allow" } ] }
说明${instanceId1}和${instanceId2}代表的是注册中心实例ID。
授予用户只能读取某个实例中的某个命名空间服务的权限。
{ "Statement": [ { "Effect": "Allow", "Action": "mse:QueryNacosNaming", "Resource": "acs:mse:*:*:instance/${instance_id}/${namespaceId}" } ], "Version": "1" }
授予用户能读取和修改某个实例中某个命名空间下的${group}服务的权限。
{ "Statement": [ { "Effect": "Allow", "Action": [ "mse:QueryNacosNaming", "mse:UpdateNacosNaming" ], "Resource": "acs:mse:*:*:instance/${instance_id}/${namespaceId}/${group}" } ], "Version": "1" }
授予用户只能读取某个${group}下的${serviceName}服务的权限。
{ "Statement": [ { "Effect": "Allow", "Action": "mse:QueryNacosNaming", "Resource": "acs:mse:*:*:instance/${instance_id}/${namespaceId}/${group}/naming/${serviceName}" } ], "Version": "1" }
授予用户读取和修改某个${group}下的${serviceName}服务的权限。
{ "Statement": [ { "Effect": "Allow", "Action": [ "mse:QueryNacosNaming", "mse:UpdateNacosNaming" ], "Resource": "acs:mse:*:*:instance/${instance_id}/${namespaceId}/${group}/naming/${serviceName}" } ], "Version": "1" }
微服务治理常用自定义授权样例
所有应用的只读权限
为了方便企业内同学查看应用的关键信息,可以考虑授权所有应用的只读权限。
例如,使用阿里云账号授予RAM用户具备当前阿里云账号下的所有微服务治理应用的只读权限。
对应权限策略如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mse:QueryNamespace",
"mse:GetApplicationListWithMetircs",
"mse:ListNamespaces",
"mse:GetEventFilterOptions",
"mse:ListEventRecords",
"mse:GetEventDetail",
"mse:FetchLogConfig",
"mse:QueryBusinessLocations",
"mse:GetApplicationInstanceList",
"mse:listGrayTag",
"mse:QueryServiceDetailWithMetrics",
"mse:GetEventDetail",
"mse:ListEventsPage",
"mse:ListEventsByType",
"mse:GetApplicationTagList"
],
"Resource": "acs:mse:*:*:*"
},
{
"Effect": "Allow",
"Action": "mse:GetApplicationList",
"Resource": "acs:mse:*:*:namespace/${ns}"
}
]
}
某个应用的全部操作权限
作为企业内部某个应用的负责人,您将获得对该应用的所有操作权限,同时您的权限将严格限定在您管理的应用范围内。
例如,使用阿里云账号授予RAM用户以下权限:
RAM用户具备当前阿里云账号下的所有微服务治理应用的只读权限。
RAM用户具备指定的微服务治理应用的只读权限。
对应权限策略如下:
{
"Version": "1",
"Statement": [
// 对特定微服务治理应用具有所有权限
{
"Effect": "Allow",
"Action": "mse:*",
"Resource": "acs:mse:*:*:namespace/${ns}/application/${appName}"
},
// 下面为对所有微服务治理应用的只读权限
{
"Effect": "Allow",
"Action": [
"mse:QueryNamespace",
"mse:GetApplicationListWithMetircs",
"mse:ListNamespaces",
"mse:GetEventFilterOptions",
"mse:ListEventRecords",
"mse:GetEventDetail",
"mse:FetchLogConfig",
"mse:QueryBusinessLocations",
"mse:GetApplicationInstanceList",
"mse:listGrayTag",
"mse:QueryServiceDetailWithMetrics",
"mse:GetEventDetail",
"mse:ListEventsPage",
"mse:ListEventsByType",
"mse:GetApplicationTagList"
],
"Resource": "acs:mse:*:*:*"
},
{
"Effect": "Allow",
"Action": "mse:GetApplicationList",
"Resource": "acs:mse:*:*:namespace/${ns}"
}
]
某个命名空间下的全部操作权限
作为企业内部的测试人员,您将获得对测试环境(测试命名空间)所有应用的操作权限,同时您的权限将严格限定在测试环境(测试命名空间)内。
例如,使用阿里云账号授予RAM用户以下权限:
RAM用户具备当前阿里云账号下的所有微服务治理应用的只读权限。
RAM用户具备指定的微服务治理命名空间的读写权限。
对应权限策略如下:
{
"Version": "1",
"Statement": [
// 对特定微服务治理命名空间具有所有权限
{
"Effect": "Allow",
"Action": "mse:*",
"Resource": "acs:mse:*:*:namespace/${ns}/application/*"
},
// 下面为对所有微服务治理应用的只读权限
{
"Effect": "Allow",
"Action": [
"mse:QueryNamespace",
"mse:GetApplicationListWithMetircs",
"mse:ListNamespaces",
"mse:GetEventFilterOptions",
"mse:ListEventRecords",
"mse:GetEventDetail",
"mse:FetchLogConfig",
"mse:QueryBusinessLocations",
"mse:GetApplicationInstanceList",
"mse:listGrayTag",
"mse:QueryServiceDetailWithMetrics",
"mse:GetEventDetail",
"mse:ListEventsPage",
"mse:ListEventsByType",
"mse:GetApplicationTagList",
"mse:QueryAllSwimmingLaneGroup",
"mse:QueryAllSwimmingLane",
"mse:ListAppBySwimmingLaneGroupTags",
"mse:ListAppBySwimmingLaneGroupTag",
"mse:QuerySwimmingLaneById",
"mse:GetTagsBySwimmingLaneGroupId",
"mse:ListSwimmingLaneGateway",
"mse:ListSwimmingLaneGatewayRoute",
"mse:ListAuthPolicy",
"mse:GetServiceList",
"mse:GetServiceListPage"
],
"Resource": "acs:mse:*:*:*"
},
// 对特定微服务治理命名空间具有所有权限
{
"Effect": "Allow",
"Action": [
"mse:GetApplicationList",
"mse:CreateOrUpdateSwimmingLaneGroup",
"mse:CreateOrUpdateSwimmingLane",
"mse:DeleteSwimmingLaneGroup",
"mse:DeleteSwimmingLaneGroup",
"mse:DeleteSwimmingLane"
],
"Resource": "acs:mse:*:*:namespace/${ns}"
}
]
}
云原生网关常用自定义授权样例
所有资源
若您需要授权RAM用户/角色操作账号下所有的云原生网关实例,可以直接为RAM用户/角色添加如下系统权限策略:
只读:AliyunMSEReadOnlyAccess
读写:AliyunMSEFullAccess
指定网关资源
若您要授权RAM用户/角色操作指定的网关实例,可以为RAM用户/角色添加网关资源级权限。
示例一:授予RAM用户对云原生网关实例gw-8090caa2a3ab447a8bc5fdf3********的只读权限。
{ "Version": "1", "Statement": [ { "Action": [ "mse:Query*", "mse:List*", "mse:Get*", "mse:Select*", "mse:Pull*", "mse:GatewayBlackWhite*", "mse:GatewayHealthCheckList", "mse:GatewayQueryMonitor", "mse:UploadWasmFile" ], "Resource": "acs:mse:*:*:instance/gw-8090caa2a3ab447a8bc5fdf3********", "Effect": "Allow" }, { "Action": [ "mse:QueryDefaultAlertStatus", "mse:ListGatewayZone", "mse:ListUpgradableGatewayVersions", "mse:ListTagResources", "mse:ListGatewayIngressMigrateTask", "mse:ListEventRecords", "mse:GetEventFilterOptions", "mse:GetEventDetail", "mse:GetGatewaySelection", "mse:GetGatewayAlarms", "mse:GetGatewayMigrateNamespacedServices", "mse:GetGatewayIngressMigrateTaskDetail", "mse:GetPluginGuide", "mse:GetRegExpCheck", "mse:GetRegExpTest", "mse:CheckPluginLua" ], "Resource": "acs:mse:*:*:*", "Effect": "Allow" }, { "Action": [ "log:DescribeService", "log:ListProject", "log:GetProductDataCollection" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "arms:SearchContactGroup" ], "Resource": "*", "Effect": "Allow" } ] }
示例二:授予RAM用户对云原生网关实例gw-8090caa2a3ab447a8bc5fdf3********的读写权限。
{ "Version": "1", "Statement": [ { "Action": [ "mse:*" ], "Resource": "acs:mse:*:*:instance/gw-8090caa2a3ab447a8bc5fdf3********", "Effect": "Allow" }, { "Action": [ "mse:QueryDefaultAlertStatus", "mse:CreateDefaultAlert", "mse:ListGatewayZone", "mse:ListUpgradableGatewayVersions", "mse:ListEventRecords", "mse:GetEventFilterOptions", "mse:GetEventDetail", "mse:GetGatewaySelection", "mse:GetGatewayAlarms", "mse:GetGatewayMigrateNamespacedServices", "mse:GetPluginGuide", "mse:GetRegExpCheck", "mse:GetRegExpTest", "mse:CheckPluginLua", "mse:*TagResources", "mse:*CustomPlugin", "mse:*GatewayIngressMigrateTask*" ], "Resource": "acs:mse:*:*:*", "Effect": "Allow" }, { "Action": [ "log:DescribeService", "log:ListProject", "log:GetProductDataCollection", "log:OpenProductDataCollection" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "arms:SearchContactGroup" ], "Resource": "*", "Effect": "Allow" } ] }
注意
以上权限只包含了在MSE云原生网关控制台操作的必要权限。云原生网关的部分能力依赖于其他云产品,您可以根据其他云产品的权限配置文档按需为您的RAM子账号/角色配置权限,从而使其可以完整地使用云原生网关的所有功能。云原生网关依赖的其他云产品和对应的模块如下:
云产品 | 云原生网关模块 | 自定义权限配置参考文档 |
SLS |
| |
ARMS |
|