在ACK Pro托管集群中,您可以使用在阿里云密钥管理服务KMS(Key Management Service)中创建的密钥加密Kubernetes Secret密钥。本文主要介绍如何使用阿里云密钥管理服务(KMS)中管理的密钥对ACK Pro集群中的Kubernetes Secret密钥数据进行落盘加密。

前提条件

  • 在KMS控制台已创建用户主密钥。更多信息,请参见管理密钥
    说明 当前开启Pro集群的Secret落盘加密只支持使用Aliyun_AES_256类型的主密钥,同时不支持开启自动轮转周期。
  • 主账号需要授权容器服务账号使用AliyunCSManagedSecurityRole系统角色的权限。如果您使用的账号未授权,在开启Secret落盘加密时,系统会提示您进行安全系统角色授权。
  • 如果当前登录账号是RAM用户,请确保该RAM用户有AliyunKMSCryptoAdminAccess系统权限。具体操作,请参见为RAM用户授权
  • KMS对API调用(以万次调用为单位)和用户上传密钥的托管会收取一定费用。当您的Pro集群开启了Secret落盘加密特性后,kube-apiserver对Secret实例的读写操作均会调用KMS服务的加解密API,请务必保证您的账号内有足够的余额。当您欠费超过七天后,会影响整个集群的管控能力。关于KMS服务计费的详细说明,请参见计费说明

背景信息

在Kubernetes集群中,通常使用Secrets密钥模型存储和管理业务应用涉及的敏感信息,例如应用密码、TLS证书、Docker镜像下载凭据等敏感信息。Kubernetes会将所有的Secrets密钥对象数据存储在集群对应的ETCD中。关于密钥的更多信息,请参见Secrets

在Pro集群中,您可以使用在KMS中创建的密钥加密Kubernetes Secret密钥,加密过程基于Kubernetes提供的KMS Encryption Provider机制,使用信封加密的方式对存储在ETCD中的Kubernetes Secret密钥进行自动加密和解密。Kubernetes Secret密钥进行加密和解密的过程如下:
  • 当一个业务密钥需要通过Kubernetes Secret API存储时,数据会首先被API Server生成的一个随机的数据加密密钥加密,然后该数据密钥会被指定的KMS密钥加密为一个密文密钥存储在ETCD中。
  • 解密Kubernetes Secret密钥时,系统会首先调用KMS的解密OpenAPI进行密文密钥的解密,然后使用解密后的明文密钥对Secret数据解密并最终返回给用户。

更多信息,请参见KMS Encryption Provider机制什么是信封加密

在新建的ACK Pro集群中开启Secret落盘加密

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 单击页面右上角的创建集群,在弹出的选择集群模板页面,选择Pro版集群,并单击创建
  4. ACK托管版页签找到Secret落盘加密,选中选择KMS密钥,在下拉框中选择KMS密钥ID。创建ACK Pro集群的其他配置请参见创建ACK Pro版集群
    集群
    登录操作审计控制台,在左侧导航栏单击历史事件查询,在历史事件查询页面有使用aliyuncsmanagedsecurityrole系统角色的加密和解密事件日志,则说明该集群后台已成功开启Secret落盘加密特性。结果验证

在已创建的ACK Pro集群中开启Secret落盘加密

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面单击目标Pro集群名称。
  4. 在集群详情页面单击基本信息页签,在基本信息区域中打开Secret落盘加密开关。
    说明 如果当前登录用户为子账号,请确保该子账号对该集群有RBAC的管理员或运维人员权限,授权流程请参考配置RAM用户RBAC权限
    当集群状态由更新中变为运行中时,说明该集群Secret落盘加密的特性已变更完成。

在已创建的ACK Pro集群中关闭Secret落盘加密

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面单击目标Pro集群名称。
  4. 在集群详情页面单击基本信息页签,在基本信息区域中关闭Secret落盘加密开关。
    说明 如果当前登录用户为子账号,请确保该子账号对该集群有RBAC的管理员或运维人员权限,授权流程请参考配置RAM用户RBAC权限
    当集群状态由更新中变为运行中时,说明该集群Secret落盘加密的特性已变更完成。