对象存储OSS数据加密整体解决方案介绍

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 一、简介  数据保护是指数据传输(上传数据至OSS、从OSS下载数据)和处于静止状态(数据存储在OSS数据中心磁盘)期间保护数据。可以使用SSL或者客户端加密保护传输中的数据。也可以采用以下方式保护静态数据:使用服务器端加密 (SSE) --OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密;使用客户端加密(CSE) --可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。

一、简介

  数据保护是指数据传输(上传数据至OSS、从OSS下载数据)和处于静止状态(数据存储在OSS数据中心磁盘)期间保护数据。可以使用SSL或者客户端加密保护传输中的数据。也可以采用以下方式保护静态数据:

  • 使用服务器端加密 (SSE) --OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密;
  • 使用客户端加密(CSE) --可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。在这种场景下,用户需要管理加密过程以及加密密钥。

image

二、使用服务器端(SSE)加密保护数据

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

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

2.1使用由KMS托管密钥的服务器端加密(SSE-KMS)

  阿里云KMS(Key Management Service)是一项安全、高度可靠的密钥管理系统。当用户上传Object时,在请求中携带x-oss-server-side-encryption 的HTTP Header,并指定其值为KMS,KMS将使用系统默认创建的CMK加密该对象,若用户在请求中指定了X-OSS-server-side-encrpytion-key-id, 那么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。

注意

•    当首次向某区域中的bucket上传对象时,系统自动为您创建1个默认的CMK。用户可以在KMS控制台查看该密钥信息;
•    可以选择自行创建和管理的加密密钥(CMK),也可以选择使用由OSS服务按照Region级别为客户生成的默认服务密钥;
•    响应中的ETAG不是对象数据的MD5;
•    可以在控制台创建、轮换或者禁用主密钥;
•    用户需要实现开通KMS服务;
•    使用“服务端加密-KMS托管主密钥”加解密对象时,会产生一定的KMS请求调用费用;
•    用于加密数据的数据密钥也会被加密,并且作为Object的元数据信息一并存储;
•    KMS托管密钥的服务器端加密方式仅加密对象数据,不会加密任何对象的元数据;

目前以下操作,支持在请求中携带x-oss-server-side-encryption 以及X-oss-server-side-encrpytion-key-idHeader头:

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

通过服务器端加密存储的object时,以下API请求中OSS会返回x-oss-server-side-encryption头以及X-oss-server-side-encrpytion-key-id

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

2.2使用由OSS完全托管加密密钥的服务器端加密(SSE-OSS)

  服务器端加密是为了保护静态数据,使用OSS完全托管加密密钥的服务器端加密,采用了诸多强安全措施进行加密。当用户创建对象时(即上传新对象或者复制现有对象),只需要在请求中携带x-oss-server-side-encryption标头,并且指定其值为AES256。即可实现OSS完全托管加密密钥的服务器端加密。OSS使用AES256加密方式加密客户的数据,作为额外的保护,系统采用CMK主密钥加密密钥本身。
  以下操作,支持在请求中携带这些HTTP Header:

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

  使用multipart upload上传大型对象时,可以通过为每个分段上传请求添加x-oss-server-side-encryption标头来指定服务器端加密。调用copy object时,无论原对象是否已经加密,都不会加密目标对象,除非显示的在拷贝操作中指定了x-oss-server-side-encryption请求头。

3.使用客户端(CSE)加密保护数据

  客户端加密是指将数据发送到OSS之前在用户本地进行加密,对于数据加密密钥的使用,目前支持如下两种方式:

  • 使用KMS托管用户主密钥(CSE-KMS)
  • 使用用户自主管理密钥(CSE-C)

3.1使用KMS托管用户主密钥(CSE-KMS)

  当使用KMS托管用户主密钥用于客户端数据加密时,无需向OSS加密客户端提供任何加密密钥。只需要在上传对象时指定KMS用户主密钥ID(也就是CMK ID)。其具体工作原理如下:
image

  • 上传对象:--通过使用CMK ID,客户端首先会向KMS发送一个请求,申请1个用于加密对象的数据密钥(Data key)。作为响应,KMS会返回一个随机生成的数据明文密钥(Data key),以及数据密文密钥(Encrypted data key);

    • 本地加密数据:--本地客户端接收到KMS返回的数据明文密钥(Data key)以及数据密文密钥(Encrypted data key)后,将使用数据明文密钥(**Data key)进行本地加密,并且将加密后的对象以及数据密文密钥(Encrypted data key)上传至OSS;
  • 下载对象:--客户端首先会从OSS服务端下载加密的对象以及作为对象元数据存储的数据密文密钥(Encrypted data key)。

    • 解密数据:客户端将数据密文密钥(Encrypted data key)以及CMK ID发送至KMS服务器。作为响应,KMS将使用指定的CMK解密,并且将数据明文密钥(Data key)返回给本地加密客户端;
注意:
•    本地加密客户端为每一个上传的对象获取一个唯一的数据加密密钥;
•    为了保证数据的安全性,建议CMK定期轮换或者更新;
•    客户需要维护CMK ID与对象之间的映射关系;

3.2使用用户自主管理密钥(CSE-C)

  使用用户自主管理密钥,需要用户自主生成、保管加密密钥。当用户本地客户端加密时,由用户自主上传加密密钥(对称加密密钥或者非对称加密密钥)至本地加密客户端。其具体加密过程如下:
