憑據管家用戶端(SecretsManager Client)基於KMS憑據管家API封裝了商務邏輯、最佳實務和設計模式,更易於開發人員在業務系統中整合。主要適用於應用中動態使用託管在憑據管家中的憑據,告別對敏感資訊的寫入程式碼。
功能特性
憑據管家用戶端具有以下功能特性:
支援開發人員在應用中快速整合憑據管家能力,一行代碼讀取憑據資訊。
封裝憑據在應用中緩衝和重新整理的功能。
封裝API錯誤的重試機制,智能處理服務端錯誤。
開放外掛程式式設計模式,支援開發人員自訂擴充緩衝、錯誤重試等功能模組。
憑據管家Java用戶端
安裝SDK
憑據管家用戶端支援Java語言,您可以訪問SecretsManager Client for Java開原始碼倉庫瞭解更多代碼資訊。
您可以通過Maven在專案中使用憑據管家Java用戶端,需要添加的依賴資訊如下:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-secretsmanager-client</artifactId>
<version>x.x.x</version>
</dependency>
憑據管家Java用戶端具體版本,請參見alibabacloud-secretsmanager-client-java。
範例程式碼
阿里雲帳號AccessKey擁有所有OpenAPI的存取權限,建議您使用RAM使用者進行API訪問或日常營運。強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
本樣本以將AccessKey配置在環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET的方式來實現身分識別驗證為例。
更多認證資訊配置方式,請參見管理訪問憑據。
不同作業系統的環境變數配置方法不同,具體操作,請參見在Linux、macOS和Windows系統配置環境變數。
通過設定檔(secretsmanager.properties)構建用戶端
建議您採用基於Client Key的應用存取點,通過憑據管家Java SDK使用Client Key。關於如何建立Client Key,請參見為AAP綁定Client Key。
憑據管家Java用戶端在1.1.8及以上版本支援基於Client Key應用存取點訪問憑據管家,需要配置以下設定檔:
## 配置訪問方式。 credentials_type=client_key ## 讀取Client Key的解密密碼:支援從環境變數或者檔案讀取。 client_key_password_from_env_variable=#your client key private key password environment variable name# client_key_password_from_file_path=#your client key private key password file path# ## 擷取Client Key的私密金鑰檔案。 client_key_private_key_path=#your client key private key file path# ## 配置關聯的KMS地區。 cache_client_region_id=[{"regionId":"#regionId#"}]
通過設定檔(secretsmanager.properties)構建用戶端的範例程式碼如下:
import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient; import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder; import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException; import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo; public class CacheClientEnvironmentSample { public static void main(String[] args) { try { SecretCacheClient client = SecretCacheClientBuilder.newClient(); SecretInfo secretInfo = client.getSecretInfo("#secretName#"); System.out.println(secretInfo); } catch (CacheSecretException e) { e.printStackTrace(); } } }
通過指定參數(Access Key、Access Secret、RegionID等)構建用戶端
import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient; import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder; import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException; import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo; import com.aliyuncs.kms.secretsmanager.client.service.BaseSecretManagerClientBuilder; import com.aliyuncs.kms.secretsmanager.client.utils.CredentialsProviderUtils; public class CacheClientSimpleParametersSample { public static void main(String[] args) { try { SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder( BaseSecretManagerClientBuilder.standard().withCredentialsProvider(CredentialsProviderUtils .withAccessKey(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))).withRegion("#regionId#").build()).build(); SecretInfo secretInfo = client.getSecretInfo("#secretName#"); System.out.println(secretInfo); } catch (CacheSecretException e) { e.printStackTrace(); } } }
通過自訂參數構建用戶端
import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient; import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder; import com.aliyuncs.kms.secretsmanager.client.cache.FileCacheSecretStoreStrategy; import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException; import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo; import com.aliyuncs.kms.secretsmanager.client.service.BaseSecretManagerClientBuilder; import com.aliyuncs.kms.secretsmanager.client.service.DefaultRefreshSecretStrategy; import com.aliyuncs.kms.secretsmanager.client.service.FullJitterBackoffStrategy; import com.aliyuncs.kms.secretsmanager.client.utils.CredentialsProviderUtils; public class CacheClientDetailParametersSample { public static void main(String[] args) { try { SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(BaseSecretManagerClientBuilder.standard() .withCredentialsProvider(CredentialsProviderUtils.withAccessKey(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))) .withRegion("#regionId#") .withBackoffStrategy(new FullJitterBackoffStrategy(3, 2000, 10000)).build()) .withCacheSecretStrategy(new FileCacheSecretStoreStrategy("#cacheSecretPath#", true, "#salt#")) .withRefreshSecretStrategy(new DefaultRefreshSecretStrategy("#ttlName#")) .withCacheStage("#stage#") .withSecretTTL("#secretName#", 1 * 60 * 1000l) .withSecretTTL("#secretName1#", 2 * 60 * 1000l).build(); SecretInfo secretInfo = client.getSecretInfo("#secretName#"); System.out.println(secretInfo); } catch (CacheSecretException e) { e.printStackTrace(); } } }
憑據管家Python用戶端
安裝SDK
憑據管家用戶端支援Python語言,您可以訪問SecretsManager Client for Python開原始碼倉庫瞭解更多代碼資訊。
您可以執行如下pip安裝命令,在專案中使用憑據管家Python用戶端。
pip install aliyun-secret-manager-client
憑據管家Python用戶端具體版本,請參見aliyun-secretsmanager-client-python。
範例程式碼
阿里雲帳號AccessKey擁有所有OpenAPI的存取權限,建議您使用RAM使用者進行API訪問或日常營運。強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
本樣本以將AccessKey配置在環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET的方式來實現身分識別驗證為例。
更多認證資訊配置方式,請參見管理訪問憑據。
不同作業系統的環境變數配置方法不同,具體操作,請參見在Linux、macOS和Windows系統配置環境變數。
通過系統內容變數構建用戶端
from alibaba_cloud_secretsmanager_client.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder if __name__ == '__main__': secret_cache_client = SecretManagerCacheClientBuilder.new_client() secret_info = secret_cache_client.get_secret_info("#secretName#") print(secret_info.__dict__)
通過指定參數(Access Key、Access Secret、RegionID等)構建用戶端
from alibaba_cloud_secretsmanager_client.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder from alibaba_cloud_secretsmanager_client.service.default_secret_manager_client_builder import DefaultSecretManagerClientBuilder if __name__ == '__main__': secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(DefaultSecretManagerClientBuilder.standard() \ .with_access_key(os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) \ .with_region("#regionId#").build()) \ .build(); secret_info = secret_cache_client.get_secret_info("#secretName#") print(secret_info.__dict__)
通過自訂參數構建用戶端
from alibaba_cloud_secretsmanager_client.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder from alibaba_cloud_secretsmanager_client.cache.file_cache_secret_store_strategy import FileCacheSecretStoreStrategy from alibaba_cloud_secretsmanager_client.service.default_secret_manager_client_builder import DefaultSecretManagerClientBuilder from alibaba_cloud_secretsmanager_client.service.default_refresh_secret_strategy import DefaultRefreshSecretStrategy from alibaba_cloud_secretsmanager_client.service.full_jitter_back_off_strategy import FullJitterBackoffStrategy if __name__ == '__main__': secret_cache_client = SecretManagerCacheClientBuilder \ .new_cache_client_builder(DefaultSecretManagerClientBuilder.standard().with_access_key(os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) \ .with_back_off_strategy(FullJitterBackoffStrategy(3, 2000, 10000)) \ .with_region("#regionId#").build()) \ .with_cache_secret_strategy(FileCacheSecretStoreStrategy("#cacheSecretPath#", True,"#salt#")) \ .with_refresh_secret_strategy(DefaultRefreshSecretStrategy("#ttlName#")) \ .with_cache_stage("#stage#") \ .with_secret_ttl("#secretName#", 1 * 60 * 1000) \ .build() secret_info = secret_cache_client.get_secret_info("#secretName#") print(secret_info.__dict__)
憑據管家Go用戶端
安裝SDK
憑據管家用戶端支援Go語言,您可以訪問SecretsManager Client for Go開原始碼倉庫瞭解更多代碼資訊。
您可以執行如下安裝命令,在專案中使用憑據管家Go用戶端。
go get -u github.com/aliyun/aliyun-secretsmanager-client-go
憑據管家Go用戶端具體版本,請參見aliyun-secretsmanager-client-go。
範例程式碼
阿里雲帳號AccessKey擁有所有OpenAPI的存取權限,建議您使用RAM使用者進行API訪問或日常營運。強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
本樣本以將AccessKey配置在環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET的方式來實現身分識別驗證為例。
更多認證資訊配置方式,請參見用戶端初始化和請求方式。
不同作業系統的環境變數配置方法不同,具體操作,請參見在Linux、macOS和Windows系統配置環境變數。
通過設定檔(secretsmanager.properties)構建用戶端
建議您採用基於Client Key的應用存取點,通過憑據管家Go SDK使用Client Key。關於如何建立Client Key,請參見為AAP綁定Client Key。
憑據管家Go用戶端在v1.0.1及以上版本支援基於Client Key應用存取點訪問憑據管家,需要配置以下設定檔:
## 配置訪問方式。 credentials_type=client_key ## 讀取Client Key的解密密碼:支援從環境變數或者檔案讀取。 client_key_password_from_env_variable=#your client key private key password environment variable name# client_key_password_from_file_path=#your client key private key password file path# ## 擷取Client Key的私密金鑰檔案。 client_key_private_key_path=#your client key private key file path# ## 配置關聯的KMS地區。 cache_client_region_id=[{"regionId":"#regionId#"}]
通過設定檔(secretsmanager.properties)構建用戶端的範例程式碼如下:
package main import ( "fmt" "github.com/aliyun/aliyun-secretsmanager-client-go/sdk" ) func main() { client, err := sdk.NewClient() if err != nil { // Handle exceptions panic(err) } secretInfo, err := client.GetSecretInfo("#secretName#") if err != nil { // Handle exceptions panic(err) } fmt.Printf("SecretValue:%s\n",secretInfo.SecretValue) }
通過指定參數(Access Key、Access Secret、RegionID等)構建用戶端
package main import ( "fmt" "github.com/aliyun/aliyun-secretsmanager-client-go/sdk/service" "github.com/aliyun/aliyun-secretsmanager-client-go/sdk" ) func main() { client, err := sdk.NewSecretCacheClientBuilder(service.NewDefaultSecretManagerClientBuilder().Standard().WithAccessKey(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).WithRegion("#regionId#").Build()).Build() if err != nil { // Handle exceptions panic(err) } secretInfo, err := client.GetSecretInfo("#secretName#") if err != nil { // Handle exceptions panic(err) } fmt.Printf("SecretValue:%s\n",secretInfo.SecretValue) }
通過自訂參數構建用戶端
package main import ( "fmt" "github.com/aliyun/aliyun-secretsmanager-client-go/sdk/service" "github.com/aliyun/aliyun-secretsmanager-client-go/sdk" "github.com/aliyun/aliyun-secretsmanager-client-go/sdk/cache" ) func main() { client, err := sdk.NewSecretCacheClientBuilder( service.NewDefaultSecretManagerClientBuilder().Standard().WithAccessKey(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).WithRegion("#regionId#").WithBackoffStrategy(&service.FullJitterBackoffStrategy{RetryMaxAttempts: 3, RetryInitialIntervalMills: 2000, Capacity: 10000}).Build()).WithCacheSecretStrategy(cache.NewFileCacheSecretStoreStrategy("#cacheSecretPath#", true, "#salt#")).WithRefreshSecretStrategy(service.NewDefaultRefreshSecretStrategy("#jsonTTLPropertyName#")).WithCacheStage("ACSCurrent").WithSecretTTL("#secretName#", 1*60*1000).Build() if err != nil { // Handle exceptions panic(err) } secretInfo, err := client.GetSecretInfo("#secretName#") if err != nil { // Handle exceptions panic(err) } fmt.Printf("SecretValue:%s\n",secretInfo.SecretValue) }