全部產品
Search
文件中心

:KMS執行個體SDK for Python

更新時間:Jul 06, 2024

KMS執行個體SDK for Python協助您通過簡單的編程訪問KMS執行個體API,實現加密解密、簽名驗簽和擷取憑據值的業務訴求。本文介紹如何安裝SDK以及如何調用介面進行加密解密、簽名驗簽和擷取憑據值。

背景資訊

KMS提供了多種類型的開發工具(SDK),請您在使用前先瞭解各SDK的使用情境。更多資訊,請參見SDK參考

如果您使用Python3,可以訪問Python3開原始碼倉庫,如果您使用Python2,可以訪問Python2開原始碼倉庫,同時也歡迎您提出寶貴意見,或者提供程式碼範例。

前提條件

  • 已購買和啟用KMS執行個體。具體操作,請參見購買和啟用KMS執行個體

  • 已完成密鑰和憑據的建立。具體操作,請參見軟體密鑰硬體密鑰建立憑據

    說明

    如果您的業務不涉及憑據,則無需建立憑據。

  • 已建立應用存取點並儲存了Client Key、擷取KMS執行個體CA認證。具體操作,請參見建立應用存取點

  • 請確保應用程式運行環境可訪問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