image

  • 上传对象:--用户首先向本地加密客户端提供1个用户主密钥(对称密钥或者非对称密钥)。客户端只使用此主密钥加密其随机生成的数据密钥。该过程如下:

    • OSS本地加密客户端会在本地生成一个一次性的对称密钥(Data Key)。它将用于加密单个对象(针对每个对象,客户端都会随生成1个数据密钥);
    • 客户端使用“数据密钥(Data key)”加密对象;
    • 客户端使用用户提供的主密钥来加密“数据密钥(Data key)”;
    • 客户端会将加密的数据密钥(Encrypted Data Key)作为对象元数据的一部分上传至OSS。
  • 下载对象:--下载对象时,客户端首先从OSS下载加密的对象以及元数据。通过使用元数据中的材料,客户端将授权会确定使用哪个主密钥来解密加密的数据密钥(Encrypted Data Key)。客户端解密后的数据密钥(Data Key)来解密对象。
注意:
•OSS本地加密客户端不会将用户主密钥以及未加密的数据发送至OSS。所以,请务必妥善保管加密密钥,如果密钥丢失,将无法解密数据;
•    数据密钥(Data Key)由本地加密客户端随机生成;
相关文章
|
25天前
|
存储 安全 数据安全/隐私保护
oss客户端加密
阿里云OSS客户端加密提供了一种安全机制,用户在上传数据前可在本地进行加密。流程包括:使用本地配置的主密钥(对称或非对称)加密一次性数据密钥,再用数据密钥加密对象,加密后的数据密钥与对象一同上传。下载时,通过主密钥解密数据密钥,然后解密对象。此方式确保数据全程加密,增强安全性,但需用户妥善管理密钥以保证数据可访问性。
29 5
|
25天前
|
存储 安全 数据安全/隐私保护
oss服务器端加密
阿里云OSS提供服务器端加密,使用AES-256自动加密数据,保证上传至OSS的数据安全。下载时自动解密,透明处理。加密增强静态数据安全性,满足合规需求。支持OSS或KMS管理密钥,实现细粒度权限控制。确保云端对象数据全生命周期安全。
27 7
|
26天前
|
安全 API 开发工具
oss加密的配置方法
阿里云OSS提供多种加密选项:SSE-OSS(默认或对象级AES-256加密)、SSE-KMS(使用KMS托管CMK)、临时密钥加密和客户端加密(CSE)。可通过控制台或API设置Bucket策略,使用HTTP头部指定加密方式。KMS和临时密钥可能涉及更复杂的密钥管理和权限配置。
116 5
|
27天前
|
存储 安全 API
oss服务器端加密(Server-Side Encryption Configuration)
阿里云OSS提供服务器端加密(SSE),确保静态数据安全。支持SSE-KMS,使用KMS托管CMK加密。数据上传时自动加密,下载时自动解密。用户可设置Bucket默认加密或在上传时指定加密选项。适用于高度保护数据场景,如敏感个人信息和企业关键信息。兼容多种部署形态,特定特性地域可用。此功能简化了加密处理,增强了云端数据安全性。
30 1
|
26天前
|
存储 算法 安全
oss加密方式
阿里云OSS提供多种数据加密选项增强安全性:SSE-S3和SSE-KMS(服务器端加密),其中SSE-KMS支持使用KMS托管密钥;SSE-C和CSE-KMS(客户端加密)允许用户自管加密密钥,CSE-KMS结合KMS增强安全;还有SSE-OSS,完全托管的加密方式,使用AES-256并定期轮转主密钥。这些方案满足不同用户对密钥管理和数据安全的需求。
16 2
|
22天前
|
存储 安全 数据安全/隐私保护
oss数据加密与存储
阿里云OSS提供多种数据加密(SSE-S3, SSE-KMS, SSE-C, CSE-KMS)与存储安全措施,包括服务器和客户端加密、数据在磁盘上加密存储、多重冗余备份、访问控制列表和HTTPS安全传输。KMS支持密钥管理,确保数据静态和传输时的安全。严格的访问策略和身份验证保护资源免受未授权访问,满足高安全性和合规性需求。
35 3
|
25天前
|
存储 安全 数据安全/隐私保护
OSS完全托管加密
阿里云OSS提供全面的数据安全解决方案,包括服务器端SSE(SSE-C和SSE-KMS)和客户端CSE加密。SSE-C允许用户自定义密钥,SSE-KMS则利用KMS托管密钥,简化管理。CSE则在上传前于客户端加密数据。这些功能确保数据静态时的安全,即使数据传输被拦截,也能保护数据隐私。用户可根据业务需求选择合适的加密策略。
11 2
|
26天前
|
存储 安全 开发工具
oss加密的工作流程
阿里云OSS提供服务器端(SSE-KMS BYOK、SSE-KMS默认密钥)和客户端(CSE)加密。SSE-KMS通过KMS托管密钥或默认密钥在服务器端自动加密/解密对象,减轻用户负担。CSE则在客户端加密数据,使用SDK和用户密钥,灵活性高但管理复杂。两者均保障数据传输和存储的安全。用户可依据安全需求和合规性选择加密方式。
19 4
|
4月前
|
XML 存储 JSON
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。 本文将使用开源库**ApeFree.DataStore**来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。 ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
65 0
C# 对象存储 (轻松实现序列化 | Xml | Json | 加密 | 压缩 | 注册表 | Redis)
|
6月前
|
开发工具 对象存储 C++
UE4 x 阿里云OSS 配置问题和解决方案
在OSS配置到UE4时遇到一些问题,已解决,分享一些解决方案。
1192 0

相关产品

  • 对象存储