更新时间:2024-03-26 GMT+08:00
分享

客户端加密接口详情(Python SDK)

客户端加密示例

完整示例代码参考示例代码

初始化 CryptoCipher

OBS Python SDK 提供两种 CryptoCipher。您可根据使用场景自行选择。

CtrRSACipherGenerator 需要提供一个 RSA 公钥或 RSA 私钥,用以加密随机生产的数据密钥。

方法定义

CtrRSACipherGenerator(master_crypto_key_path, master_key_info=None, need_sha256=False)

接口参数

表1 CtrRSACipherGenerator

参数名称

参数类型

是否必选

描述

master_crypto_key_path

str

必选

参数解释

RSA 密钥文件的路径。

默认取值:

master_key_info

str

可选

参数解释

密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同crypto_key,需您自行维护 master_key_info 与 crypto_key 的映射关系。

默认取值:

need_sha256

bool

可选

参数解释

是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据。

说明:

为了节省内存开销,SDK 采用了流式计算的方法,这也就意味着,普通上传时需要读取并加密文件两次;在另外由于断点续传上传接口为分段上传接口的封装,在断点续传下,则需要读取并加密文件三次。

取值范围:

True:校验加密后数据的sha256,SDK自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时置于请求头,服务端收到请求后会计算收到对象的 sha256,如果 sha256 不一致会返回错误信息。

False:不校验加密后数据的sha256。

默认取值:

False

CTRCipherGenerator 仅需提供一个数据密钥,所有对象均使用该数据密钥进行加密。

方法定义

CTRCipherGenerator(crypto_key, master_key_info=None, crypto_iv=None, need_sha256=False)

接口参数

表2 CTRCipherGenerator

参数名称

参数类型

是否必选

描述

crypto_key

str or bytes

必选

参数解释

加密数据所使用的数据密钥。

约束限制:

  • 长度为 32 bytes。
  • 如果传入的是字符串也会被转换为bytes。

默认取值:

master_key_info

str

可选

参数解释

密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同crypto_key,需您自行维护 master_key_info 与 crypto_key 的映射关系。

默认取值:

crypto_iv

str or bytes

可选

参数解释

加密数据时所使用的初始值。

约束限制:

  • 长度为 16 bytes。
  • 指定crypto_iv时,所有对象均使用该初始值加密;未指定crypto_iv时,SDK会为每个对象随机生成不同初始值。

默认取值:

need_sha256

bool

可选

参数解释

是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据。

说明:

为了节省内存开销,SDK 采用了流式计算的方法,这也就意味着,普通上传时需要读取并加密文件两次;在另外由于断点续传上传接口为分段上传接口的封装,在断点续传下,则需要读取并加密文件三次。

取值范围:

True:校验加密后数据的sha256,SDK自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时置于请求头,服务端收到请求后会计算收到对象的 sha256,如果 sha256 不一致会返回错误信息。

False:不校验加密后数据的sha256。

默认取值:

False

初始化 CryptoClient

初始化 CryptoClient 继承自初始化普通 OBS Client,详细配置可参考OBS客户端初始化(Python SDK)

方法定义

CryptoClient(access_key_id,secret_access_key,server,cipher_generator=your-cipher_generator, *args, **kwargs)

接口参数

表3 请求参数列表

参数

描述

建议值

access_key_id

参数解释

访问密钥中的AK。

默认取值:

空字符串,表示匿名用户

N/A

secret_access_key

参数解释

访问密钥中的SK。

默认取值:

空字符串,表示匿名用户

N/A

server

参数解释

连接OBS的服务地址。可包含协议类型、域名、端口号。示例:https://your-endpoint:443。(出于安全性考虑,建议使用https协议)。

默认取值:

N/A

cipher_generator

参数解释

该加密客户端所使用的 cipher_generator。

取值范围:

默认取值:

N/A

初始化加密上传段任务

初始化加密多段上传任务继承自普通 OBS Client 的初始化上传段任务接口,详细参数可参考分段上传-初始化上传段任务(Python SDK)

方法定义

CryptoClient.initiateEncryptedMultipartUpload(bucketName, objectKey, crypto_cipher, *args, **kwargs)

接口参数

表4 请求参数列表

参数名称

参数类型

是否必选

描述

bucketName

str

必选

参数解释

桶名。

约束限制:

  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

默认取值:

objectKey

str

必选

参数解释:

对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。

例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。

取值范围:

长度大于0且不超过1024的字符串。

默认取值:

说明:

对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。

crypto_cipher

OBSCipher

必选

参数解释:

调用 cipher_generator.new() 方法所生成的 OBSCipher,在初始化任务时设置必要的元数据。

取值范围:

cipher_generator.new() ,cipher_generator为初始化时的cipher_generator参数。

示例:cipher = ctr_client.cipher_generator.new(""),ctr_client为加密客户端。

默认取值:

上传加密段

上传加密段继承自普通 OBS Client 的上传段接口,详细参数可参考分段上传-上传段(Python SDK)

方法定义

CryptoClient.initiateEncryptedMultipartUpload(bucketName, objectKey, partNumber, uploadId, crypto_cipher, *args, **kwargs)

接口参数

表5 请求参数列表

参数名称

参数类型

是否必选

描述

bucketName

str

必选

参数解释

桶名。

约束限制:

  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

默认取值:

objectKey

str

必选

参数解释:

对象名。对象名是对象在存储桶中的唯一标识。对象名是对象在桶中的完整路径,路径中不包含桶名。

例如,您对象的访问地址为examplebucket.obs.cn-north-4.myhuaweicloud.com/folder/test.txt 中,对象名为folder/test.txt。

取值范围:

长度大于0且不超过1024的字符串。

默认取值:

说明:

对象链接地址格式为:https://桶名.域名/文件夹目录层级/对象名。如果该对象存在于桶的根目录下,则链接地址将不需要有文件夹目录层级。

partNumber

int

必选

参数解释:

段号。

取值范围:

[1,10000]

默认取值:

uploadId

str

必选

参数解释:

分段上传任务的ID。任务ID可以通过初始化分段上传任务生成。例如:000001648453845DBB78F2340DD460D8。

约束限制:

长度为32的字符串。

默认取值:

crypto_cipher

OBSCipher

必选

参数解释:

调用 cipher_generator.new() 方法所生成的 OBSCipher

取值范围:

cipher_generator.new() ,cipher_generator为初始化时的cipher_generator参数。

示例:cipher = ctr_client.cipher_generator.new(""),ctr_client为加密客户端。

默认取值:

相关链接

  • 使用过程中返回的错误码含义、问题原因及处理措施可参考OBS错误码

相关文档