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執行個體。
初始化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)
通過配置運行時參數(
RuntimeOptions
)設定KMS執行個體的CA認證。重要為保障生產環境通訊安全,建議您保持開啟驗證SSL/TLS認證有效性。如您確有需要關閉驗證SSL/TLS認證,例如線下測試情境,可通過將運行時參數(
RuntimeOptions
)的ignore_ssl
欄位設定為True實現。設定
RuntimeOptions
的verify
欄位為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