使用自定义Worker RAM角色实现节点池精细化权限控制

ACK托管集群会自动创建一个所有节点共享的默认Worker RAM角色。当您通过默认的Worker RAM角色授权时,权限将会共享给集群内所有的节点,可能会存在非预期的权限扩散的风险。您可以在创建节点池时为其指定一个自定义的Worker RAM角色,通过为不同的节点池分配特定的角色,可以将每个节点池的权限隔离开,降低集群内所有节点共享相同权限的风险。

前提条件

创建ACK托管集群,且集群为1.22及以上版本。

步骤一:创建RAM角色

您可以通过控制台、OpenAPITerraform等方式创建一个Worker RAM角色。

重要
  • RAM角色的名称不能以KubernetesMasterRole-KubernetesWorkerRole-开头。

  • RAM角色的受信服务必须是云服务

通过控制台创建RAM角色

通过控制台创建RAM角色的具体操作,请参见创建普通服务角色

通过OpenAPITerraform创建RAM角色

通过OpenAPITerraform创建RAM角色,请确保指定的角色信任策略已配置如下内容。如需修改RAM角色信任策略,请参见修改RAM角色的信任策略

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ecs.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

步骤二:为新建节点池指定Worker RAM角色

重要

您只能在创建集群或创建节点池时使用自定义的Worker RAM角色。节点池创建后,已有的Worker RAM角色不支持修改。

容器服务管理控制台创建集群或节点池时,您可以在节点池的高级选项配置中,将Worker RAM 角色选择为步骤一:创建RAM角色所创建的自定义角色。

具体操作,请参见创建集群时节点池高级选项创建节点池时高级配置

授予RAM 用户或 RAM 角色所需的权限

当您通过 RAM 用户或 RAM 角色使用本功能时,还需额外被授予ram:PassRole权限策略,以授权该用户或角色可以使用指定的 RAM 角色作为 Worker RAM 角色。具体操作,请参见创建自定义权限策略RAM用户授权RAM角色授权

说明

如果 RAM 用户或 RAM 角色已被授予 AliyunCSFullAccess 权限,则无需额外进行ram:PassRole授权。

RAM 权限策略示例如下:

授权使用特定的 RAM 角色

授权使用所有 RAM 角色

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": [
        "<role_arn>"  // 替换为 RAM 角色的 ARN。
      ],
      "Condition": {
        "StringEquals": {
          "acs:Service": [
            "cs.aliyuncs.com"
          ]
        }
      }
    }
  ]
}
请参见如何查看RAM角色的ARN?获取RAM角色ARN。
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "acs:Service": [
            "cs.aliyuncs.com"
          ]
        }
      }
    }
  ]
}

相关操作

创建RAM角色后,该RAM角色默认没有任何权限。

Worker RAM角色不再需要某些权限时,请及时将这些权限移除,请参见RAM角色移除权限