HYOK(Hold Your Own Key)为用户提供了云环境中数据安全的最高级别控制权。该模式允许用户完全掌控密钥的所有权与管理权,并能够通过自有的软件或硬件系统对数据进行加密。在火山方舟平台上,用户可通过“托管外部密钥”功能接入外部密钥,并在执行精调任务时将其指定为数据加密密钥。该密钥将用于加密用户的精调数据等敏感信息,并在任务全生命周期内确保数据加密存储。
- 密钥生成:在用户自有的可信环境(如HSM或可信的KMS)中生成并保存密钥。
- 完全控制:用户自主管理密钥的全生命周期(创建、存储、轮换、撤销)。火山方舟仅在接受明确授权后执行临时且受控的加解密操作,无法持久持有密钥或访问明文数据。
- 临时访问:数据密钥绝不会以明文形式传输或存储于火山方舟,仅在必要计算时短暂访问。用户可通过审计日志等方式对访问行为进行验证。
下图是HYOK的原理流程图(以加密存储为例):
需说明以下几点:
- 火山方舟通过 AssumeRole 机制扮演用户身份以访问其 KMS,该操作需用户授权,且每次调用均会在火山方舟的安全审计页面及火山引擎云审计中记录日志。
- KMS 在访问外部密钥存储代理(XKS Proxy)时,将使用用户创建外部密钥存储时指定的 CA 证书验证代理身份,以防止中间人攻击。
- XKS Proxy 会通过用户在创建外部密钥存储时提供的访问密钥(ak/sk,仅用于签名验证)验证请求来源的合法性。
- 隐私保护:精调数据中包含高度敏感信息,如个人身份信息(PII)、财务数据或商业机密。
- 合规要求:需符合数据主权法规,要求数据或密钥不得超出特定地域或组织边界。
- 自主可控:用户已具备外部KMS或CloudHSM等密钥管理基础设施,希望延续现有控制策略。
火山方舟目前提供基础版本的XKS Proxy供用户参考和使用。后续将开放相关接入协议,用户可基于协议自行实现代理服务,并接入其他KMS或CloudHSM系统。
基础版XKS Proxy功能:
说明
本节将介绍如何通过VPC终端节点服务托管外部密钥至外部密钥存储。其中,第1至4步为创建外部密钥存储所需的前置资源准备(本文以火山引擎资源为例)。**如果您已具备相应资源,可跳过相关步骤。**第5至9步为在火山方舟平台上创建外部密钥存储并托管外部密钥的具体操作指引。
VPC 终端节点服务需与外部密钥管理器所在 VPC 连接。您可使用符合外部密钥存储要求的现有 VPC;如无可用 VPC,请参照下图于火山引擎-私有网络中创建。
在创建所需的VPC终端节点服务前,您需要有一台可部署XKS Proxy的ECS实例。下图为在火山引擎-云服务器创建ECS实例的示例
- 基础配置:地域及可用区需要与步骤1中所创建的 VPC 保持一致
- 网络配置:选择步骤1中创建的 VPC 和子网,并绑定公网 IP(新建或使用已有)
- 自定义配置:配置 SSH 密钥或密码作为登录凭证
- 确认订单:阅读并同意《云服务器服务条款》后完成创建。
CLB 用于将火山引擎 KMS 的访问流量路由至XKS Proxy。
- 点击实例管理-创建负载均衡进行配置,选择步骤1中创建的VPC和子网
- 添加监听器:在实例管理界面,选择上一步创建的负载均衡,配置监听器
- 添加后端服务器:选择具备公网访问能力的 ECS,确保负载均衡端口与服务器端口一致
说明
具体配置请根据实际需要确定。若仅用于方舟托管外部密钥,建议选用基础规格即可。
- 创建完成后,请在终端节点服务列表页中记录服务域名,该信息将在后续创建托管外部密钥时使用。
- 点击已创建的终端节点服务,选择服务白名单,点击添加服务白名单,输入KMS服务账号 2100052433。
请返回至步骤2中已创建的 ECS 实例,部署 XKS Proxy 并手动配置鉴权信息,包括:外部 KMS 的 ak/sk、用于验证火山引擎 KMS 身份的 ak/sk、保障连接安全的 CA 证书等元数据。
您可通过 SSH 或控制台连接到ECS 实例,并按下图指引完成 XKS Proxy 部署(本文以控制台连接为例):
- 连接 ECS 实例:若需其他连接方式,请参见相关操作指南。
- 若您已持有 CA 或服务端证书,请将其保存至指定目录并在 config.yaml 中配置路径。
- 若无相应证书或仅需功能体验,可参照 scripts/README.md 文档创建。
- 编辑配置文件:进入 conf 目录,编辑 config.yaml 文件。
- 启动代理:执行启动命令,运行 XKS Proxy。仅当成功启动后,方可连接至外部密钥存储。
您需手动开通 KMS 服务并授予火山方舟相应访问权限,以便其代理您完成外部密钥的托管。
在火山方舟控制台中,选择对应的 VPC 终端节点服务,并配置代理连接信息。所需配置内容请参照步骤6中 config.yaml 文件的相应条目。
托管外部密钥将由方舟代理您在火山引擎 KMS 中创建一款用户主密钥。请选择步骤8中创建的外部密钥存储,并可按需自定义密钥环与密钥信息。
Q:可以使用其他厂商的KMS服务接入方舟的托管外部密钥功能吗?
A:可以,您使用的其他厂商KMS服务的ak/sk需具备以下权限:kms:Encrypt、kms:Decrypt 和 kms:DescribeKey。
Q:如果我已经拥有相关的云服务资源,是否还需要重新创建?
A:如果您已拥有相应的云服务资源(如ECS、CLB),并确保其与目标资源处于同一可用区且能正常访问外部密钥存储,则可以跳过相关创建步骤。
Q:XKS Proxy 无法连接到外部密钥存储应如何排查?
A:请按以下步骤依次检查:
- 确认终端节点服务是否已开启“自动接受连接”选项;
Q:如果密钥已被删除,为何精调任务仍在进行?
A:精调任务仅在加密数据的输出和访问时需要访问密钥。若该阶段已完成,精调任务进程将不受密钥删除影响;若任务仍在进行且需访问加密数据,则会因密钥不可用而提示错误信息。
Q:使用托管外部密钥是否会带来时延性能的损失?
A:该功能的时延取决于火山引擎KMS、XKS Proxy及外部密钥存储接口的延时和网络情况。与直接使用火山引擎KMS相比,会有百毫秒级别的延迟差距,但不会对精调任务的整体性能产生影响。