全部产品
Search
文档中心

密钥管理服务:KMS实例SDK for Python

更新时间:Oct 09, 2023

KMS实例SDK for Python帮助您通过简单的编程访问KMS实例API,实现加密解密、签名验签和获取凭据值的业务诉求。本文介绍如何安装SDK以及如何调用接口进行加密解密、签名验签和获取凭据值。

背景信息

KMS提供了多种类型的开发工具(SDK),请您在使用前先了解各SDK的使用场景。更多信息,请参见SDK使用指引

如果您使用Python3,可以访问Python3开源代码仓库,如果您使用Python2,可以访问Python2开源代码仓库,同时也欢迎您提出宝贵意见,或者提供代码示例。

前提条件

  • 已购买和启用KMS实例。具体操作,请参见购买和启用KMS实例

  • 已完成密钥和凭据的创建。具体操作,请参见软件密钥硬件密钥创建凭据

    说明

    如果您的业务不涉及凭据,则无需创建凭据。

  • 已创建应用接入点并保存了Client Key、获取KMS实例CA证书。具体操作,请参见通过应用接入点访问KMS实例

  • 请确保应用程序运行环境可访问KMS实例VPC地址。

    业务场景

    说明

    应用程序运行环境和KMS实例在同一个地域,且属于同一个VPC

    默认应用程序运行环境和KMS实例间网络互通,您无需配置。

    应用程序运行环境和KMS实例在同一个地域,但属于不同VPC

    您需要配置多个VPC访问同一个KMS实例,具体操作,请参见同地域多VPC访问KMS实例

安装SDK

  • 如果您使用Python3,请通过如下命令安装alibabacloud-dkms-gcs模块。

    pip install alibabacloud-dkms-gcs
  • 如果您使用Python2,请通过如下命令安装alibabacloud-dkms-gcs-python2模块。

    pip install alibabacloud-dkms-gcs-python2

初始化SDK

使用Python SDK发起KMS实例API请求,您需要初始化一个Client实例。

  1. 初始化Client实例。

    # -*- coding: utf-8 -*-
    from openapi.models import Config
    from sdk.client import Client
    
    config = Config()
    # 连接协议请设置为"https"。KMS实例服务仅允许通过HTTPS协议访问。
    config.protocol = "https"
    # 设置endpoint为<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com。
    config.endpoint = "<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com"
    # Client Key。
    config.client_key_content = "<your-client-key-content>"
    # Client Key解密口令。
    config.password = "<your-password>"
    client = Client(config)
  2. 通过配置运行时参数(RuntimeOptions)设置KMS实例的CA证书。

    重要

    为保障生产环境通信安全,建议您保持开启验证SSL/TLS证书有效性。如您确有需要关闭验证SSL/TLS证书,例如线下测试场景,可通过将运行时参数(RuntimeOptions)的ignore_ssl字段设置为True实现。

    设置RuntimeOptionsverify字段为KMS实例CA证书路径。代码示例如下:

    # -*- coding: utf-8 -*-
    from openapi_util.models import RuntimeOptions
    
    runtime_options = RuntimeOptions()
    # ca证书路径
    runtime_options.verify = "<your-ca-certificate-file-path>"                        

使用已初始化的Client调用KMS实例API

初始化Client后,您可以通过Client调用KMS实例API,本文介绍如下几个使用场景和代码示例。关于KMS实例API的详细信息,请参见API概览

  • 调用Encrypt接口使用对称密钥加密数据

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

    # -*- coding: utf-8 -*-
    
    from sdk.models import EncryptRequest
    
    request = EncryptRequest()
    # 待加密数据。
    request.plaintext = "<your-plaintext>".encode("utf-8")
    # 密钥的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
  • 调用Decrypt接口使用对称密钥解密密文

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

    # -*- coding: utf-8 -*-
    
    from sdk.models import DecryptRequest
    
    request = DecryptRequest()
    # 待解密数据。
    request.ciphertext_blob = "<your-ciphertext-blob>"
    # 密钥的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;
  • 调用Sign接口使用非对称密钥进行数字签名

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

    # -*- coding: utf-8 -*-
    
    from sdk.models import SignRequest
    
    request = SignRequest()
    # 密钥的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
  • 调用Verify接口使用非对称密钥验证数字签名

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

    # -*- coding: utf-8 -*-
    
    from sdk.models import SignRequest
    
    request = VerifyRequest()
    # 密钥的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
  • 调用GetSecretValue接口获取凭据值

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

    重要
    • 0.0.3及以上版本的KMS实例SDK for Python才支持获取凭据值。

    • 0.0.5及以上版本的KMS实例SDK for Python2才支持获取凭据值。

    # -*- 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