1、介绍
什么是密钥管理服务?
密钥管理服务,密钥管理,即密钥管理服务(Key Management Service,KMS),是一种安全、可靠、简单易用的密钥托管服务,帮助您轻松创建和管理密钥,保护密钥的安全。KMS通过使用硬件安全模块(Hardware Security Module,HSM)保护密钥安全,帮助用户轻松创建和管理密钥,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。 当有大量数据(例如:照片、视频或者数据库文件等)需要加解密时,用户可采用信封加密方式加解密数据,无需通过网络传输大量数据即可完成数据加解密。
您将学到什么?
如何通过Python版本的KMS SDK方式使用用户主密钥(CMK)进行字符串加解密
5、代码示例
如何通过Python版本的KMS SDK方式使用用户主密钥(CMK)进行字符串加解密
Copied!
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.region.region import Region as coreRegion
from huaweicloudsdkcore.http.http_config import HttpConfig
from huaweicloudsdkkms.v2 import KmsClient
from huaweicloudsdkkms.v2 import EncryptDataRequest
from huaweicloudsdkkms.v2 import EncryptDataRequestBody
from huaweicloudsdkkms.v2 import DecryptDatakeyRequest
from huaweicloudsdkkms.v2 import DecryptDatakeyRequestBody
__PLAIN_TEXT = "Hello World!"
if __name__ == "__main__":
"""
基础认证信息:
认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量
- access_key: 华为云账号Access Key
- secret_key: 华为云账号Secret Key, 敏感信息,建议密文存储
- iam_endpoint: 华为云IAM服务访问终端地址,详情见https://developer.huaweicloud.com/endpoint?IAM
- kms_region_id: 华为云KMS支持的地域,详情见https://developer.huaweicloud.com/endpoint?DEW
- kms_endpoint: 华为云KMS服务访问终端地址,详情见https://developer.huaweicloud.com/endpoint?DEW
"""
access_key = os.environ["HUAWEICLOUD_SDK_AK"]
secret_key = os.environ["HUAWEICLOUD_SDK_SK"]
iam_endpoint = "https://<IamEndpoint>"
kms_region_id = "<RegionId>"
kms_endpoint = "https://<KmsEndpoint>"
KEY_ID = "xxxxxxxx-xxx-xxx-xxxx-xxxxxxxxxxxx"
credentials = BasicCredentials(access_key, secret_key).with_iam_endpoint(iam_endpoint)
http_config = HttpConfig.get_default_config()
http_config.ignore_ssl_verification = True
http_config.timeout = (60, 120)
client = KmsClient.new_builder().with_credentials(credentials) \
.with_region(coreRegion(id=kms_region_id, endpoint=kms_endpoint)) \
.with_http_config(http_config).build()
encrypt_data_request = EncryptDataRequest(body=EncryptDataRequestBody(key_id=KEY_ID, plain_text=__PLAIN_TEXT))
encrypt_data_response = client.encrypt_data(request=encrypt_data_request)
decrypt_data_request = DecryptDatakeyRequest(
body=DecryptDatakeyRequestBody(key_id=KEY_ID, cipher_text=encrypt_data_response.cipher_text))
decrypt_data_response = client.decrypt_data(request=decrypt_data_request)
if __PLAIN_TEXT != decrypt_data_response.plain_text:
raise Exception("test case failed")
1、介绍
什么是密钥管理服务?
密钥管理服务,密钥管理,即密钥管理服务(Key Management Service,KMS),是一种安全、可靠、简单易用的密钥托管服务,帮助您轻松创建和管理密钥,保护密钥的安全。KMS通过使用硬件安全模块(Hardware Security Module,HSM)保护密钥安全,帮助用户轻松创建和管理密钥,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。 当有大量数据(例如:照片、视频或者数据库文件等)需要加解密时,用户可采用信封加密方式加解密数据,无需通过网络传输大量数据即可完成数据加解密。
您将学到什么?
如何通过Python版本的KMS SDK方式使用用户主密钥(CMK)进行字符串加解密
2、前置条件
python --version
检查当前 python 的版本信息。3、SDK获取和安装
您可以通过pip安装SDK依赖包
4、接口参数说明
关于接口参数的详细说明可参见:
a.加密数据
b.解密数据
5、代码示例
如何通过Python版本的KMS SDK方式使用用户主密钥(CMK)进行字符串加解密
from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcore.region.region import Region as coreRegion from huaweicloudsdkcore.http.http_config import HttpConfig from huaweicloudsdkkms.v2 import KmsClient from huaweicloudsdkkms.v2 import EncryptDataRequest from huaweicloudsdkkms.v2 import EncryptDataRequestBody from huaweicloudsdkkms.v2 import DecryptDatakeyRequest from huaweicloudsdkkms.v2 import DecryptDatakeyRequestBody # 测试数据 __PLAIN_TEXT = "Hello World!" if __name__ == "__main__": """ 基础认证信息: 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量 - access_key: 华为云账号Access Key - secret_key: 华为云账号Secret Key, 敏感信息,建议密文存储 - iam_endpoint: 华为云IAM服务访问终端地址,详情见https://developer.huaweicloud.com/endpoint?IAM - kms_region_id: 华为云KMS支持的地域,详情见https://developer.huaweicloud.com/endpoint?DEW - kms_endpoint: 华为云KMS服务访问终端地址,详情见https://developer.huaweicloud.com/endpoint?DEW """ access_key = os.environ["HUAWEICLOUD_SDK_AK"] secret_key = os.environ["HUAWEICLOUD_SDK_SK"] iam_endpoint = "https://<IamEndpoint>" kms_region_id = "<RegionId>" kms_endpoint = "https://<KmsEndpoint>" # 用户主密钥ID KEY_ID = "xxxxxxxx-xxx-xxx-xxxx-xxxxxxxxxxxx" # 1.准备认证信息 credentials = BasicCredentials(access_key, secret_key).with_iam_endpoint(iam_endpoint) # 配置请求属性 http_config = HttpConfig.get_default_config() http_config.ignore_ssl_verification = True http_config.timeout = (60, 120) # 2.初始化SDK,传入认证信息与KMS的终端信息 client = KmsClient.new_builder().with_credentials(credentials) \ .with_region(coreRegion(id=kms_region_id, endpoint=kms_endpoint)) \ .with_http_config(http_config).build() # 3.加密数据 encrypt_data_request = EncryptDataRequest(body=EncryptDataRequestBody(key_id=KEY_ID, plain_text=__PLAIN_TEXT)) encrypt_data_response = client.encrypt_data(request=encrypt_data_request) # 4.解密数据 decrypt_data_request = DecryptDatakeyRequest( body=DecryptDatakeyRequestBody(key_id=KEY_ID, cipher_text=encrypt_data_response.cipher_text)) decrypt_data_response = client.decrypt_data(request=decrypt_data_request) # 5.比对加密后再解密结果 if __PLAIN_TEXT != decrypt_data_response.plain_text: raise Exception("test case failed")
6、修订记录