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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
日志服务 SLS,月写入数据量 50GB 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
相关文章
|
3月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
57 2
|
4月前
|
安全 算法 数据安全/隐私保护
加密与安全:公开密钥加密、加密过程、数字签名等
这篇文章详细解释了非对称加密算法,包括公开密钥加密的原理、加密过程、数字签名的功能,以及它与对称加密的比较和实际应用场景。
加密与安全:公开密钥加密、加密过程、数字签名等
|
4月前
|
安全 物联网 网络安全
网络安全的屏障与密钥:揭秘网络漏洞、加密技术与安全意识的重要性新技术趋势与应用:区块链、物联网与虚拟现实的未来展望
【8月更文挑战第27天】在数字时代的浪潮中,网络安全成为了我们不可忽视的话题。本文将深入浅出地探讨网络安全中的漏洞问题、加密技术的应用及其重要性,以及提升个人和组织的安全意识的必要性。通过分析常见的网络攻击手段和防御策略,我们将了解到保护信息资产的紧迫性,并掌握一些基础的防护措施。文章还将分享几个实用的代码示例,帮助读者更好地理解加密技术在实际应用中的作用。
|
5月前
|
存储 JSON 自然语言处理
OSS数据源一站式RAG最佳实践
本文介绍了如何使用OpenSearch LLM智能问答版通过OSS数据源一站式构建RAG系统。
7188 11
|
4月前
|
安全 数据安全/隐私保护 C++
RSA密钥的秘密花园:Python带你漫步加密解密的知识殿堂
【8月更文挑战第2天】RSA密钥的秘密花园以非对称加密守护信息安全。对称加密如乡间小屋, 发送方与接收方共享钥匙; 而RSA像宏伟城堡, 拥有公钥和私钥。公钥加密信息, 私钥解密, 解决了密钥安全传递难题。借助Python和pycryptodome库, 我们可体验RSA加密解密过程, 生成密钥对, 加密消息, 并成功解密, 展现其强大能力和在信息安全中的独特作用。
69 2
|
5月前
|
SQL 安全 网络安全
网络安全的屏障与密钥:漏洞防御、加密技术与安全意识
【7月更文挑战第14天】在数字化浪潮中,网络安全成为维护信息完整性和隐私权的基石。本文将深入探讨网络环境中存在的安全漏洞,分析其成因及潜在的风险,并介绍当前主流的加密技术如何作为防线保护数据不受侵犯。此外,强调安全意识的重要性,并提出提升个人和企业防护能力的策略。通过技术与认知的双重提升,构建更为坚固的网络安全防御体系。
|
7月前
|
安全 数据安全/隐私保护
密钥的生成和加密
【5月更文挑战第14天】密钥的生成和加密,在非对称加密中,密钥的生成和加密过程涉及到复杂的数学运算
86 2
|
7月前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之在DataWorks中,查看ODPS表的OSS对象如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
99 1
|
7月前
|
存储 数据可视化 安全
对象存储OSS产品常见问题之有几十亿个txt文件,单个4kb,使用oss如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
289 11
|
7月前
|
存储 运维 监控
运维编排最佳实践:将运维编排任务执行记录投递到OSS/SLS
运维编排服务(Operation Orchestration Service),简称OOS,是全面、免费的云上自动化运维平台,提供运维任务的管理和执行。典型使用场景包括:事件驱动运维,批量操作运维,定时运维任务,跨地域运维等,OOS为重要运维场景提供审批,通知等功能。OOS帮您实现标准化运维任务,从...
运维编排最佳实践:将运维编排任务执行记录投递到OSS/SLS

相关产品

  • 对象存储