数据加密

更新时间:

CPFS 通用版支持服务端加密和传输加密,全链路保障您的数据安全。

  • 服务端加密:保护静态存储的数据,防止物理磁盘丢失或被盗取导致的数据泄露。

  • 传输加密:保护网络传输中的数据,防止数据在传输过程中被窃听或篡改。

工作原理

  • 服务端加密

    采用业界标准的信封加密机制,通过阿里云密钥管理服务 (KMS) 实现。系统会为每个文件系统生成一个唯一的数据加密密钥(DEK),并使用AES-256算法加密您的数据。该DEK自身则由您在KMS中指定的用户主密钥(CMK)加密保护。此过程对用户透明,在保障数据安全的同时,通过DEK缓存机制维持了较高的读写性能。

  • 传输加密

    基于开源软件Stunnel实现端到端的数据安全传输。挂载文件系统时,CPFS客户端工具(aliyun-alinas-utils)在ECS实例上启动Stunnel代理进程。该进程将所有NFS流量封装在TLS加密隧道中进行传输,有效防止数据在网络中被窃听或篡改。

选择加密方案

对于最高安全等级的业务,建议同时启用服务端加密和传输加密,实现全链路数据保护。

对比维度

服务端加密

传输加密

核心价值

保护静态数据安全,防止物理介质泄露。

保护传输中数据安全,防止网络窃听。

适用场景

  • 数据需满足特定安全合规审计要求。

  • 业务数据高度敏感,需防止物理泄露风险。

  • 数据在公网或不可信网络中传输。

  • 满足等保、GDPR等对传输链路安全的要求。

性能影响

IOPS和吞吐量可能略有下降,CPU开销少量增加。

有约10%的性能损耗(访问延迟增加10%,IOPS下降10%)。

对于吞吐密集型应用,每个挂载点的Stunnel进程在极端情况下可能占用一整个CPU核心。建议根据业务负载预留足够的CPU资源。

成本

免费

管理复杂度

创建时一次性配置。

用户管理的密钥若被误删,数据将永久丢失且无法恢复。

需要安装和维护客户端,并关注证书有效期。

客户端证书过期将导致文件系统停止响应。

配置服务端加密

服务端加密仅支持在创建文件系统时配置。创建完成后,加密功能不可关闭,绑定的密钥不可更改。开启加密会对性能产生轻微影响,IOPS和吞吐量可能略有下降。

步骤一:选择密钥管理方式

根据您的安全合规需求,选择合适的密钥管理方式:

  • 托管密钥:由CPFS服务代您创建和管理密钥,您无需关心密钥的生命周期,仅拥有审计权限。此方式免费且管理简单,适用于通用安全场景。

  • 用户管理密钥(KMS):使用您在KMS中管理的密钥对文件系统进行加密,您拥有密钥完整生命周期管理权限(创建、启用、禁用、轮转、删除),适用于严格合规要求或需自主掌控密钥的场景。支持两种密钥来源:

    • KMS创建的密钥:在KMS控制台创建用户主密钥(CMK)。

    • 自带密钥(BYOK):将外部生成的密钥导入KMS使用。

    如选择用户管理密钥,需提前在密钥管理服务控制台创建或导入用户主密钥(CMK)。

步骤二:创建加密的文件系统

  1. 登录CPFS控制台,进入创建CPFS文件系统页面。

  2. 加密类型配置项,选择托管密钥用户管理密钥(KMS)

  3. 若选择用户管理密钥(KMS),请从密钥ID下拉列表中选择一个您已创建的自定义密钥。

    首次使用时,系统会引导您创建服务关联角色,以授权CPFS访问您的KMS资源。
  4. 完成其他配置项,然后创建文件系统。

步骤三:验证加密配置

创建完成后,在文件系统列表中查看加密列状态,确认加密功能已启用。

此时,所有写入该文件系统的数据都将在存储时被自动加密。

配置传输加密

传输加密通过在挂载时添加特定参数实现,用于保护NFS流量在网络传输中的安全。

前提条件

