博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【最佳实践】使用BYOK密钥加密OSS中对象
阅读量:6256 次
发布时间:2019-06-22

本文共 3711 字,大约阅读时间需要 12 分钟。

1. 服务端加密介绍

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

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

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.txtACL                         : defaultAccept-Ranges               : bytesContent-Length              : 62Content-Md5                 : k2GA4LeqHvVpQvBfnleNOg==Content-Type                : text/plainEtag                        : 936180E0B7AA1EF56942F05F9E578D3ALast-Modified               : 2018-10-24 20:41:54 +0800 CSTOwner                       : 1416614965936597X-Oss-Hash-Crc64ecma        : 9888192182077127097X-Oss-Object-Type           : NormalX-Oss-Storage-Class         : Standard1.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('
', '
')# 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.txtACL                         : defaultAccept-Ranges               : bytesContent-Length              : 62Content-Md5                 : k2GA4LeqHvVpQvBfnleNOg==Content-Type                : text/plainEtag                        : 936180E0B7AA1EF56942F05F9E578D3ALast-Modified               : 2018-10-24 20:46:39 +0800 CSTOwner                       : 1416614965936597X-Oss-Hash-Crc64ecma        : 9888192182077127097X-Oss-Object-Type           : NormalX-Oss-Server-Side-Encryption: KMSX-Oss-Server-Side-Encryption-Key-Id: 33701a45-6723-4a04-a367-68c060382652X-Oss-Storage-Class         : Standard1.411000(s) elapsed

转载地址:http://qexsa.baihongyu.com/

你可能感兴趣的文章
批处理常用命令总结2
查看>>
解读ASP.NET 5 & MVC6系列(9):日志框架
查看>>
MyEclipse生成WAR包并在Tomcat下部署发布(转发)
查看>>
Android -- 自定义View小Demo,绘制钟表时间(一)
查看>>
信息检索Reading List
查看>>
JavaWeb_JavaEE_命名规则
查看>>
申小雨命案审理延期至3月5日 警方将翻译嫌犯口供
查看>>
自动精简配置&重复数据删除核心技术点及其经济效应探究
查看>>
cncert网络安全周报35期 境内被植入后门的政府网站112个 环比上涨24.4%
查看>>
物联网到底是不是泡沫,且看英特尔交出的答案
查看>>
IPv6太落后了:中国加速服务器援建
查看>>
安防大数据应用国家工程实验室在乌鲁木齐成立
查看>>
物理引擎中velocity的单位是个什么鬼?
查看>>
[译] 全新 Android 注入器 : Dagger 2 (二)
查看>>
为什么要评审代码?
查看>>
小程序开发前的准备工作之【深入封装Component】
查看>>
AFN3.0源码解析
查看>>
oracle的drop命令
查看>>
设计与梳理企业二级流程的路线方法
查看>>
Python正则表达式指南
查看>>