專屬KMS SDK for Go協助您通過簡單的編程訪問專屬KMS的API,實現加密解密、簽名驗簽和擷取憑據資訊的業務訴求。
背景資訊
您可以訪問開原始碼倉庫,查看SDK源碼及程式碼範例。同時也歡迎您提出寶貴意見,或者提供程式碼範例。
前提條件
- 您已經啟用專屬KMS執行個體並正常串連密碼機,為執行個體建立密鑰及應用存取點,並儲存了Client Key及CA認證。具體操作,請參見快速入門。說明 CA認證下載後檔案名稱預設為PrivateKmsCA_kst-******.pem,應用身份憑證檔案下載後檔案名稱預設為ClientKey_******.json。
- 已經擷取專屬KMS執行個體VPC地址,並確保可以通過以下方式訪問專屬KMS執行個體VPC地址:
- 在啟用密碼機執行個體叢集時設定的VPC中訪問專屬KMS執行個體VPC地址。
- 本地裝置所在網路可以正常解析並訪問專屬KMS執行個體VPC地址。
具體操作,請參見查詢專屬KMS標準版執行個體。
安裝SDK
- 方式一:使用go.mod管理您的依賴。
在go.mod檔案中添加以下內容安裝依賴包。
require ( github.com/aliyun/alibabacloud-dkms-gcs-go-sdk SDK版本 )
說明 關於最新的SDK版本,請參考開原始碼倉庫。 - 方式二:使用
go get
擷取遠程程式碼封裝。$ go get -u github.com/aliyun/alibabacloud-dkms-gcs-go-sdk
初始化SDK
您可以初始化一個專屬KMS標準版執行個體的Go用戶端,用於調用專屬KMS標準版執行個體管理的密鑰等資源。使用Go SDK發起專屬KMS API請求,您需要初始化一個Client執行個體,並根據需要修改Config的預設配置項。
- 配置CA認證。
為保障生產環境通訊安全,需要配置可信認證。
將CA認證內容設定為RuntimeOptions
的verify欄位,範例程式碼如下:import ( dedicatedkmsopenapiutil "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi-util" "github.com/alibabacloud-go/tea/tea" "io/ioutil" ) // 驗證服務端認證 ca, err := ioutil.ReadFile("path/to/caCert.pem") if err != nil { panic(err) } runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{ Verify: tea.String(string(ca)), } ... encryptResponse, err := client.EncryptWithOptions(encryptRequest, runtimeOptions)
開發環境可使用
RuntimeOptions
的ignoreSSL欄位臨時忽略可信認證的驗證。範例程式碼如下:import ( dedicatedkmsopenapiutil "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi-util" "github.com/alibabacloud-go/tea/tea" ) // 忽略服務端認證 runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{ IgnoreSSL: tea.Bool(true), } ... encryptResponse, err := client.EncryptWithOptions(encryptRequest, runtimeOptions)
- 建立專屬KMS標準版Client。
建立專屬KMS標準版Client時,需要指定標準版執行個體的Endpoint。EndPoint為專屬KMS標準版執行個體服務地址去掉https://。關於專屬KMS標準版執行個體服務地址的更多資訊,請參見查詢專屬KMS標準版執行個體。
import ( dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi" dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk" "github.com/alibabacloud-go/tea/tea" ) config := &dedicatedkmsopenapi.Config{ // 連線協定,固定為HTTPS Protocol: tea.String("https"), // 專屬KMS標準版執行個體Client Key ClientKeyContent: tea.String("<your client key content>"), // 專屬KMS標準版執行個體Client Key解密口令 Password: tea.String("<your client key password>"), // Endpoint,專屬KMS標準版執行個體的服務地址去掉'https://' Endpoint: tea.String("<service_id>.cryptoservice.kms.aliyuncs.com"), } client, err := dedicatedkmssdk.NewClient(config)
程式碼範例
- 專屬KMS標準版Client調用Encrypt介面使用對稱金鑰密碼編譯資料
詳細程式碼範例,請參見原始代碼。
import ( dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi" dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk" "github.com/alibabacloud-go/tea/tea" ) // 待加密資料。 plaintext := []byte("encrypt plaintext") // 專屬KMS標準版執行個體加密金鑰的ID或別名(Alias)。 keyId := "<your cipher key id>" encryptRequest := &dedicatedkmssdk.EncryptRequest{ KeyId: tea.String(keyId), Plaintext: plaintext, } encryptResponse, err := client.EncryptWithOptions(encryptRequest, runtimeOptions) if err != nil { panic(err) } // 密文。 cipher := encryptResponse.CiphertextBlob // Cipher初始向量,用於解密資料。 iv := encryptResponse.Iv // 請求ID。 requestId := tea.StringValue(encryptResponse.RequestId)
- 專屬KMS標準版Client調用Decrypt介面使用對稱金鑰解密密文
詳細程式碼範例,請參見原始代碼。
import ( dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi" dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk" "github.com/alibabacloud-go/tea/tea" ) // 專屬KMS標準版執行個體解密密鑰的ID或別名(Alias)。 keyId := "<your cipher key id>" // 待解密資料,加密返回的密文。 ciphertextBlob := []byte("<your cipher data to decrypt>") // Cipher初始向量,必須與加密時一致。 iv := []byte("<IV value>") decryptRequest := &dedicatedkmssdk.DecryptRequest{ KeyId: tea.String(keyId), CiphertextBlob: ciphertextBlob, Iv: iv, } decryptResponse, err := client.DecryptWithOptions(decryptRequest, runtimeOptions) if err != nil { panic(err) } // 原始明文資料。 plaintext := decryptResponse.Plaintext // 請求ID。 requestId := tea.StringValue(decryptResponse.RequestId)
- 專屬KMS標準版Client調用Sign介面使用非對稱金鑰進行數位簽章
詳細程式碼範例,請參見原始代碼。
import ( dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi" dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk" "github.com/alibabacloud-go/tea/tea" ) // 專屬KMS執行個體簽名密鑰的ID或別名(Alias)。 signerKeyId := "<the signer key id>" // 待簽名資料。 message := []byte("<the data to sign>") signRequest := &dedicatedkmssdk.SignRequest{ KeyId: tea.String(signerKeyId), Message: message, MessageType: tea.String(messageType), } signResponse, err := client.SignWithOptions(signRequest, runtimeOptions) if err != nil { panic(err) } // 簽名值。 signature := signResponse.Signature // 請求ID。 requestId := tea.StringValue(signResponse.RequestId)
- 專屬KMS標準版Client調用Verify介面使用非對稱金鑰驗證數位簽章
詳細程式碼範例,請參見原始代碼。
import ( dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi" dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk" "github.com/alibabacloud-go/tea/tea" ) // 專屬KMS標準版執行個體簽名密鑰的ID或別名(Alias)。 signerKeyId := "<the signer key id>" // 待驗證簽名的資料。 message := []byte("<the data to sign>") // 待驗證簽名值。 signature := []byte("<the signature>") verifyRequest := &dedicatedkmssdk.VerifyRequest{ KeyId: tea.String(signerKeyId), Message: message, MessageType: tea.String(messageType), Signature: signature, } verifyResponse, err := client.VerifyWithOptions(verifyRequest, runtimeOptions) if err != nil { panic(err) } // 驗簽結果。 value := tea.BoolValue(verifyResponse.Value) // 請求ID。 requestId := tea.StringValue(verifyResponse.RequestId)
- 使用專屬KMS標準版Client調用GetSecretValue介面擷取憑據值
詳細程式碼範例,請參見原始代碼。
重要 0.2.1及以上版本的專屬KMS Go SDK才支援擷取憑據值。import ( dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi" dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk" "github.com/alibabacloud-go/tea/tea" ) // 憑據名稱。 secretName := "<your-dkms-secret-name>" getSecretValueRequest := &dedicatedkmssdk.GetSecretValueRequest{ SecretName: tea.String(secretName), } // 調用擷取憑據值介面。 response, err := client.GetSecretValueWithOptions(getSecretValueRequest, runtimeOptions) if err != nil { panic(err) } // 憑據值。 _secretData := tea.StringValue(response.SecretData) // 請求ID。 _RequestId := tea.StringValue(response.RequestId)