【最佳实践】使用BYOK密钥加密OSS中对象

本文涉及的产品
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000 次 1年
简介: 1. 服务端加密介绍 使用服务器端加密方式保护静态数据,即OSS将用户数据写入数据中心内的磁盘时,会在对象级别加密数据,并且在访问这些数据时自动解密。用户只需要验证请求是否拥有访问权限。当前OSS支持如下两种服务端加密方式(注意:您不能对同一对象同时应用两种不同类型的服务器端加密方式): 使用由OSS完全托管的服务端加密功能:数据加密密钥的生成和管理,由OSS负责,并采用高强度、多因素的安全措施进行保护。

1. 服务端加密介绍

使用服务器端加密方式保护静态数据,即OSS将用户数据写入数据中心内的磁盘时,会在对象级别加密数据,并且在访问这些数据时自动解密。用户只需要验证请求是否拥有访问权限。当前OSS支持如下两种服务端加密方式(注意:您不能对同一对象同时应用两种不同类型的服务器端加密方式):

  • 使用由OSS完全托管的服务端加密功能:数据加密密钥的生成和管理,由OSS负责,并采用高强度、多因素的安全措施进行保护。数据加密的算法采用使用行业标准的强加密算法AES-256(即256位高级加密标准)。
  • 使用由KMS托管密钥的服务端加密功能:除了采用AES-256加密算法外,KMS负责保管用户主密钥CMK(对数据密钥进行加密的密钥),以及生成数据加密的密钥,通过信封加密机制,进一步防止未经授权的数据访问。其中,会涉及少量额外的KMS密钥API调用费用(参考:KMS计费标准)。暂时只支持中国大陆、香港、日本、新加坡区域,其余区域会尽快开放。

PS:如下重点介绍SSE-KMS加密方式:

2. 使用由KMS托管密钥的服务器端加密

KMS(Key Management Service)是阿里云提供的一款安全、易用的密钥管理系统。当用户上传object时,在请求中携带x-oss-server-side-encryption的HTTP Header,并指定其值为KMS。OSS支持使用默认的CMK加密对象,同时也支持使用用户指定的CMK 进行加密。
image

如上是SSE-KMS服务端加密的逻辑示意图。关于Customer Master Key的生成方式有多种,如下一一介绍:

  • 使用OSS默认托管的KMS密钥:当用户上传object时,在请求中携带X-OSS-server-side-encrpytion并指定其值为KMS。OSS将使用默认托管的CMK加密每个对象,并且在下载时自定解密;
  • 使用用户指定的CMK :当用户上传object时,在请求中指定X-oss-server-side-encrpytion-key-id为具体的CMK ID。OSS将使用指定的CMK(密钥材料来源于阿里云KMS)来加密每个对象。并且加密object的CMK ID记录到对象的元数据中,因此具有解密权限的用户下载对象时自动进行解密。
  • 使用用户BYOK材料进行加密:目前阿里云KMS服务支持导入用户自己的BYOK密钥材料。如下图所示,用户创建1个不带密钥材料的CMK,并按照提示导入外部密钥材料。当用户上传object时,在请求中指定X-oss-server-side-encrpytion-key-id为使用外部密钥材料的CMK ID。

【补充说明】

  • 用户需要实现开通KMS服务;
  • 使用“服务端加密-KMS托管主密钥”加解密对象时,会产生一定的KMS请求调用费用;
  • 用于加密数据的数据密钥也会被加密,并且作为Object的元数据信息一并存储;
  • KMS托管密钥的服务器端加密方式仅加密对象数据,不会加密任何对象的元数据;

1.目前以下操作,支持在请求中携带这些x-oss-server-side-encryption Header头:

  • Put Object: 简单上传
  • Copy Object: 复制Object
  • Initiate Multipart Upload:

2.通过服务器端加密存储的object时,以下API请求中OSS会返回x-oss-server-side-encryption头:

  • Put Object
  • Copy Object
  • Initiate Multipart Upload
  • Upload Part
  • Complete Multipart Upload
  • Get Object
  • Head Object

3.配置示例:

3.1配置前提

  • 演示region:香港站
  • 演示bucket :test-hongkong-2025
  • 演示工具:ossutil

3.2演示说明

  1. 【step1】:上传1个明文对象至OSS
    我们当前使用香港region进行演示说明。因此,我们将1个对象上传至香港region的bucket(bucket名:test-hongkong-2025)
