ACK Serverless集群Pro版支持使用在阿里云密钥管理服务KMS(Key Management Service)中创建的密钥来加密Kubernetes Secret密钥,以降低敏感信息泄露的风险。本文主要介绍如何使用KMS中管理的密钥对已创建ACK Serverless集群Pro版中的Kubernetes Secret密钥数据进行落盘加密。
索引
前提条件
条件项 | 说明 |
KMS密钥 | 已在密钥管理服务控制台创建KMS密钥,且密钥地域与目标ACK Serverless集群Pro版所在地域保持统一。 ACK Serverless集群Pro版支持默认密钥、软件密钥和硬件密钥,您可以按业务需求选择。关于KMS密钥管理的更多信息和相关操作,请参见密钥管理快速入门;关于KMS服务计费的详细说明,请参见产品计费。 重要 开启落盘加密功能时,请勿使用KMS的控制台或OpenAPI禁用或删除集群Secret加解密选择的密钥,否则会导致集群API Server不可用,继而无法正常获取Secret和ServiceAccount等对象,影响业务应用的正常运行。 |
授权 | 根据您使用账号类型的不同,确认已完成如下授权操作。
|
使用限制
当前仅支持为已创建的ACK Serverless集群Pro版开启Secret落盘加密,不支持在创建ACK Serverless集群Pro版过程中开启该功能。
Secret加密介绍
在Kubernetes集群中,通常使用Secret密钥模型存储和管理业务应用涉及的敏感信息,例如应用密码、TLS证书、Docker镜像下载凭据等敏感信息。Kubernetes会将所有的Secret密钥对象数据存储在集群对应的etcd中。关于密钥的更多信息,请参见Secrets。
在ACK Pro集群ACK Serverless Pro集群中,您可以使用在KMS中创建的密钥加密Kubernetes Secret密钥。KMS加密过程基于Kubernetes提供的KMS Encryption Provider机制,使用信封加密的方式对存储在etcd中的Kubernetes Secret密钥进行自动加密和解密。Kubernetes Secret密钥加密和解密的过程如下。
当一个业务密钥需要通过Kubernetes Secret API存储时,数据会首先被API Server生成的一个随机的数据加密密钥加密,然后该数据密钥会被指定的KMS密钥加密为一个密文密钥存储在etcd中。
解密Kubernetes Secret密钥时,系统会首先调用KMS的解密OpenAPI进行密文密钥的解密,然后使用解密后的明文密钥对Secret数据解密,并最终返回给您。
更多信息,请参见KMS Encryption Provider机制、使用KMS密钥进行信封加密。
为已创建的ACK Serverless集群Pro版开启Secret落盘加密
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标ACK Serverless集群Pro版名称,在集群信息页面,单击基本信息页签,然后在基本信息区域打开Secret 落盘加密开关。
在弹出的对话框,选择已有的KMS密钥,然后单击确定。
当集群列表页面的集群状态列由更新中变为运行中时,表明该集群Secret落盘加密的特性已开启。
当您不需要Secret落盘加密功能时,可以在基本信息区域关闭Secret 落盘加密开关。
使用自动轮转密钥开启Secret落盘加密
您可以使用KMS自动轮转密钥功能进行Secret的落盘加密。当密钥发生自动轮转时,存量的Secret仍旧使用轮转前的密钥版本进行加密,新增的Secret将使用轮转后的新密钥版本进行加密。关于自动轮转密钥具体操作,请参见密钥轮转。
如需确保存量的Secret也使用新的密钥版本进行加密,请在密钥发生自动轮转后,执行以下命令强制使用新的密钥版本重新加密所有的存量Secret。
kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - encryption-key-rotation-time="$(date -u +'%Y-%m-%dT%H:%M:%S%z')"
常见问题
开启Secret落盘加密后,通过kubectl命令获取到的Secret是加密后的密文吗?
不是。Secret落盘加密功能所加密的是etcd中存储的原始数据,即开启Secret落盘加密后,etcd中存储的Secret数据将是加密后的密文数据。但客户端通过API Server提供的Secret API获取到的Secret数据将仍旧是原始的明文数据。
如何禁止RAM用户或RAM角色在已创建的ACK Pro集群ACK Serverless Pro集群中开启或关闭Secret落盘加密功能
您可以通过为RAM用户或RAM角色授予如下拒绝操作的RAM权限策略,禁止该RAM用户或RAM角色在已创建的ACK Pro集群ACK Serverless Pro集群中开启或关闭Secret落盘加密功能。具体操作,请参见自定义RAM授权策略。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}