步骤一:安装CPFS-NFS客户端

  1. 登录待挂载CPFS文件系统的云服务器ECS。连接方式,请参见选择ECS远程连接方式

  2. 下载并安装CPFS-NFS客户端。

    Alibaba Cloud Linux
    1. 下载CPFS-NFS客户端。

      wget https://cpfs-hangzhou-nfs-client.oss-cn-hangzhou.aliyuncs.com/aliyun-alinas-utils-latest.al.noarch.rpm
    2. 安装CPFS-NFS客户端。

      sudo yum install aliyun-alinas-utils-*.rpm
    CentOS
    1. 下载CPFS-NFS客户端。

      wget https://cpfs-hangzhou-nfs-client.oss-cn-hangzhou.aliyuncs.com/aliyun-alinas-utils-latest.el.noarch.rpm
    2. 安装CPFS-NFS客户端。

      sudo yum install aliyun-alinas-utils-*.rpm
    Ubuntu
    1. 下载CPFS-NFS客户端。

      sudo wget https://cpfs-hangzhou-nfs-client.oss-cn-hangzhou.aliyuncs.com/aliyun-alinas-utils-latest.deb -O /tmp/aliyun-alinas-utils-latest.deb
    2. 安装CPFS-NFS客户端。

      sudo apt-get update
      sudo apt-get install /tmp/aliyun-alinas-utils-latest.deb
    Debian
    1. 下载CPFS-NFS客户端。

      sudo wget https://cpfs-hangzhou-nfs-client.oss-cn-hangzhou.aliyuncs.com/aliyun-alinas-utils-latest.deb -O /tmp/aliyun-alinas-utils-latest.deb
    2. 安装CPFS-NFS客户端。

      sudo apt-get update
      sudo apt-get install /tmp/aliyun-alinas-utils-latest.deb
    SUSE
    1. 下载CPFS-NFS客户端。

      wget https://cpfs-hangzhou-nfs-client.oss-cn-hangzhou.aliyuncs.com/aliyun-alinas-utils-latest.lp15.x86_64.rpm
    2. 安装CPFS-NFS客户端。

      sudo zypper --no-gpg-checks install -y aliyun-alinas-utils-*.rpm
  3. 检查CPFS-NFS客户端安装结果。

    which mount.cpfs-nfs

    成功返回示例如下:

    /usr/sbin/mount.cpfs-nfs

步骤二:启用传输加密挂载

开启传输加密功能时,如果您的目标ECS实例上对应目录(例如/mnt)已挂载NFS协议文件系统,请先卸载NFS协议文件系统,再根据本文重新挂载NFS协议文件系统。

在标准的挂载命令中,添加 -o tls 参数即可启用传输加密。挂载时,CPFS客户端工具会自动将挂载点映射写入/etc/hosts文件,卸载时会删除相应映射。

# 示例:启用传输加密挂载
sudo mount -t cpfs-nfs -o tls,vers=3,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.cpfs.aliyuncs.com:/share/path /mnt
  • -o tls必需参数,启用传输加密。

  • vers=3:使用NFSv3协议,提供更好的兼容性。

  • rsize=1048576,wsize=1048576:设置1MB的读写块大小,优化传输性能。

  • hard:硬挂载模式,确保数据一致性。

如需了解更多挂载参数,请参见CPFS-NFS客户端挂载文件系统(推荐)

步骤三:验证加密生效

挂载成功后,您可以通过检查Stunnel进程和网络连接来验证加密是否已生效。

  1. 检查Stunnel进程:确认Stunnel代理进程已在运行。

    ps aux | grep stunnel
  2. 检查网络连接:确认Stunnel已建立到CPFS服务端的加密连接。

    netstat -anp | grep stunnel

    预期会看到stunnel进程与CPFS服务端的12049端口建立了连接。

验证通过后,您对挂载目录的所有读写操作都将通过加密隧道进行。

