全部產品
Search
文件中心

Key Management Service:專屬KMS Python SDK

更新時間:Jul 06, 2024

專屬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