全部产品

细粒度权限控制

更新时间:2020-10-21 12:05:47

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

文本介绍了在RAM中可以授权的跟 AKS 及 CAS 相关的权限细分规则和权限策略。

权限细分规则

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

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

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

模块分类 Description Action Resource
工作空间 创建工作空间 CreateWorksapce 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

表 2:CAS 发布主链路的 API 和 Resource 的对应关系

说明
  • 工作空间、应用元数据属于公共模块, CAS 与 AKS 表 1 中对应的内容相同。
  • 资源相关接口仅列出了 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 worskapce/$workspaceId/classicopsplan
    查询应用部署发布单列表 QueryDEPSPlan worskapce/$workspaceId/classicopsplan
    执行部署发布单 ExecDEPSPlan worskapce/$workspaceId/classicopsplan
    查询发布单中应用执行详情 GetDEPSPlanProgress worskapce/$workspaceId/classicopsplan
    创建应用运维发布单 CreateDEPSPlanOperation worskapce/$workspaceId/classicopsplan
    查询应用运维发布单 CheckDEPSPlanOperation worskapce/$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,可以在 全局设置 中的工作空间详情页中获取。

      image.png

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

      image.png

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

      image.png

    • $appId:应用 ID,可以在应用管理的应用列表页面获取。

      image.png

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

      image.png

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

      image.png

    AKS 权限策略示例集

    发布单

    • 示例一:通过 app ID 限制角色不能对某个应用进行发布操作。

      1. // 不能对某个 app 进行发布操作
      2. {
      3. "Version": "1",
      4. "Statement": [
      5. {
      6. "Action": [
      7. "sofa:ExecAKSPlan"
      8. ],
      9. "Resource": "acs:sofa:*:*:workspace/*/opsplan",
      10. "Effect": "Deny",
      11. "Condition": {
      12. "StringEquals": {
      13. "sofa:App": [
      14. "0000000000560002"
      15. ]
      16. }
      17. }
      18. }
      19. ]
      20. }
    • 示例二:通过 workspace ID 限制角色不能对某个工作空间做发布操作。

      1. // 不能对某个工作空间做发布操作
      2. {
      3. "Version": "1",
      4. "Statement": [
      5. {
      6. "Action": [
      7. "sofa:ExecAKSPlan"
      8. ],
      9. "Resource": "acs:sofa:*:*:workspace/*/opsplan",
      10. "Effect": "Deny",
      11. "Condition": {
      12. "StringEquals": {
      13. "sofa:Workspace": [
      14. "2183736860"
      15. ]
      16. }
      17. }
      18. }
      19. ]
      20. }

    创建自定义策略并授权

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

    前提条件

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

    操作步骤

    1. 云账号登录 RAM 控制台

    2. 在左侧导航栏的 权限管理 菜单下,单击 权限策略管理

    3. 单击 创建权限策略

    4. 输入 策略名称备注

    5. 配置模式 选择 脚本配置

      • 若选择 可视化配置:单击 添加授权语句,根据界面提示,对权限效力、操作名称和资源等进行配置,然后单击 确定
      • 若选择 脚本配置,请参考 权限策略语法和结构 编辑策略内容。
    6. 单击 确定

    7. RAM 用户授权