配额与限制

  • 服务端加密限制

    • 创建时配置:必须在创建文件系统时配置,创建后无法开启、关闭或更改。

    • 算法限制:仅支持AES-256算法,不支持SM4等其他算法。

  • 传输加密限制

    • 文件系统支持:仅支持CPFS通用版NFS协议文件系统。

    • 网络端口占用:Stunnel进程默认需要使用本地12049端口,请确保该端口未被业务占用。

      您可以执行ss -ant | grep -w 12049命令判断目标端口是否被占用。如果返回为空,则表示目标端口未被占用。如果端口被占用,可通过修改配置文件更换端口。
    • 本地IP占用:每个启用了传输加密的挂载点会按顺序占用127.0.1.1~127.0.255.254范围内的一个IP地址,卸载后释放。您可以通过cat /etc/hosts查看当前占用情况。

    • 挂载模式互斥:不支持在同一个客户端上,对同一个文件系统挂载点同时使用加密(TLS)和非加密模式进行挂载。如需切换,必须先卸载原有的挂载点。

    • 操作系统支持:仅支持以下64位操作系统版本。

      操作系统类型

      操作系统版本

      Alibaba Cloud Linux

      • Alibaba Cloud Linux 3.2104 64

      • Alibaba Cloud Linux 2.1903 64

      CentOS

      • CentOS 8.x 64

      • CentOS 7.x 64

      Ubuntu

      • Ubuntu 20.04 64

      • Ubuntu 18.04 64

      • Ubuntu 16.04 64

      Debian

      • Debian 10.x 64

      • Debian 9.x 64

      • Debian 8.x 64

      SUSE

      • SUSE Linux Enterprise Server 15 64

故障与日志排查

传输加密相关的客户端日志位于/var/log/aliyun/alinas/目录。通过修改/etc/aliyun/alinas/alinas-utils.conf文件可调整日志配置:

参数

说明

默认值

logging_level

客户端工具的日志级别。

INFO

logging_max_bytes

单个日志文件最大容量

1048576(1MB)

logging_file_count

日志文件最大保留数量

10

stunnel_debug_enabled

Stunnel调试日志开关,开启后可输出更详细的TLS握手信息。

false

stunnel_check_cert_hostname

是否检查服务端证书的域名。生产环境建议设为true

false

stunnel_check_cert_validity

是否检查服务端证书的有效期和颁发机构。生产环境建议设为true

false

修改配置后执行以下命令重启服务:

sudo service aliyun-alinas-mount-watchdog restart

应用于生产环境

  • 密钥管理风险(服务端加密)
    如果您使用的是用户管理密钥,请务必制定严格的密钥管理流程。一旦密钥被禁用或删除,加密的文件系统将无法读写任何数据,且数据无法恢复。建议开启 KMS 的密钥删除保护功能。

  • 证书管理(传输加密)

    CPFS客户端传输加密功能依赖第三方证书,第三方证书需要定期更换,CPFS会提前一个月通过邮件、站内信发出通知,请您关注信息并及时更新CPFS客户端工具aliyun-alinas-utils版本,未更新CPFS客户端工具将导致使用传输加密方式挂载的CPFS文件系统在证书过期后停止响应。

常见问题

Q: 服务端加密的密钥被禁用或删除后,数据还能访问吗? 

不能。 如果您使用的是“用户管理密钥”,一旦密钥被禁用或删除,加密的文件系统将无法读写任何数据。请谨慎操作。

Q: 文件系统开启服务器端加密且为静态加密类型,有效存储容量是否会缩小?

不会。AES属于分组加密,遵循自动补位机制,静态加密自动补位的数据不计算在文件系统实例的有效存储容量中。

Q:服务端加密支持SM4算法吗?

不支持。CPFS 服务器端加密密钥采用行业标准AES-256加密算法,保护文件系统静态数据,并通过信封加密机制防止未经授权的数据访问。服务器端加密密钥依托于KMS服务生成和管理。KMS服务能最大程度保障密钥的保密性、完整性和可用性。更多加密信息,请参见使用KMS信封加密在本地加密和解密数据

Q:使用传输加密方式挂载时报错:The mountpoint <mountpoint> is already mounted with tls/non-tls, mixing tls and non-tls is not supported in this version

报错原因:同一挂载地址不能同时支持传输加密(TLS)和非传输加密(非TLS)两种模式。当客户端检测到混合挂载操作时,会报错并终止挂载。

解决方案:使用umount命令卸载当前挂载点,在TLS和非TLS中选择一种,重新执行挂载命令。

Q:使用传输加密方式挂载时报错:Cannot mount with tls/non-tls now, please wait <sec> seconds for the unmount to complete

报错原因:在传输加密模式和非传输加密模式之间切换时,系统需要完成卸载缓冲期才能重新挂载。如果切换间隔时间过短,会触发此错误。

解决方案

  1. 根据错误提示等待指定的秒数,等待时间结束后,重新执行挂载命令。

  2. 还可通过配置unmount_grace_period_sec参数调整卸载缓冲期时长。具体配置方法请参见CPFS客户端参数配置详情