本文以授予RAM用户或RAM角色查询、扩容和删除集群的权限为例,介绍如何在容器计算服务 ACS(Container Compute Service)中创建自定义授权策略。
前提条件
在创建自定义授权策略时,您需要了解授权策略语言的基本结构和语法。更多信息,请参见权限策略基本元素。
背景信息
容器计算服务ACS提供的系统授权策略的授权粒度比较粗,如果这种粗粒度授权策略不能满足您的需要,那么您可以创建自定义授权策略。例如,您想控制对某个具体的集群的操作权限,您必须使用自定义授权策略才能满足这种细粒度要求。
在进行RAM用户或RAM角色的集群RBAC授权前,您需要完成对集群管控能力的RAM授权。您可以根据需要授予RAM用户或RAM角色对目标集群的读写策略:
- 读策略:用于查看集群配置、kubeconfig等基本信息。 
- 写策略:包含集群伸缩、升级、删除等集群管控能力。 
在提交RBAC授权前,您需要确保目标集群已经被授予RAM只读权限,策略参考如下。
{
  "Statement": [
    {
      "Action": [
        "cs:Describe*"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:cs:*:*:cluster/集群ID"
      ]
    }
  ],
  "Version": "1"
}当您完成RAM授权后,需要完成集群内Kubernetes资源模型访问的RBAC授权。
自定义授权策略
容器服务ACK提供的系统授权策略的授权粒度比较粗,如果这种粗粒度授权策略不能满足您的需要,那么您可以创建自定义授权策略。例如,您想控制对某个具体的集群的操作权限,您必须使用自定义授权策略才能满足这种细粒度要求。
步骤一:创建自定义授权策略
- 使用RAM管理员登录RAM控制台。 
- 在左侧导航栏,选择。 
- 在权限策略页面,单击创建权限策略。  
- 在创建权限策略页面,单击脚本编辑页签,输入您的权限策略内容。 - { "Statement": [{ "Action": [ "cs:Get*", "cs:List*", "cs:Describe*", "cs:ScaleCluster", "cs:DeleteCluster" ], "Effect": "Allow", "Resource": [ "acs:cs:*:*:cluster/集群ID" ] }], "Version": "1" }- 参数 - 说明 - Action - 所需授予的权限,所有的Action均支持通配符。 - Resource - 有以下配置方式,其中 - 集群ID需要替换为您的实际集群ID,如- cae93341766c843479ae986b3305xxxxx。- 授予单集群权限 - "Resource": [ "acs:cs:*:*:cluster/集群ID" ]
- 授予多个集群权限 - "Resource": [ "acs:cs:*:*:cluster/集群ID", "acs:cs:*:*:cluster/集群ID" ]
- 授予所有集群的权限 - "Resource": [ "*" ]
 
- 编写完成后单击确定,在弹窗中填写权限策略名称,然后再单击确定完成创建。 
- 返回权限策略页面,在搜索框中搜索策略名或备注,可以看到您授权的自定义策略。 
步骤二:为RAM用户或RAM角色授予自定义授权策略
关于自定义授权的具体操作和系统策略授权操作方法一样,在选择权限策略时,需选择您已创建的自定义策略。具体操作,请参见为RAM用户或RAM角色授予系统策略。
相关参考
为RAM用户或RAM角色授权不支持限制集群的ACK OpenAPI的操作权限
部分ACK OpenAPI不支持限制集群的授权(例如,DescribeEvents),若您需要给RAM用户或RAM角色授权这些不支持限制集群的ACK OpenAPI的操作权限,请勿在Resource中限定集群ID。
例如,当前RAM权限策略如下:
{
    "Statement": [
        {
            "Action": [
                "cs:Describe*"
            ],
            "Effect": "Allow",
            "Resource": [
                "acs:cs:*:*:cluster/集群ID"
            ]
        }
    ],
    "Version": "1"
}