專屬KMS SDK for Python協助您通過簡單的編程訪問專屬KMS的API,實現加密解密、簽名驗簽和擷取憑據資訊的業務訴求。
背景資訊
- 如果您使用Python3訪問專屬KMS SDK,可以查看Python3開原始碼倉庫。
- 如果您使用Python2訪問專屬KMS SDK,可以查看Python2開原始碼倉庫。
前提條件
- 您已經啟用專屬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的預設配置項。
- 配置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)
- 建立專屬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