为了让您能够用统一的管控账号体系来配置阿里云云产品权限,SOFAStack 接入了阿里云访问控制 RAM(Resource Access Management)的账号体系,并且提供默认的平台级别的 权限策略。为了满足用户更加精细的权限配置需求,SOFAStack 运维管理模块下的单元化应用服务(LHC)、容器应用服务(AKS)以及经典应用服务(CAS) 针对完整的发布链路开放了更加细粒度的权限控制能力。
权限细分规则
以下列举了 LHC、AKS 及 CAS 的 API 和 RAM 中权限策略的对应关系。
Action 与 Resource 相关说明请参见 权限策略基本元素。
表 1:LHC 发布主链路的 API 和 Resource 的对应关系
模块分类 | Description | Action | Resource | 隔离级别 |
应用服务 | 创建容器应用服务 | CreateLDCContainerService | * | App Workspace |
修改容器应用服务 | UpdateLDCContainerService | * | App Workspace | |
ConfigMap | 创建配置项 | CreateLDCFederationConfigmap | * | Workspace |
修改配置项 | UpdateLDCFederationConfigmap | * | Workspace | |
删除配置项 | DeleteLDCFederationConfigmap | * | Workspace | |
查看配置项 | GetLDCFederationConfigmap | * | Workspace | |
Secret | 创建保密字典 | CreateLDCFederationSecret | * | Workspace |
更新保密字典 | UpdateLDCFederationSecret | * | Workspace | |
删除保密字典 | DeleteLDCFederationSecret | * | Workspace | |
发布单 | 创建发布单 | CreateLDCContainerserviceDeployment | * | Workspace |
表 2:AKS 发布主链路的 API 和 Resource 的对应关系
模块分类 | Description | Action | Resource |
工作空间 | 创建工作空间 | CreateWorkspace | tenant/$tenantId |
查询工作空间列表 | ListWorkspace | tenant/$tenantId | |
集群管理 | 创建集群 | CreateCluster | workspace/$workspaceId/cluster/ |
导入集群 | ImportCluster | workspace/$workspaceId/cluster/ | |
释放集群 | ReleaseCluster | workspace/$workspaceId/cluster/$clusterId/ | |
扩容集群 | ScaleCluster | workspace/$workspaceId/cluster/$clusterId/ | |
集群导入节点 | ImportClusterNodes | workspace/$workspaceId/cluster/$clusterId/ | |
删除集群节点 | ReleaseClusterNodes | workspace/$workspaceId/cluster/$clusterId/ | |
查询集群列表 | ListClusters | workspace/$workspaceId/cluster/ | |
查询集群日志 | DescribeClusterLogs | workspace/$workspaceId/cluster/$clusterId/ | |
应用元数据 | 创建应用 | CreateApp | application/ |
查询应用 | GetApp | application/$appId | |
查询应用列表 | QueryApp | application/ | |
应用服务 | 创建容器服务 | CreateAKSContainerServices | application/$appId/workspace/$workspaceId/containerservice |
查询容器服务列表 | ListAKSContainerservices | application/*/*/containerservice | |
创建/更新容器应用服务版本 | SaveAKSContainerservicesRevisions | application/$appId/workspace/$workspaceId/containerservice | |
查询容器应用服务版本列表 | ListAKSContainerServicesRevisions | application/$appId/workspace/$workspaceId/containerservice | |
查询容器应用服务版本 | GetAKSContainerServicesRevisions | application/$appId/workspace/$workspaceId/containerservice | |
查询service列表 | GetAKSContainerservices | application/$appId/workspace/$workspaceId/containerservice | |
获取容器服务的描述信息 | ReceiveAKSContainerservices | application/$appId/workspace/$workspaceId/containerservice | |
获取最新的revison供编辑 | ReceiveAKSContainerservicesRevisions | application/$appId/workspace/$workspaceId/containerservice | |
复制一个容器服务新草稿 | CloneAKSContainerservicesRevisions | application/$appId/workspace/$workspaceId/containerservice | |
创建容器服务版本 | UpdateAKSContainerservicesRevisions | application/$appId/workspace/$workspaceId/containerservice | |
快速更新镜像 | UpdateAKSContainerservicesImage | application/$appId/workspace/$workspaceId/containerservice | |
快速更新副本 | UpdateAKSContainerservicesReplicas | application/$appId/workspace/$workspaceId/containerservice | |
删除容器服务 | DeleteAKSContainerservices | application/$appId/workspace/$workspaceId/containerservice | |
删除容器服务pod | DeleteAKSContainerservicesPods | application/$appId/workspace/$workspaceId/containerservice | |
更新容器服务版本备注 | UpdateAKSContainerservicesRevisionremark | application/$appId/workspace/$workspaceId/containerservice | |
更新容器服务发布包 | UploadAKSContainerservicesPackage | application/*/workspace/*/containerservice | |
下载容器服务发布包 | DownloadAKSContainerservicesPackage | application/*/workspace/*/containerservice | |
删除容器服务发布包 | DeleteAKSContainerservicesPackage | application/*/workspace/*/containerservice | |
根据path删除oss存储资源 | DeleteAKSStorage | application/*/workspace/*/containerservice | |
根据path下载oss资源 | DownloadAKSStorage | application/*/workspace/*/containerservice | |
查询容器服务事件 | ListAKSEvent | application/*/workspace/*/containerservice | |
发布单 | 回滚发布单 | RollbackAKSOpsContainerService | workspace/$workspaceId/opsplan |
取消回滚 | CancelAKSOpsContainerService | workspace/$workspaceId/opsplan | |
创建发布单 | CreateAKSPlan | workspace/$workspaceId/opsplan | |
执行发布单 | ExecAKSPlan | workspace/$workspaceId/opsplan | |
取消发布单 | CancelAKSPlan | workspace/$workspaceId/opsplan | |
查询发布单 | GetAKSPlan | workspace/$workspaceId/opsplan |
表 3:CAS 发布主链路的 API 和 Resource 的对应关系
工作空间、应用元数据属于公共模块, CAS 与 AKS 表 2 中对应的内容相同。
资源相关接口仅列出了 ECS 机器资源,其余资源接口,例如负载均衡 SLB、云数据库 RDS、云数据库 Memcache、云数据库 Redis 等结构类似。
模块分类 | Description | Action | Resource |
应用服务 | 创建应用服务 | CreateCASAppservice | workspace/$workspaceId/classicservice/ |
查询应用服务列表 | ListCASAppservices | workspace/$workspaceId/classicservice/ | |
查询应用服务 | GetCASAppserviceDetail | workspace/$workspaceId/classicservice/$serviceId | |
删除应用服务 | DeleteCASAppservice | workspace/$workspaceId/classicservice/$serviceId | |
ECS 资源 | 创建机器资源 | CreateCasComputer | workspace/$workspaceId/computer/ |
查询机器列表 | DescribeCasComputers | workspace/$workspaceId/computer/ | |
释放机器资源 | ReleaseCasComputer | workspace/$workspaceId/computer/$computerId | |
发布单 | 创建应用部署发布单 | CreateDEPSPlan | workspace/$workspaceId/classicopsplan |
查询应用部署发布单列表 | QueryDEPSPlan | workspace/$workspaceId/classicopsplan | |
执行部署发布单 | ExecDEPSPlan | workspace/$workspaceId/classicopsplan | |
查询发布单中应用执行详情 | GetDEPSPlanProgress | workspace/$workspaceId/classicopsplan | |
创建应用运维发布单 | CreateDEPSPlanOperation | workspace/$workspaceId/classicopsplan | |
查询应用运维发布单 | CheckDEPSPlanOperation | workspace/$workspaceId/classicopsplan |
系统角色
AKS 和 CAS 默认提供三类角色:管理人员 Admin 、运维开发人员 DevOps、观察者 Observer。下表将上述 API 进行分类,描述不同 ARN Role 所拥有的 API 权限。
以下权限策略仅作示例,请以控制台页面为准。
角色类型 | 角色名称 | 资源操作权限 (Action) | 权限策略(RAM Policy) |
Admin 管理员 | 拥有对所有资源进行操作的权限 |
| |
DevOps 运维开发人员 |
|
| |
Observer 观察者 | 拥有只读权限 |
|
权限策略中的 Resource 的变量
权限策略声明中 Resource 包含的变量说明如下:
$workspaceId:工作空间 ID,可以在 全局设置 中的工作空间详情页中获取。
$namespace:命名空间名称,详情可在 SOFAStack 控制台左侧导航栏选择 多集群容器引擎 > 集群管理 > 命名空间 的列表页面获取。
$clusterId:集群 ID,新版 ACK 集群,可以在集群详情页的 概览 页签获取。
$appId:应用 ID,可以在应用管理的应用列表页面,基本信息 页签下获取。
$serviceId:经典应用服务 ID,可以在经典应用服务的应用服务实例详情页获取。
$computerId:云服务器 ECS ID,可以在经典应用服务的应用服务实例详情页的 云服务器 ECS 页签获取。
LHC 权限策略示例集
示例:通过 workspace ID 限制角色能在某个工作空间下创建应用服务。
{
"Version": "1",
"Statement": [
{
"Action": [
"sofa:CreateLDCContainerService"
],
"Resource": "acs:sofa:*:*:*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"sofa:Workspace": [
"2183736860"
]
}
}
}
]
}
对于其他接口,只需替换 Action
即可。
AKS 权限策略示例集
发布单
示例一:通过 app ID 限制角色不能对某个应用进行发布操作。
// 不能对某个 app 进行发布操作 { "Version": "1", "Statement": [ { "Action": [ "sofa:ExecAKSPlan" ], "Resource": "acs:sofa:*:*:workspace/*/opsplan", "Effect": "Deny", "Condition": { "StringEquals": { "sofa:App": [ "0000000000560002" ] } } } ] }
示例二:通过 workspace ID 限制角色不能对某个工作空间做发布操作。
//不能对某个工作空间做发布操作 { "Version": "1", "Statement": [ { "Action": [ "sofa:ExecAKSPlan" ], "Resource": "acs:sofa:*:*:workspace/*/opsplan", "Effect": "Deny", "Condition": { "StringEquals": { "sofa:Workspace": [ "2183736860" ] } } } ] }
创建自定义策略并授权
如果系统策略无法满足您的需求,您可以通过创建自定义策略实现精细化权限管理。
前提条件
创建自定义策略前,需先了解权限策略语言的基本结构和语法,请参见 权限策略语法和结构。