D:\5-AK账号\ossutil64>ossutil64.exe stat  oss://test-hongkong-2025/01.txt
ACL                         : default
Accept-Ranges               : bytes
Content-Length              : 62
Content-Md5                 : k2GA4LeqHvVpQvBfnleNOg==
Content-Type                : text/plain
Etag                        : 936180E0B7AA1EF56942F05F9E578D3A
Last-Modified               : 2018-10-24 20:41:54 +0800 CST
Owner                       : 1416614965936597
X-Oss-Hash-Crc64ecma        : 9888192182077127097
X-Oss-Object-Type           : Normal
X-Oss-Storage-Class         : Standard
1.257000(s) elapsed

如上所示,我们上传了1个明文文件;

2.【step2】:在香港region创建KMS密钥
由于KMS加密服务不支持跨region操作。因此,我们在香港region创建1个CMK,并且导入外部密钥材料。如下所示:
image

3.【step3】:使用指定的CMK ID加密上传对象
为了简化演示过程,我们通过python将【step1】中上传的明文文件01.txt的加密属性修改为使用指定的CMK ID进行加密;

#PYTHON 脚本如下

# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>
')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-hongkong.aliyuncs.com', 'test-hongkong-2025')

bucket.update_object_meta('01.txt',{'x-oss-server-side-encryption':'KMS','x-oss-server-side-encryption-key-id': '33701a45-6723-4a04-a367-68c060382652'})

4.【step4】:查看使用指定CMK ID 加密对象的元数据信息
如下,我们使用ossutil工具查看:

D:\5-AK账号\ossutil64>ossutil64.exe stat  oss://test-hongkong-2025/01.txt
ACL                         : default
Accept-Ranges               : bytes
Content-Length              : 62
Content-Md5                 : k2GA4LeqHvVpQvBfnleNOg==
Content-Type                : text/plain
Etag                        : 936180E0B7AA1EF56942F05F9E578D3A
Last-Modified               : 2018-10-24 20:46:39 +0800 CST
Owner                       : 1416614965936597
X-Oss-Hash-Crc64ecma        : 9888192182077127097
X-Oss-Object-Type           : Normal
X-Oss-Server-Side-Encryption: KMS
X-Oss-Server-Side-Encryption-Key-Id: 33701a45-6723-4a04-a367-68c060382652
X-Oss-Storage-Class         : Standard
1.411000(s) elapsed
相关文章
|
2月前
|
存储 前端开发 安全
如何确保 Pinia 插件中的加密密钥的安全性?
如何确保 Pinia 插件中的加密密钥的安全性?
278 122
|
2月前
|
存储 安全 JavaScript
除了加密密钥的安全性,还有哪些方面需要注意 Pinia 插件的安全性?
除了加密密钥的安全性,还有哪些方面需要注意 Pinia 插件的安全性?
267 5
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
1405 153
|
8月前
|
存储 消息中间件 Kafka
AutoMQ x OSS 的 Iceberg 数据入湖的最佳实践
在数据湖技术生态中,Apache Iceberg凭借其开放性设计已确立事实标准地位。该技术不仅获得全球企业广泛采用,还构建了包含Apache Spark、Amazon Athena、Presto等主流计算引擎的完整生态系统。
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
安全 算法 数据安全/隐私保护
加密与安全:公开密钥加密、加密过程、数字签名等
这篇文章详细解释了非对称加密算法,包括公开密钥加密的原理、加密过程、数字签名的功能,以及它与对称加密的比较和实际应用场景。
加密与安全:公开密钥加密、加密过程、数字签名等
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
217 2
|
SQL 安全 API
数字堡垒之下:网络安全漏洞、加密技术与安全意识的博弈探索RESTful API设计的最佳实践
【8月更文挑战第27天】在数字化浪潮中,网络安全成为守护个人隐私与企业资产的关键防线。本文深入探讨了网络漏洞的成因与影响,分析了加密技术如何为数据保驾护航,并强调了提升公众的安全意识对于构建坚固的信息防御系统的重要性。文章旨在为读者提供一场思维的盛宴,启发更多关于如何在日益复杂的网络世界中保护自己的思考。
|
安全 物联网 网络安全
网络安全的屏障与密钥:揭秘网络漏洞、加密技术与安全意识的重要性新技术趋势与应用:区块链、物联网与虚拟现实的未来展望
【8月更文挑战第27天】在数字时代的浪潮中,网络安全成为了我们不可忽视的话题。本文将深入浅出地探讨网络安全中的漏洞问题、加密技术的应用及其重要性,以及提升个人和组织的安全意识的必要性。通过分析常见的网络攻击手段和防御策略,我们将了解到保护信息资产的紧迫性,并掌握一些基础的防护措施。文章还将分享几个实用的代码示例,帮助读者更好地理解加密技术在实际应用中的作用。

相关产品

  • 对象存储