专属KMS SDK for Python帮助您通过简单的编程访问专属KMS的API,实现加密解密、签名验签和获取凭据信息的业务诉求。

背景信息

同时也欢迎您提出宝贵意见,或者提供代码示例。

前提条件

  • 您已经启用专属KMS实例并正常连接密码机,为实例创建密钥及应用接入点,并保存了Client Key及CA证书。具体操作,请参见快速入门
    说明 CA证书下载后文件名默认为PrivateKmsCA_kst-******.pem,应用身份凭证文件下载后文件名默认为ClientKey_******.json。
  • 已经获取专属KMS实例VPC地址,并确保可以通过以下方式访问专属KMS实例VPC地址:
    • 在激活密码机实例集群时设置的VPC中访问专属KMS实例VPC地址。
    • 本地设备所在网络可以正常解析并访问专属KMS实例VPC地址。

    具体操作,请参见查询专属KMS标准版实例

安装SDK

  • 如果您通过Python3使用专属KMS SDK安装alibabacloud-dkms-gcs模块,安装命令如下:
    pip install alibabacloud-dkms-gcs
  • 如果您通过Python2使用专属KMS SDK安装alibabacloud-dkms-gcs-python2模块,安装命令如下:
    pip install alibabacloud-dkms-gcs-python2

初始化SDK

您可以初始化一个专属KMS标准版实例的Python客户端,用于调用专属KMS标准版实例管理的密钥等资源。使用Python SDK发起专属KMS API请求,您需要初始化一个Client实例,并根据需要修改Config的默认配置项。

  1. 配置CA证书。

    为保障生产环境通信安全,需要配置可信证书。

    将CA证书路径设定为RuntimeOptions的verify字段,示例代码如下:
    # -*- coding: utf-8 -*-
    from openapi_util.models import RuntimeOptions
    
    runtime_options = RuntimeOptions()
    # 忽略SSL验证
    # runtime_options.ignore_ssl = True
    # ca证书路径
    runtime_options.verify = "<your-ca-certificate-file-path>"
    ...
    response = client.encrypt_with_options(request, runtime_options)
                            
  2. 创建专属KMS标准版Client。

    创建专属KMS标准版Client时,需要指定实例的Endpoint。Endpoint为专属KMS标准版实例服务地址去掉https://。关于专属KMS标准版实例服务地址的更多信息,请参见查询专属KMS标准版实例

    # -*- coding: utf-8 -*-
    from openapi.models import Config
    from sdk.client import Client
    
    config = Config()
    # 连接协议,固定为HTTPS
    config.protocol = "https"
    # 专属KMS标准版实例Client Key
    config.client_key_content = "<your-client-key-content>"
    # 专属KMS标准版实例Client Key解密口令
    config.password = "<your-password>"
    # Endpoint,专属KMS标准版实例服务地址去掉https://
    config.endpoint = "<your-endpoint>"
    client = Client(config)

代码示例

  • 专属KMS标准版Client调用Encrypt接口使用对称密钥加密数据

    详细代码示例,请参见Python3原始代码Python2原始代码

    # -*- coding: utf-8 -*-
    
    from sdk.models import EncryptRequest
    
    request = EncryptRequest()
    # 待加密数据
    request.plaintext = "<your-plaintext>".encode("utf-8")
    # 专属KMS标准版实例加密密钥的ID或别名(Alias)
    request.key_id = "<your-key-id>"
    encrypt_response = client.encrypt_with_options(request, runtime_options)
    # 加密数据
    ciphertext_blob = encrypt_response.ciphertext_blob
    # cipher初始向量,用于解密数据
    iv = encrypt_response.iv
    # 请求ID
    request_id = encrypt_response.request_id
  • 专属KMS标准版Client调用Decrypt接口使用对称密钥解密密文

    详细代码示例,请参见Python3原始代码Python2原始代码

    # -*- coding: utf-8 -*-
    
    from sdk.models import DecryptRequest
    
    request = DecryptRequest()
    # 待解密数据
    request.ciphertext_blob = "<your-ciphertext-blob>"
    # 专属KMS标准版实例解密密钥的ID或别名(Alias)
    request.key_id = "<your-key-id>"
    # Cipher初始向量,必须与加密时一致
    request.iv = "<your-iv>"
    decrypt_response = client.decrypt_with_options(request, runtime_options)
    # 原始明文数据
    plaintext = decrypt_response.plaintext;
    # 请求ID
    request_id = decrypt_response.request_id;
  • 专属KMS标准版Client调用Sign接口使用非对称密钥进行数字签名

    详细代码示例,请参见 Python3原始代码Python2原始代码

    # -*- coding: utf-8 -*-
    
    from sdk.models import SignRequest
    
    request = SignRequest()
    # 专属KMS标准版实例签名密钥的ID或别名(Alias)
    request.key_id = "<your-key-id>"
    # 待签名数据
    request.message = "<your-raw-message>"
    # 签名算法
    request.algorithm = "<your-algorithm>"
    sign_response = client.sign_with_options(request, runtime_options)
    # 签名值
    signature = sign_response.signature
    # 请求ID
    request_id = sign_response.request_id
  • 专属KMS标准版Client调用Verify接口使用非对称密钥验证数字签名

    详细代码示例,请参见Python3原始代码Python2原始代码

    # -*- coding: utf-8 -*-
    
    from sdk.models import SignRequest
    
    request = VerifyRequest()
    # 专属KMS标准版实例签名密钥的ID或别名(Alias)。
    request.key_id = "<your-key-id>"
    # 待验证签名的数据
    request.message = "<your-raw-message>"
    # 签名算法
    request.algorithm = "<your-algorithm>"
    # 签名值
    request.signature = "<your-signature>"
    verify_response = client.verify_with_options(request, runtime_options)
    # 验签结果
    valid = verify_response.valid
    # 请求ID
    request_id = verify_response.request_id
  • 使用专属KMS标准版Client调用GetSecretValue接口获取凭据值

    详细代码示例,请参见Python3原始代码Python2原始代码

    重要
    • 0.0.3及以上版本的专属KMS Python SDK才支持获取凭据值。
    • 0.0.5及以上版本的专属KMS Python2 SDK才支持获取凭据值。
    # -*- coding: utf-8 -*-
    
    from sdk.models import GetSecretValueRequest
    
    request = GetSecretValueRequest()
    # 凭据名称。
    request.secret_name = "<your-secret-name>"
    response = client.get_secret_value_with_options(request, runtime_options)
    # 凭据值。
    secret_data = response.secret_data
    # 请求ID。
    request_id = response.request_id