KMS實例SDK for Python
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實例。
應用程序運行環境和KMS實例在不同地域
您需要配置應用跨地域訪問KMS實例。具體操作,請參見應用跨地域訪問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