细粒度权限控制

为了让您能够用统一的管控账号体系来配置阿里云云产品权限,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 管理员

AliyunSOFAAdmin

拥有对所有资源进行操作的权限

json { "Statement": [ { "Action": "sofa:*", "Effect": "Allow", "Resource": "*" } ], "Version": "1" }

DevOps 运维开发人员

AliyunSOFADevOps

  • AKS:运维人员不可创建工作空间和集群,不可回滚和取消回滚发布单

  • CAS:运维人员不可创建工作空间。所拥有的权限如下:

    • 查询工作空间列表

    • 创建/更新/查询/删除应用分组

    • 创建/查询/更新/删除应用

    • 创建/查询/绑定/解绑机器资源

    • 创建/查询/更新/删除应用服务

    • 创建/查询/更新/删除发布单

json { "Statement": [ { "Action": [ "sofa:CreateCluster", "sofa:CreateWorkspace", "sofa:CancelAKSOpsContainerService", "sofa:CancelAKSPlan" ], "Effect": "Deny", "Resource": "*" }, { "Action": "sofa:*", "Effect": "Allow", "Resource": "*" } ], "Version": "1" }

Observer 观察者

AliyunSOFAObserver

拥有只读权限

json { "Statement": [ { "Effect": "Allow", "Action": [ "sofa:Get*", "sofa:List*", "sofa:Query*", "sofa:Find*", "sofa:Exist*", "sofa:Count*", "sofa:Receive*" ], "Resource": "*" ], "Version": "1" }

权限策略中的 Resource 的变量

权限策略声明中 Resource 包含的变量说明如下:

  • $workspaceId:工作空间 ID,可以在 全局设置 中的工作空间详情页中获取。

    121

  • $namespace:命名空间名称,详情可在 SOFAStack 控制台左侧导航栏选择 多集群容器引擎 > 集群管理 > 命名空间 的列表页面获取。

    22.jpg

  • $clusterId:集群 ID,新版 ACK 集群,可以在集群详情页的 概览 页签获取。

    222.jpg

  • $appId:应用 ID,可以在应用管理的应用列表页面,基本信息 页签下获取。

    2.jpg

  • $serviceId:经典应用服务 ID,可以在经典应用服务的应用服务实例详情页获取。

    3.jpg

  • $computerId:云服务器 ECS ID,可以在经典应用服务的应用服务实例详情页的 云服务器 ECS 页签获取。

    33.jpg

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"
                        ]
                    }
                }
            }
        ]
    }

创建自定义策略并授权

如果系统策略无法满足您的需求,您可以通过创建自定义策略实现精细化权限管理。

前提条件

创建自定义策略前,需先了解权限策略语言的基本结构和语法,请参见 权限策略语法和结构

操作步骤

  1. 创建权限策略

  2. RAM 用户授权