细粒度权限控制

更新时间:2024-01-12 09:22:39

为了让您能够用统一的管控账号体系来配置阿里云云产品权限,SOFAStack 接入了阿里云访问控制 RAM(Resource Access Management)的账号体系,并且提供默认的平台级别的 权限策略。为了满足用户更加精细的权限配置需求,SOFAStack 运维管理模块下的单元化应用服务(LHC)、容器应用服务(AKS)以及经典应用服务(CAS) 针对完整的发布链路开放了更加细粒度的权限控制能力。

权限细分规则

以下列举了 LHC、AKS 及 CAS 的 API 和 RAM 中权限策略的对应关系。

说明

Action 与 Resource 相关说明请参见 权限策略基本元素

表 1:LHC 发布主链路的 API 和 Resource 的对应关系

模块分类

Description

Action

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

模块分类

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

模块分类

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)

角色类型

角色名称

资源操作权限 (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 用户授权

  • 本页导读 (0)
  • 权限细分规则
  • 系统角色
  • 权限策略中的 Resource 的变量
  • LHC 权限策略示例集
  • AKS 权限策略示例集
  • 创建自定义策略并授权
  • 前提条件
  • 操作步骤