授权概述

容器计算服务(ACS)的授权体系包含对基础资源层的RAM授权和对ACS集群层的RBAC(Role-Based Access Control)授权两部分。本文介绍容器服务ACS集群访问控制授权的组成及方式。

ACS授权体系

ACS的授权体系包含对基础资源层的RAM授权以及对ACS集群层的RBAC授权。ACS授权体系如下图所示。

image
  • RAM授权包括对集群的运维操作,因为ACS集群是 ACK 的一种 Serverless K8s 集群类型,对ACS集群的运维操作需要通过ACK OpenAPI执行,所以需要获取ACK产品及其所依赖的阿里云产品的OpenAPI操作权限,主要包括以下操作:

    • 集群:创建、查看、删除。

    • 集群RBAC授权管理。

    • 集群监控、日志、事件。

  • RBAC授权对应的是运行于ACS集群中Kubernetes应用的运维操作,需要获取ACS集群及其命名空间的操作权限,主要包括对以下Kubernetes对象的增删改查操作:

    • 工作负载:Deployment、StatefulSet、Job、CronJob、Pod、ReplicaSet、HPA等。

    • 网络:Service、Ingress、NetworkPolicy等。

    • 存储:PV、PVC、StorageClass等。

    • Namespace、ConfigMap、Secrets等。

因此当RAM用户或RAM角色需要进行集群运维和应用运维时,您需要依次对其进行RAM授权和RBAC授权。在进行RBAC授权前,您需要先进行RAM授权。三种典型场景的授权操作,如下所示:

RAM授权

在企业对接RAM的账号系统中,运维人员通过RAM用户或RAM角色管理云服务资源是一个常见场景。然而默认情况下RAM用户或RAM角色没有任何权限使用云服务OpenAPI,为了保证云服务功能的正常使用,需要对RAM用户或RAM角色授权。

当您需要对集群进行可见性、扩缩容、添加节点等操作时,需要进行RAM授权。更多信息,请参见自定义RAM授权策略

RAM授权支持以下两种方式:

  • RAM系统策略授权:用于指定全局资源的读写访问控制。当RAM用户或RAM角色具有阿里云账号下所有集群的运维管理权限时,建议使用系统策略进行快捷授权。具体操作,请参见为RAM用户或RAM角色授权

    容器计算服务的常用系统策略如下表所示,您可以根据业务需求添加对应的系统策略。

    系统策略名称

    说明

    AliyunCSFullAccess

    使RAM用户或RAM角色在创建ACS集群时获得访问所有ACK OpenAPI的权限。

    重要

    该权限操作范围包括除ACS类型以外ACK全部集群,请谨慎使用。此系统策略仅包含针对ACK产品OpenAPI的RAM授权。如您需要对ACS集群中的应用进行运维,还需要进行RBAC授权,请参见RBAC授权

    AliyunCSReadOnlyAccess

    使RAM用户或RAM角色在创建ACS集群时获得访问ACK 所有只读OpenAPI的权限,该权限操作范围包括除ACS类型以外的所有ACK集群,请谨慎使用。

    AliyunACCFullAccess

    使RAM用户或RAM角色获得容器计算服务产品所有OpenAPI的访问权限。

    AliyunACCReadOnlyAccess

    使RAM用户或RAM角色获得容器计算服务产品的所有只读OpenAPI权限。

    AliyunVPCReadOnlyAccess

    使RAM用户或RAM角色在创建集群时可以选择并指定VPC。

    AliyunContainerRegistryFullAccess

    使RAM用户或RAM角色获得阿里云账号内业务镜像的全部权限。

    AliyunLogReadOnlyAccess

    使RAM用户或RAM角色在创建集群时可以选择已有Log Project存储审计日志,或查看指定集群的配置巡检。

    AliyunRAMFullAccess

    使RAM用户或RAM角色获得阿里云账号内的全局授权管理权限。

    AliyunEBSFullAccess

    使RAM用户或RAM角色获得云盘存储服务功能的全部权限。

    AliyunARMSReadOnlyAccess

    使RAM用户或RAM角色可以查看集群阿里云Prometheus插件的监控状态。

    AliyunKMSReadOnlyAccess

    允许RAM用户或RAM角色在创建集群时查看密钥管理服务(KMS)中的密钥。

  • RAM自定义策略授权:用于对目标RAM用户或RAM角色实现细粒度的云资源访问控制。另外,如果目标RAM用户或RAM角色有基于SDK的二次开发需求,还可实现API级别的权限控制。

    例如,当RAM用户或RAM角色需要具有对指定OSS Bucket的读取权限时,可以参考以下策略。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                          "oss:ListBuckets",
                          "oss:GetBucketStat",
                          "oss:GetBucketInfo",
                          "oss:GetBucketTagging",
                          "oss:GetBucketAcl" 
                          ],    
                "Resource": "acs:oss:*:*:*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "oss:ListObjects",
                    "oss:GetBucketAcl"
                ],
                "Resource": "acs:oss:*:*:myphotos"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "oss:GetObject",
                    "oss:GetObjectAcl"
                ],
                "Resource": "acs:oss:*:*:myphotos/*"
            }
        ]
    }

Role和ClusterRole

RBAC的Role或ClusterRole中包含一组代表相关权限的规则。这些权限是累加的(不存在拒绝某操作的规则)。

Role总是用来在某个命名空间内设置访问权限;在您创建Role时,您必须指定该Role所属的命名空间。

与之相对,ClusterRole则是一个集群作用域的资源。这两种资源名字不同(Role和ClusterRole)是因为Kubernetes的对象是命名空间作用域或集群作用域的,不可两者兼具。

ClusterRole有若干用法。您可以用来:

  • 定义对某命名空间域对象的访问权限,并将在各个命名空间内完成授权。

  • 为命名空间作用域的对象设置访问权限,并跨所有命名空间执行授权。

  • 为集群作用域的资源定义访问权限。

如果您需要在命名空间内定义角色,应该使用Role;如果您需要定义集群范围的角色,应该使用ClusterRole。

关于如何编写Kubernetes的ClusterRole和Role,请参见自定义Kubernetes授权策略

关于如何授予RAM用户或RAM角色自定义Kubernetes授权策略,请参见配置RAM用户或RAM角色RBAC权限

重要

当前容器计算服务ACS授权管理只支持自定义ClusterRole角色与集群内RBAC权限的绑定,不支持自定义Role角色与集群内RBAC权限的绑定。

RBAC授权

当RAM用户或RAM角色需要操作指定集群内K8s资源时(例如获取集群Pod信息),需要在容器计算服务控制台的授权管理页面对指定RAM用户或RAM角色进行数据平面资源的授权。

您可以给RAM用户或RAM角色授予以下预置角色。具体操作,请参见配置RAM用户或RAM角色RBAC权限

表 1. 角色权限说明

角色

集群内RBAC权限

管理员

对所有命名空间下所有资源拥有读写权限。

运维人员

对所有命名空间下控制台可见资源拥有读写权限,对集群节点、存储卷、命名空间、配额有只读权限。

开发人员

对所有命名空间或所选命名空间下控制台可见资源拥有读写权限。

受限用户

对所有命名空间或所选命名空间下控制台可见资源拥有只读权限。

自定义

权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。关于ClusterRole的更多信息,请参见自定义Kubernetes授权策略