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

前提条件

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

背景信息

在Kubernetes集群中,我们通常使用Secrets密钥模型存储和管理业务应用涉及的敏感信息,比如应用密码、TLS证书、Docker镜像下载凭据等敏感信息。Kubernetes会将所有的这些Secrets密钥对象数据存储在集群对应的etcd中。

在ACK 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数据解密并最终返回给用户。

在新建的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落盘加密的特性已变更完成。