全部產品
Search
文件中心

Key Management Service:憑據用戶端

更新時間:May 09, 2026

憑據用戶端基於 KMS OpenAPI 和 KMS 執行個體 API 封裝,提供憑據緩衝、自動重新整理和錯誤重試能力。通過本機快取憑據減少 API 呼叫次數,降低因網路抖動或憑據到期導致的業務中斷風險。本文介紹如何安裝憑據用戶端、配置鑒權憑證和擷取憑據值。

憑據用戶端SDK介紹

憑據用戶端基於 API 封裝了憑據緩衝、最佳實務和設計模式,便於在業務系統中整合。憑據用戶端具有以下優勢:

說明
  • 此外KMS還提供了KMS執行個體SDK和阿里雲SDK,也可以用於擷取憑據值。詳細資料,請參見擷取和管理認證

  • 如果需要對憑據進行管控類操作,僅支援使用阿里雲SDK。

SDK 優勢

  • 支援開發人員在應用中快速整合憑據能力,一行代碼讀取憑據資訊。

  • 封裝憑據在應用中緩衝和重新整理的功能。

  • 封裝API錯誤的重試機制,智能處理服務端錯誤。

  • 開放外掛程式式設計模式,支援開發人員自訂擴充緩衝、錯誤重試等功能模組。

SDK 版本

憑據用戶端V2.0版本發行,推薦使用 V2.0版本。SDK 1.0 和 SDK 2.0 的區別如下:

  • 訪問憑證支援

    憑證類型

    SDK 1.0

    SDK 2.0

    AccessKey

    支援

    支援

    OIDC Role Arn

    不支援

    支援

    ECS RAM Role

    支援

    支援

    RAM Role Arn

    支援

    支援

    說明

    SDK 2.0不支援從預設環境變數和設定檔讀取RamRoleArn資訊,需要通過寫入程式碼模式。如有需要,請聯絡技術支援人員。

    Client Key

    支援

    不支援

    預設憑據鏈

    不支援

    支援

  • 安全性憑證

    特性

    SDK 1.0

    SDK 2.0

    內建CA認證

    不支援

    支援

SDK 憑據鑒權流程

憑據用戶端通過訪問憑據進行鑒權,鑒權過程因網關類型不同而略有差異。SDK 支援自動識別配置參數並選擇合適的網關串連,無需手動設定網關類型。鑒權步驟如下:

  1. 設定環境變數或準備設定檔,確保包含所有必要的憑證資訊(專屬網關共用網關參數略有差異)。

  2. 初始化用戶端,SDK將會自動讀取這些資訊並識別網關。

  3. SDK完成鑒權後即可進行後續的網關操作。

適用範圍

  • 支援的憑據類型:通用憑據、RAM憑據、ECS憑據、資料庫憑據。

  • 支援的開發語言:Java(Java 8及以上版本)、Python、Go、Node.js(16.0.0 及以上版本)。

安裝憑據用戶端

下文以安裝 SDK 2.0 為例,SDK 1.0 請參考各語言 SDK 原始碼庫。

Java

通過 Maven 的方式在專案中安裝憑據用戶端。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-secretsmanager-client-v2</artifactId>
    <version>x.x.x</version>
</dependency>
重要

建議使用SDK 2.0最新版本,以獲得最新功能和最佳化。請訪問alibabacloud-secretsmanager-client-java-v2,查看SDK 2.0範例程式碼和原始碼資訊。若使用V1版本,請訪問alibabacloud-secretsmanager-client-java

Python

執行pip命令安裝憑據用戶端。

# 如果下述命令報錯,請將pip替換為pip3
pip install alibabacloud_secretsmanager_client_v2
重要
  • 憑據用戶端SDK 2.0僅支援 Python 3.7 及以上版本。請使用 python3 --version 命令檢查當前 Python 版本,若版本低於 3.7,請先升級 Python 環境再執行安裝命令。

  • 建議使用SDK 2.0版本,以獲得最新功能和最佳化。請訪問aliyun-secretsmanager-client-python-v2,查看SDK 2.0範例程式碼和原始碼資訊。若使用V1版本,請訪問aliyun-secretsmanager-client-python

Go

使用 go get 命令安裝憑據用戶端。

go get -u github.com/aliyun/alibabacloud-secretsmanager-client-go-v2
重要
  • Go語言下憑據用戶端依賴的alibaba-cloud-sdk-go 版本需小於V1.63.0,請在外掛程式的 go.mod 檔案中檢查並確認版本,以避免潛在的相容性問題。

  • 建議使用SDK 2.0版本,以獲得最新功能和最佳化。請訪問alibabacloud-secretsmanager-client-go-v2,查看SDK 2.0範例程式碼和原始碼資訊。若使用V1版本,請訪問aliyun-secretsmanager-client-go

Node.js

通過 npm 或 yarn 在專案中使用憑據用戶端。

  • npm

    npm install alibabacloud-secretsmanager-client-v2
  • yarn

    yarn add alibabacloud-secretsmanager-client-v2
重要
  • 憑據用戶端SDK 2.0僅支援Node.js 16.0.0 或以上版本。

  • 建議使用 SDK 2.0 最新版本,以獲得最新功能和最佳化。請訪問 alibabacloud-secretsmanager-client-nodejs-v2,查看 SDK 2.0 範例程式碼和原始碼資訊。

配置鑒權訪問憑證

ECS 執行個體 RAM 角色

步驟1:建立 RAM 角色並配置許可權

ECS RAM角色是指為ECS執行個體授予的RAM角色,該RAM角色是一個受信服務為雲端服務器的普通服務角色。使用執行個體RAM角色可以實現在ECS執行個體內部無需配置AccessKey即可擷取臨時訪問憑證(STS Token),從而調用KMS的OpenAPI。

具體操作,請參見執行個體RAM角色

  1. 登入RAM控制台,建立可信實體為阿里雲服務的RAM角色。

    • 信任主體類型:選擇云服务器

    • 信任主體名稱:選擇Elastic Compute Service

  2. 授予RAM角色訪問KMS的許可權。

    • 方式一:設定基於身份的策略

      單擊RAM角色操作列的新增授权,直接綁定KMS內建系統權限原則到RAM角色。KMS內建系統權限原則,請參見Key Management Service系統權限原則參考

      說明

      同時支援自訂權限原則,具體操作請參見建立自訂權限原則

    • 方式二:設定基於資源的策略

      KMS支援基於資源的策略,即為單個密鑰和憑據設定存取權限,用於控制哪些阿里雲帳號、RAM使用者、RAM角色有許可權來管理或使用KMS密鑰、憑據。詳細介紹,請參見密鑰策略憑據策略

  3. 登入ECS管理主控台,將RAM角色授予ECS執行個體。image

步驟2:設定環境變數或設定檔

SDK 支援通過以下兩種方式擷取訪問憑證:

  • 讀取環境變數:不同作業系統的環境變數配置方法不同,具體操作,請參見在環境變數中設定訪問憑據。

    警告

    參數名稱不可修改,否則SDK無法識別。

  • 讀取設定檔:

    • 預設設定檔為secretsmanager.properties(不可更改名稱)為了確保應用程式能夠正確載入設定檔,請將其放置在相應的配置目錄中。以下是不同程式設計語言的通用配置目錄:

      • Java:將設定檔放在src/main/resources目錄下,以便在編譯時間自動包含在類路徑中。

      • Go:通常將設定檔放在專案的根目錄或專門的config目錄中,然後通過代碼負載檔案。

      • Python:將設定檔放在專案目錄中,或在特定的config目錄中,並使用適當的方法(如os.pathpkg_resources)來載入。

    • 若使用自訂設定檔,需要在初始化用戶端時,指定設定檔地址(#customConfigFileName#)。

設定檔

  • 專屬網關

    # 訪問憑據類型
    credentials_type=ecs_ram_role
    # ECS RAM Role名稱
    credentials_role_name=#credentials_role_name#
    # 關聯的KMS服務地區及KMS執行個體endpoint
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共用網關

    # 訪問憑據類型
    credentials_type=ecs_ram_role
    # ECS RAM Role名稱
    credentials_role_name=#credentials_role_name#
    # 關聯的KMS服務地區
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 共用網關(VPC)

    # 訪問憑據類型
    credentials_type=ecs_ram_role
    # ECS RAM Role名稱
    credentials_role_name=#credentials_role_name#
    # 關聯的KMS服務地區及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

環境變數

參數

參數值

credentials_type

固定取值ecs_ram_role。

credentials_role_name

RAM角色名稱。

cache_client_region_id

  • 專屬網關:[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共用網關:[{"regionId":"<your region id>"}]。

    重要
    • 請將<regionId>替換為真實的地區ID<your kms instanceId>替換為真實的執行個體ID。

    • Linux系統下,使用export命令設定環境變數時,請添加逸出字元,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共用網關(VPC)時,格式為 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

AccessKey

步驟1:建立 AccessKey 並配置許可權

警告

阿里雲帳號預設有所有資源的Administrator許可權且不可修改,為了確保資源安全,建議使用RAM使用者建立AccessKey,並根據需求進行最小化授權。

  1. 登入RAM控制台,在頁用户面,單擊目標RAM使用者名稱稱。

  2. 认证管理頁簽下的AccessKey地區,單擊建立AccessKey,並按照指引完成建立。

  3. 授予RAM使用者訪問KMS的許可權。

    • 方式一:設定基於身份的策略

      單擊RAM使用者操作列的新增授权,直接綁定KMS內建系統權限原則到RAM角色。KMS內建系統權限原則,請參見Key Management Service系統權限原則參考

      說明

      同時支援自訂權限原則,具體操作請參見建立自訂權限原則

    • 方式二:設定基於資源的策略

      KMS支援基於資源的策略,即為單個密鑰和憑據設定存取權限,用於控制哪些阿里雲帳號、RAM使用者、RAM角色有許可權來管理或使用KMS密鑰、憑據。詳細介紹,請參見密鑰策略憑據策略

步驟2:設定環境變數或設定檔

SDK 支援通過以下兩種方式擷取訪問憑證:

  • 讀取環境變數:不同作業系統的環境變數配置方法不同,具體操作,請參見在環境變數中設定訪問憑據。

    警告

    參數名稱不可修改,否則SDK無法識別。

  • 讀取設定檔:

    • 預設設定檔為secretsmanager.properties(不可更改名稱)為了確保應用程式能夠正確載入設定檔,請將其放置在相應的配置目錄中。以下是不同程式設計語言的通用配置目錄:

      • Java:將設定檔放在src/main/resources目錄下,以便在編譯時間自動包含在類路徑中。

      • Go:通常將設定檔放在專案的根目錄或專門的config目錄中,然後通過代碼負載檔案。

      • Python:將設定檔放在專案目錄中,或在特定的config目錄中,並使用適當的方法(如os.pathpkg_resources)來載入。

    • 若使用自訂設定檔,需要在初始化用戶端時,指定設定檔地址(#customConfigFileName#)。

設定檔

  • 專屬網關

    # 訪問憑據類型
    credentials_type=ak
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    #訪問KMS執行個體網關時,使用如下配置
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共用網關

    # 訪問憑據類型
    credentials_type=ak
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 關聯的KMS服務地區
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 共用網關(VPC)

    # 訪問憑據類型
    credentials_type=ak
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 關聯的KMS服務地區及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

環境變數

參數

參數值

credentials_type

固定取值ak。

credentials_access_key_id

AccessKey ID。

credentials_access_secret

AccessKey Secret。

cache_client_region_id

  • 專屬網關:[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共用網關:[{"regionId":"<your region id>"}]。

    重要
    • 請將<regionId>替換為真實的地區ID<your kms instanceId>替換為真實的執行個體ID。

    • Linux系統下,使用export命令設定環境變數時,請添加逸出字元,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共用網關(VPC)時,格式為 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

OIDC Role ARN

說明

僅 SDK 2.0 支援 OIDC Role ARN 憑證,SDK 1.0 不支援。

步驟1:建立 OIDC Role ARN 並配置許可權

  1. 建立OIDC身份供應商

    1. 使用Resource Access Management員登入RAM控制台,進入整合管理 > SSO管理頁面,並選擇角色SSO。

    2. OIDC頁簽,單擊创建身份提供商

    3. 创建身份提供商頁面,設定身份供應商資訊。具體配置,請參見管理OIDC身份供應商

  2. 擷取並儲存OIDC身份資訊(ARN和用戶端ID)

    1. 進入整合管理 > SSO管理頁面,單擊目標身份提供商名稱。

    2. 進入身份提供商詳情頁,可查看ARN用戶端識別碼。

  3. 建立OIDC身份供應商的RAM角色並授權

    1. 使用Resource Access Management員登入RAM控制台,在身份管理 > 角色頁面。

    2. 單擊创建角色,在建立頁面右上方,單擊切換編輯器

    3. 在編輯器中指定具體的OIDC身份供應商。選擇可視化編輯模式,並參考如下說明,完成配置。

      說明

      更多模式,請參見建立OIDC身份供應商的RAM角色

      1. 主體中選擇身份提供商後,單擊下方編輯。

      2. 添加主體彈窗中,參考如下說明,完成配置。

        • 身份提供商类型:選擇OIDC。

        • 身份提供商:選擇之前建立的OIDC身份供應商。

  4. 授予OIDC RAM角色訪問KMS的許可權

    • 方式一:設定基於身份的策略

      返回身份管理角色列表頁,單擊目標OIDC 角色操作列的新增授权,直接綁定KMS內建系統權限原則到RAM角色。KMS內建系統權限原則,請參見Key Management Service系統權限原則參考

      說明

      同時支援自訂權限原則,具體操作請參見建立自訂權限原則

    • 方式二:設定基於資源的策略

      KMS支援基於資源的策略,即為單個密鑰和憑據設定存取權限,用於控制哪些阿里雲帳號、RAM使用者、RAM角色有許可權來管理或使用KMS密鑰、憑據。詳細介紹,請參見密鑰策略憑據策略

  5. 擷取目標 Role ARN

    1. 身份管理 > 角色頁面,單擊目標角色名稱。

    2. 進入角色詳情頁,在ARN地區可擷取OIDC Role ARN資訊。

      說明

      Role ARN是RAM角色的ARN資訊,即需要扮演的角色ID。格式為acs:ram::$accountID:role/$roleName。$accountID為阿里雲帳號ID。$roleName為RAM角色名稱。

  6. 簽發並儲存OIDC令牌(OIDC Token)檔案

    阿里雲不支援在控制台上直接通過OIDC登入,但可以通過編程方式完成OIDC SSO流程。擷取OIDC令牌涉及一個OAuth流程,常用的方法包括標準的OAuth 2.0流程,從OIDC IdP,擷取OIDC Token。例如當應用程式運行於已啟用RRSA功能的ACK叢集中時,叢集將自動為該應用Pod建立和掛載相應的服務賬戶OIDC Token檔案。

步驟2:設定環境變數或設定檔

SDK 支援通過以下兩種方式擷取訪問憑證:

  • 讀取環境變數:不同作業系統的環境變數配置方法不同,具體操作,請參見在環境變數中設定訪問憑據。

    警告

    參數名稱不可修改,否則SDK無法識別。

  • 讀取設定檔:

    • 預設設定檔為secretsmanager.properties(不可更改名稱)為了確保應用程式能夠正確載入設定檔,請將其放置在相應的配置目錄中。以下是不同程式設計語言的通用配置目錄:

      • Java:將設定檔放在src/main/resources目錄下,以便在編譯時間自動包含在類路徑中。

      • Go:通常將設定檔放在專案的根目錄或專門的config目錄中,然後通過代碼負載檔案。

      • Python:將設定檔放在專案目錄中,或在特定的config目錄中,並使用適當的方法(如os.pathpkg_resources)來載入。

    • 若使用自訂設定檔,需要在初始化用戶端時,指定設定檔地址(#customConfigFileName#)。

設定檔

  • 專屬網關

    # 訪問憑據類型
    credentials_type=oidc_role_arn
    # 角色ARN (可選,不填則使用阿里雲預設憑據鏈)
    credentials_role_arn=<role arn>
    # OIDC提供者ARN (可選,不填則使用阿里雲預設憑據鏈)
    credentials_oidc_provider_arn=<oidc provider arn>
    # OIDC令牌檔案路徑 (可選,不填則使用阿里雲預設憑據鏈)
    credentials_oidc_token_file_path=<oidc token file path>
    # KMS服務地區及執行個體ID
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共用網關

    # 訪問憑據類型
    credentials_type=oidc_role_arn
    # 角色ARN (可選,不填則使用阿里雲預設憑據鏈)
    credentials_role_arn=<role arn>
    # OIDC提供者ARN (可選,不填則使用阿里雲預設憑據鏈)
    credentials_oidc_provider_arn=<oidc provider arn>
    # OIDC令牌檔案路徑 (可選,不填則使用阿里雲預設憑據鏈)
    credentials_oidc_token_file_path=<oidc token file path>
    # 關聯的KMS服務地區
    cache_client_region_id=[{"regionId":"<regionId>"}]
  • 共用網關(VPC)

    # 訪問憑據類型
    credentials_type=oidc_role_arn
    # 角色ARN (可選,不填則使用阿里雲預設憑據鏈)
    credentials_role_arn=<role arn>
    # OIDC提供者ARN (可選,不填則使用阿里雲預設憑據鏈)
    credentials_oidc_provider_arn=<oidc provider arn>
    # OIDC令牌檔案路徑 (可選,不填則使用阿里雲預設憑據鏈)
    credentials_oidc_token_file_path=<oidc token file path>
    # 關聯的KMS服務地區及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

環境變數

參數

參數值

credentials_type

固定取值oidc_role_arn。

credentials_role_arn

OIDC身份供應商的RAM角色的資源ARN。可選,不填預設使用阿里雲預設憑據鏈

credentials_oidc_provider_arn

輸入 OIDC 身份供應商 ARN。可選,不填預設使用阿里雲預設憑據鏈

credentials_oidc_token_file_path

儲存OIDC Token的檔案相對或絕對路徑。可選,不填預設使用阿里雲預設憑據鏈

cache_client_region_id

  • 專屬網關:[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共用網關:[{"regionId":"<your region id>"}]。

    重要
    • 請將<regionId>替換為真實的地區ID<your kms instanceId>替換為真實的執行個體ID。

    • Linux系統下,使用export命令設定環境變數時,請添加逸出字元,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共用網關(VPC)時,格式為 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

AK+RamRoleArn

說明

僅 SDK 1.0 支援從預設環境變數和設定檔讀取 RamRoleArn 資訊,SDK 2.0 不支援。若需使用 SDK 2.0+(AK+RamRoleArn)模式,請聯絡技術支援人員。

步驟1:建立 RamRoleArn 並配置許可權

RAM使用者或雲產品可以通過扮演角色的方式擷取臨時許可權(STS Token),而不是直接使用長期密鑰,降低了密鑰泄露的風險。例如,在臨時的資料處理任務中,RAM使用者或雲產品臨時扮演一個具有特定RamRoleArn的角色,完成任務后角色許可權被收回,減少泄露風險。

  1. 建立使用者AK

    1. 登入RAM控制台,在身份管理 > 用户頁面,單擊目標RAM使用者名稱稱。

    2. 為RAM使用者指派系統策略 AliyunSTSAssumeRoleAccess或包含許可權操作sts:AssumeRole的自訂策略。

    3. 认证管理頁簽下的AccessKey地區,單擊建立AccessKey,並按照指引完成建立。

  2. 建立RAM角色並授權:

    1. 身份管理 > 角色頁面,單擊创建角色具體操作,請參見建立RAM角色

    2. 授予RAM角色訪問KMS的許可權。

      • 方式一:設定基於身份的策略

        單擊RAM角色操作列的新增授权,直接綁定KMS內建系統權限原則到RAM角色。KMS內建系統權限原則,請參見Key Management Service系統權限原則參考

        說明

        同時支援自訂權限原則,具體操作請參見建立自訂權限原則

      • 方式二:設定基於資源的策略

        KMS支援基於資源的策略,即為單個密鑰和憑據設定存取權限,用於控制哪些阿里雲帳號、RAM使用者、RAM角色有許可權來管理或使用KMS密鑰、憑據。詳細介紹,請參見密鑰策略憑據策略

  3. 擷取目標RAM角色的RamRoleArn。具體操作,請參見查看RAM角色

    1. 身份管理 > 角色頁面,單擊目標角色名稱。

    2. 進入角色詳情頁,在ARN地區可擷取RamRoleArn資訊。

      說明

      RamRoleArn是RAM角色的ARN資訊,即需要扮演的角色ID。格式為acs:ram::$accountID:role/$roleName。$accountID為阿里雲帳號ID。$roleName為RAM角色名稱。

步驟2:設定環境變數或設定檔

SDK 支援通過以下兩種方式擷取訪問憑證:

  • 讀取環境變數:不同作業系統的環境變數配置方法不同,具體操作,請參見在環境變數中設定訪問憑據。

    警告

    參數名稱不可修改,否則SDK無法識別。

  • 讀取設定檔:

    • 預設設定檔為secretsmanager.properties(不可更改名稱)為了確保應用程式能夠正確載入設定檔,請將其放置在相應的配置目錄中。以下是不同程式設計語言的通用配置目錄:

      • Java:將設定檔放在src/main/resources目錄下,以便在編譯時間自動包含在類路徑中。

      • Go:通常將設定檔放在專案的根目錄或專門的config目錄中,然後通過代碼負載檔案。

      • Python:將設定檔放在專案目錄中,或在特定的config目錄中,並使用適當的方法(如os.pathpkg_resources)來載入。

    • 若使用自訂設定檔,需要在初始化用戶端時,指定設定檔地址(#customConfigFileName#)。

設定檔

  • 專屬網關

    # 訪問憑據類型
    credentials_type=ram_role
    # 角色名稱
    credentials_role_session_name=#role name#
    # 資源簡短名稱
    credentials_role_arn=#role arn#
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    #訪問KMS執行個體網關時,使用如下配置
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共用網關

    # 訪問憑據類型
    credentials_type=ram_role
    # 角色名稱
    credentials_role_session_name=#role name#
    # 資源簡短名稱
    credentials_role_arn=#role arn#
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 關聯的KMS服務地區
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 共用網關(VPC)

    # 訪問憑據類型
    credentials_type=ram_role
    # 角色名稱
    credentials_role_session_name=#role name#
    # 資源簡短名稱
    credentials_role_arn=#role arn#
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 關聯的KMS服務地區及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

環境變數

參數

參數值

credentials_type

ram_role或sts

credentials_role_session_name

RAM角色的名稱。

credentials_role_arn

RAM角色的資源ARN。

credentials_access_key_id

AccessKey ID。

credentials_access_secret

AccessKey Secret。

cache_client_region_id

  • 專屬網關:[{"regionId":"<regionId>","endpoint":"<your kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共用網關:[{"regionId":"<your region id>"}]。

    重要
    • 請將<regionId>替換為真實的地區ID<your kms instanceId>替換為真實的執行個體ID。

    • Linux系統下,使用export命令設定環境變數時,請添加逸出字元,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共用網關(VPC)時,格式為 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

ClientKey(不推薦)

說明

僅 SDK 1.0 支援 ClientKey 憑證,SDK 2.0 不支援。

共用網關

步驟1:建立 ClientKey

  1. 登入Key Management Service控制台,在頂部功能表列選擇地區後,在左側導覽列單擊应用接入 > 多云接入(原接入点)

  2. 建立網路規則(非必須)。

    說明

    如果您不需要基於來源IP限制訪問,則不需要設定網路規則。但為了更高的安全性,通常建議您合理設定。

    1. 單擊网络规则頁簽,然後單擊创建网络规则

    2. 创建网络规则面板,网络类型選擇Public,填寫允许访问的源IP地址後,單擊確定

  3. 建立權限原則。

    1. 單擊权限策略,然後單擊创建权限策略

    2. 创建权限策略面板,按照下方提示完成共用網關配置後,單擊確定

      1. 作用域KMS共享网关

      2. 允许访问的资源:勾選你需要訪問的憑據

      3. 网络控制规则(非必須):勾選步驟二建立網路規則。

  4. 建立應用存取點AAP。

    1. 單擊应用接入頁簽,然後單擊创建应用接入点,。

    2. 创建应用接入点面板,创建模式選擇标准创建,然後按照下方提示完成各項配置。

      配置項

      說明

      认证方式

      選擇ClientKey

      Client Key加密口令

      設定8~64位包含數字、英文大小寫、特殊字元~!@#$%^&*?_-的字串

      有效期

      重要

      推薦設定為1年,以降低ClientKey被泄露的風險。請務必在到期前更換,以免無法正常訪問KMS。具體操作,請參見更換ClientKey

      权限策略

      選擇您步驟三建立的權限原則。

    3. 單擊確認,瀏覽器會自動下載ClientKey。ClientKey包含以下內容:

      • 应用身份凭证内容ClientKeyContent):檔案名稱預設為clientKey_****.json

      • 憑證口令(ClientKeyPassword):檔案名稱預設為clientKey_****_Password.txt

步驟2:設定環境變數或設定檔

  • 讀取環境變數:不同作業系統的環境變數配置方法不同,具體操作,請參見在環境變數中設定訪問憑據。

    警告

    參數名稱不可修改,否則SDK無法識別。

  • 讀取設定檔:

    • 預設設定檔為secretsmanager.properties(不可更改名稱)為了確保應用程式能夠正確載入設定檔,請將其放置在相應的配置目錄中。以下是不同程式設計語言的通用配置目錄:

      • Java:將設定檔放在src/main/resources目錄下,以便在編譯時間自動包含在類路徑中。

      • Go:通常將設定檔放在專案的根目錄或專門的config目錄中,然後通過代碼負載檔案。

      • Python:將設定檔放在專案目錄中,或在特定的config目錄中,並使用適當的方法(如os.pathpkg_resources)來載入。

    • 若使用自訂設定檔,需要在初始化用戶端時,指定設定檔地址(#customConfigFileName#)。

設定檔

  • 方案一:配置ClientKey憑證口令(clientKey_****_Password.txt)檔案的路徑,由SDK讀取其中的內容。

    # 訪問憑據類型
    credentials_type=client_key
    
    # 存放憑證口令(ClientKeyPassword)的檔案的絕對路徑或相對路徑,即為clientKey_****_Password.txt的存放位置
    client_key_password_from_file_path=#your client key private key password file path#
    
    # 存放應用身份憑證內容(ClientKeyContent)檔案的絕對路徑或相對路徑。即clientKey_****.json的存放位置。
    client_key_private_key_path=#your client key private key file path#
    
    # 關聯的KMS服務地區
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 方案二:直接配置ClientKey憑證口令(ClientKeyPassword)內容

    警告

    請先將憑證口令(ClientKeyPassword)即clientKey_****_Password.txt中的內容,存放至自訂環境變數(如clientKeyPassword_content)中。

    # 訪問憑據類型
    credentials_type=client_key
    
    # 存放憑證口令(ClientKeyPassword)內容的環境變數名稱,如 clientKeyPassword_content
    client_key_password_from_env_variable=#your client key private key password environment variable name#
    
    # Client Key私密金鑰檔案路徑
    client_key_private_key_path=#your client key private key file path#
    
    # 關聯的KMS服務地區
    cache_client_region_id=[{"regionId":"#regionId#"}]

環境變數

  • 方案一:配置ClientKey憑證口令(clientKey_****_Password.txt)檔案的路徑,由SDK讀取其中的內容。

    參數

    參數值

    credentials_type

    固定取值client_key。

    client_key_password_from_file_path

    存放憑證口令(ClientKeyPassword)clientKey_****_Password.txt檔案的絕對路徑或相對路徑。

    client_key_private_key_path

    存放應用身份憑證內容(ClientKeyContent)clientKey_****.json檔案的絕對路徑或相對路徑名。

    cache_client_region_id

    格式為[{"regionId":"<your region id>"}],請將<your region id>替換為您真實的地區ID。

    重要

    Linux系統下,使用export命令設定環境變數時,請添加逸出字元,即[{\"regionId\":\"<your region id>\"}]

  • 方案二:直接配置ClientKey憑證口令(ClientKeyPassword)內容

    警告

    請先將憑證口令(ClientKeyPassword)clientKey_****_Password.txt中的內容,存放至自訂環境變數(如clientKeyPassword_content)中。

    參數名稱

    參數值

    credentials_type

    固定取值client_key。

    client_key_password_from_env_variable

    存放憑證口令(ClientKeyPassword)clientKey_****_Password.txt中內容的環境變數名稱,如clientKeyPassword_content

    client_key_private_key_path

    存放應用身份憑證內容(ClientKeyContent)clientKey_****.json檔案的絕對路徑或相對路徑名。

    cache_client_region_id

    格式為[{"regionId":"<your region id>"}],

    重要
    • 請將<your region id>替換為真實的地區ID。

    • Linux系統下,使用export命令設定環境變數時,請添加逸出字元,即[{\"regionId\":\"<your region id>\"}]

專屬網關

步驟1:建立 ClientKey

ClientKey支援快速建立和標準建立兩種方式。關於ClientKey的詳細介紹,請參見應用存取點概述建立應用存取點

  • 方式一:快速建立

    便捷高效適合於快速測試和開發情境,該方式建立的訪問憑證可以訪問KMS執行個體的全部資源。

    1. 登入Key Management Service控制台,在頂部功能表列選擇地區後,在左側導覽列單擊应用接入 > 多云接入(原接入点)

    2. 应用接入頁簽,單擊创建应用接入点,在创建应用接入点面板完成各項配置。

      配置項

      說明

      创建模式

      選擇快速创建

      作用域(KMS实例)

      選擇應用要訪問的KMS執行個體。

      应用接入点名称

      自訂應用存取點的名稱。

      认证方式

      預設為ClientKey,不支援修改。

      默认权限策略

      預設為key/*secret/*,不支援修改。即應用可以訪問指定KMS執行個體中的所有密鑰和憑據。

    3. 單擊確認,瀏覽器會自動下載ClientKey。ClientKey包含以下內容:

      • 应用身份凭证内容ClientKeyContent):檔案名稱預設為clientKey_****.json

      • 憑證口令(ClientKeyPassword):檔案名稱預設為clientKey_****_Password.txt

  • 方式二:標準建立

    若希望對資源設定更精細化的存取權限,建議使用標準建立。

    1. 請參考建立應用存取點中的標準建立方式,建立用於訪問專屬網關的ClientKey。關鍵配置說明如下:

      1. 配置網路規則時,網路類型選擇Private

      2. 配置許可權規則範圍時,請選擇對應的KMS執行個體ID

    2. 建立完成後,瀏覽器會自動下載ClientKey。ClientKey包含以下內容:

      • 应用身份凭证内容ClientKeyContent):檔案名稱預設為clientKey_****.json

      • 憑證口令(ClientKeyPassword):檔案名稱預設為clientKey_****_Password.txt

步驟2:配置環境變數或設定檔

  • 讀取環境變數:不同作業系統的環境變數配置方法不同,具體操作,請參見在環境變數中設定訪問憑據。

    警告

    參數名稱不可修改,否則SDK無法識別。

  • 讀取設定檔:

    • 預設設定檔為secretsmanager.properties(不可更改名稱)為了確保應用程式能夠正確載入設定檔,請將其放置在相應的配置目錄中。以下是不同程式設計語言的通用配置目錄:

      • Java:將設定檔放在src/main/resources目錄下,以便在編譯時間自動包含在類路徑中。

      • Go:通常將設定檔放在專案的根目錄或專門的config目錄中,然後通過代碼負載檔案。

      • Python:將設定檔放在專案目錄中,或在特定的config目錄中,並使用適當的方法(如os.pathpkg_resources)來載入。

    • 若使用自訂設定檔,需要在初始化用戶端時,指定設定檔地址(#customConfigFileName#)。

設定檔

  • 方案一:配置ClientKey憑證口令(clientKey_****_Password.txt)檔案的路徑,由SDK讀取其中的內容。

    cache_client_dkms_config_info=[{"regionId":"<your dkms regionId>","endpoint":"<your dkms endpoint>","passwordFromFilePath":"< your password file path >","clientKeyFile":"<your Client Key file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]
  • 方案二:直接配置ClientKey憑證口令(ClientKeyPassword)內容

    警告

    請先將憑證口令(ClientKeyPassword)即clientKey_****_Password.txt中的內容,存放至自訂環境變數(如clientKeyPassword_content)中。

    cache_client_dkms_config_info=[{"regionId":"<your dkms regionId>","endpoint":"<your dkms endpoint>","passwordFromEnvVariable":"<YOUR_PASSWORD_ENV_VARIABLE>","clientKeyFile":"<your ClientKey file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]

環境變數

  • 方案一:配置ClientKey憑證口令(clientKey_****_Password.txt)檔案的路徑,由SDK讀取其中的內容。

    參數

    參數值

    cache_client_dkms_config_info

    參數值格式為:[{"regionId":"<your dkms regionId>","endpoint":"<your dkms endpoint>","passwordFromFilePath":"< your password file path >","clientKeyFile":"<your Client Key file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]

  • 方案二:直接配置ClientKey憑證口令(ClientKeyPassword)內容

    警告

    請先將憑證口令(ClientKeyPassword)即clientKey_****_Password.txt中的內容,存放至自訂環境變數(如clientKeyPassword_content)中。

    參數

    參數格式

    cache_client_dkms_config_info

    [{"regionId":"<your dkms regionId>","endpoint":"<your dkms endpoint>","passwordFromEnvVariable":"<YOUR_PASSWORD_ENV_VARIABLE>","clientKeyFile":"<your ClientKey file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]

cache_client_dkms_config_info參數說明

配置項

配置項說明

regionId

KMS執行個體所在地區ID,具體的地區ID,請參見支援的地區

endpoint

KMS執行個體的網域名稱地址,格式為{執行個體ID}.kms.aliyuncs.com

clientKeyFile

存放應用身份憑證內容(ClientKeyContent)clientKey_****.json檔案的絕對路徑或相對路徑名。

passwordFromFilePath

存放憑證口令(ClientKeyPassword)即clientKey_****_Password.txt檔案的絕對路徑或相對路徑。

passwordFromEnvVariable

存放憑證口令(ClientKeyPassword)clientKey_****_Password.txt中內容的環境變數名稱,如clientKeyPassword_content

ignoreSslCerts

是否忽略KMS執行個體SSL認證的有效性檢查。KMS執行個體內建SSL認證,使用SSL/TLS協議用於身分識別驗證和加密通訊。取值:

  • true:表示忽略,不檢查KMS執行個體SSL認證的有效性。

    說明

    取值為true時,無需配置caFilePath

  • false:表示驗證,檢查KMS執行個體SSL認證的有效性。

caFilePath

KMS執行個體CA認證檔案的絕對路徑或相對路徑。

說明

KMS執行個體CA認證,用於檢查KMS執行個體SSL認證的有效性,如何擷取CA認證,請參見擷取CA認證

擷取憑據

本文樣本均以 SDK 2.0 為例。SDK 1.0 樣本,請前往 SDK 1.0 原始碼庫

說明

以下程式碼範例中的 #secretName##regionId##accessKeyId##accessKeySecret##customConfigFileName# 等為預留位置,使用時請替換為實際值。<your kms instanceId> 請替換為實際的 KMS 執行個體 ID。

Java

  • 使用預設配置:此方式SDK會自動讀取secretsmanager.properties檔案或環境變數中的憑證資訊。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.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();
            }
        }
    }
  • 使用自訂設定檔:此方式適用於設定檔未使用預設檔案名稱或自訂檔案路徑的情境,需指定設定檔的路徑(#customConfigFileName#)。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.SecretInfo;
    import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
    
    public class CacheClientCustomConfigFileSample {
    
        public static void main(String[] args) {
            try {
                SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                        BaseSecretManagerClientBuilder.standard().withCustomConfigFile("#customConfigFileName#").build()).build();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
                System.out.println(secretInfo);
            } catch (CacheSecretException e) {
                System.out.println("CacheSecretException:" + e.getMessage());
            }
        }
    }
  • 寫入程式碼方式(指定 AccessKey、AccessSecret、RegionId 等):無需將 AK 寫入設定檔或預設環境變數,初始化用戶端時傳入對應的 AK 和訪問地區資訊即可。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.RegionInfo;
    import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.utils.CredentialsProviderUtils;
    
    public class CacheClientWithCaCertificateSample {
        public static void main(String[] args) {
            try {
                // 建立包含憑證路徑的 RegionInfo
                RegionInfo regionInfo = new RegionInfo();
                regionInfo.setRegionId("#regionId#");
                regionInfo.setEndpoint("<your kms instanceId>.cryptoservice.kms.aliyuncs.com"); //專屬網關訪問地址,若訪問共用網關,可不設定。 
                SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                        BaseSecretManagerClientBuilder.standard()
                                .withCredentialsProvider(CredentialsProviderUtils.withAccessKey(
                                        System.getenv("#accessKeyId#"), 
                                        System.getenv("#accessKeySecret#")))
                                .addRegion(regionInfo) 
                                .build())
                        .build();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
            } catch (CacheSecretException e) {
                e.printStackTrace();
            }
        }
    }
  • 使用阿里雲預設憑據鏈:預設憑據鏈是一種兜底策略,按照內建的憑據尋找順序逐層向下尋找,直至擷取憑據資訊。若所有情況均未成功則表示鑒權失敗,無法擷取憑據。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.SecretInfo;
    import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
    
    public class CacheClientDefaultCredentialChainSample {
    
        public static void main(String[] args) {
            try {
                SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                        BaseSecretManagerClientBuilder.standard().withRegion("#regionId#").build()).build();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
                System.out.println(secretInfo);
            } catch (CacheSecretException e) {
                e.printStackTrace();
            }
        }
    }
說明

更多樣本,請參見憑據用戶端SDK樣本

Python

  • 使用預設配置:此方式SDK會自動讀取secretsmanager.properties檔案或環境變數中的憑證資訊。

    from alibabacloud_secretsmanager_client_v2.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__)
  • 使用自訂設定檔:此方式適用於設定檔未使用預設檔案名稱或自訂檔案路徑的情境,需指定設定檔的路徑(#customConfigFileName#)。

    from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import DefaultSecretManagerClientBuilder
    
    if __name__ == '__main__':
        secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
            DefaultSecretManagerClientBuilder.standard().with_custom_config_file("#customConfigFileName#").build()).build()
        secret_info = secret_cache_client.get_secret_info("#secretName#")
        print(secret_info.__dict__)
  • 寫入程式碼方式(指定 AccessKey、AccessSecret、RegionId 等):無需將 AK 寫入設定檔或預設環境變數,初始化用戶端時傳入對應的 AK 和訪問地區資訊即可。

    import os
    
    from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import \
        DefaultSecretManagerClientBuilder
    from alibabacloud_secretsmanager_client_v2.model.region_info import RegionInfo
    
    if __name__ == '__main__':
        # 建立包含 CA 憑證路徑的 RegionInfo
        region_info = RegionInfo(
            region_id="#regionId#",
            endpoint="#kmsInstanceEndpoint#",  # 專屬網關訪問地址,若訪問共用網關,可不設定。 
        )
        secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
            DefaultSecretManagerClientBuilder.standard()
            .with_access_key(
                os.getenv("#accessKeyId#"),
                os.getenv("#accessKeySecret#"))
            .add_region_info(region_info)  
            .build()).build()
        # ... 使用 client
  • 使用阿里雲預設憑據鏈:預設憑據鏈是一種兜底策略,按照內建的憑據尋找順序逐層向下尋找,直至擷取憑據資訊。若所有情況均未成功則表示鑒權失敗,無法擷取憑據。

    from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import DefaultSecretManagerClientBuilder
    
    if __name__ == '__main__':
        secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
            DefaultSecretManagerClientBuilder.standard().with_region("#regionId#").build()).build()
        secret_info = secret_cache_client.get_secret_info("#secretName#")
        print(secret_info.__dict__)
說明

更多樣本,請參見憑據用戶端SDK樣本

Go

  • 使用預設配置:此方式SDK會自動讀取secretsmanager.properties檔案或環境變數中的憑證資訊。

    package main
    
    import "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/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)
        }
    }
  • 使用自訂設定檔:此方式適用於設定檔未使用預設檔案名稱或自訂檔案路徑的情境,需指定設定檔的路徑(#customConfigFileName#)。

    package main
    
    import (
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
    )
    
    func main() {
        client, err := sdk.NewSecretCacheClientBuilder(
                service.NewDefaultSecretManagerClientBuilder().Standard().WithCustomConfigFile("#customConfigFileName#").Build()).Build()
        if err != nil {
            // Handle exceptions
            panic(err)
        }
        secretInfo, err := client.GetSecretInfo("#secretName#")
        if err != nil {
            // Handle exceptions
            panic(err)
        }
    }
  • 寫入程式碼方式(指定 AccessKey、AccessSecret、RegionId 等):無需將 AK 寫入設定檔或預設環境變數,初始化用戶端時傳入對應的 AK 和訪問地區資訊即可。

    package main
    import (
      "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
      "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/models"
      "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
      "os"
    )
    
    func main() {
      regionInfo := &models.RegionInfo{
        RegionId:   "#regionId#",
        Endpoint:   "<kmsInstanceId>.cryptoservice.kms.aliyuncs.com", //專屬網關訪問地址,若訪問共用網關,可不設定。
      }
    
      client, err := sdk.NewSecretCacheClientBuilder(
        service.NewDefaultSecretManagerClientBuilder().
          Standard().
          WithAccessKey(os.Getenv("#accessKeyId#"), os.Getenv("#accessKeySecret#")).
          AddRegionInfo(regionInfo).
          Build()).Build()
      if err != nil {
        // Handle exceptions
        panic(err)
      }
      secretInfo, err := client.GetSecretInfo("#secretName#")
      if err != nil {
        // Handle exceptions
        panic(err)
      }
    }
  • 使用阿里雲預設憑據鏈:預設憑據鏈是一種兜底策略,按照內建的憑據尋找順序逐層向下尋找,直至擷取憑據資訊。若所有情況均未成功則表示鑒權失敗,無法擷取憑據。

    package main
    
    import (
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
    )
    
    func main() {
        client, err := sdk.NewSecretCacheClientBuilder(
                service.NewDefaultSecretManagerClientBuilder().Standard().WithRegion("#regionId#").Build()).Build()
        if err != nil {
            // Handle exceptions
            panic(err)
        }
        secretInfo, err := client.GetSecretInfo("#secretName#")
        if err != nil {
            // Handle exceptions
            panic(err)
        }
    }
說明

更多樣本,請參見憑據用戶端SDK樣本

Node.js

  • 使用預設配置:此方式SDK會自動讀取secretsmanager.properties檔案或環境變數中的憑證資訊。

    import { SecretCacheClientBuilder } from 'alibabacloud-secretsmanager-client-v2';
    
    async function example() {
      try {
        // 通過環境變數或預設配置構建用戶端
        const client = await SecretCacheClientBuilder.newClient();
        const secretInfo = await client.getSecretInfo('#secretName#');
        console.log(secretInfo);
      } catch (error) {
        console.error('Error:', error);
      }
    }
    
    example();
  • 使用自訂設定檔:此方式適用於設定檔未使用預設檔案名稱或自訂檔案路徑的情境,需指定設定檔的路徑(#customConfigFileName#)。

    import {
      SecretCacheClientBuilder,
      BaseSecretManagerClientBuilder,
      CredentialsProviderUtils
    } from 'alibabacloud-secretsmanager-client-v2';
    
    async function example() {
      try {
        const client = await SecretCacheClientBuilder.newCacheClientBuilder(
          BaseSecretManagerClientBuilder.standard().withCustomConfigFile('#customConfigFileName#').build()
        ).build();
    
        const secretInfo = await client.getSecretInfo('#secretName#');
        console.log(secretInfo);
      } catch (error) {
        console.error('Error:', error);
      }
    }
    
    example();
  • 寫入程式碼方式(指定 AccessKey、AccessSecret、RegionId 等):無需將 AK 寫入設定檔或預設環境變數,初始化用戶端時傳入對應的 AK 和訪問地區資訊即可。

    import {
      SecretCacheClientBuilder,
      BaseSecretManagerClientBuilder,
      CredentialsProviderUtils,
      RegionInfo
    } from 'alibabacloud-secretsmanager-client-v2';
    
    async function example() {
      try {
        const regionInfo = new RegionInfo();
        regionInfo.setRegionId('#regionId#');
        regionInfo.setEndpoint('<kmsInstanceId>.cryptoservice.kms.aliyuncs.com'); // 專屬網關訪問地址,若訪問共用網關,可不設定。
    
        const client = await SecretCacheClientBuilder.newCacheClientBuilder(
          BaseSecretManagerClientBuilder.standard()
            .withCredentialsProvider(
              CredentialsProviderUtils.withAccessKey(
                process.env['#accessKeyId#'],
                process.env['#accessKeySecret#']
              )
            )
            .addRegionInfo(regionInfo) // 使用帶 CA 憑證路徑的 RegionInfo
            .build()
        ).build();
    
        const secretInfo = await client.getSecretInfo('#secretName#');
        console.log(secretInfo);
      } catch (error) {
        console.error('Error:', error);
      }
    }
    
    example();
  • 使用阿里雲預設憑據鏈:預設憑據鏈是一種兜底策略,按照內建的憑據尋找順序逐層向下尋找,直至擷取憑據資訊。若所有情況均未成功則表示鑒權失敗,無法擷取憑據。

    import {
      SecretCacheClientBuilder,
      BaseSecretManagerClientBuilder,
      CredentialsProviderUtils
    } from 'alibabacloud-secretsmanager-client-v2';
    
    async function example() {
      try {
        const client = await SecretCacheClientBuilder.newCacheClientBuilder(
          BaseSecretManagerClientBuilder.standard()
            .withCredentialsProvider(CredentialsProviderUtils.withDefaultCredential())
            .withRegion('#regionId#')
            .build()
        ).build();
    
        const secretInfo = await client.getSecretInfo('#secretName#');
        console.log(secretInfo);
      } catch (error) {
        console.error('Error:', error);
      }
    }
    
    example();
說明

常見問題

  1. 出現 "cannot find the built-in ca certificate for region[$regionId], please provide the caFilePath parameter." 錯誤怎麼辦?

    • 問題原因:SDK 中該地區內建的 CA 憑證不存在。

    • 解決方案:

      • 請更新 SDK 到最新V2版本。

      • 如果已更新到最新版本仍然報此錯誤,可以下載最新的CA認證(CA認證可在Key Management Service实例管理> 執行個體詳情頁面下載),並傳入CA憑證路徑參數。具體方式如下:

        通過環境變數傳遞 CA 憑證路徑

        在環境變數配置 cache_client_region_id 中添加 CA 憑證路徑參數:

        # 關聯的KMS服務地區,包含CA憑證路徑和執行個體地址
        cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<kmsInstanceId>.cryptoservice.kms.aliyuncs.com","caFilePath":"<ca認證檔案路徑>"}]

        通過設定檔傳遞 CA 憑證路徑

        secretsmanager.properties 或自訂設定檔中添加 caFilePath 參數:

        # 關聯的KMS服務地區,包含CA憑證路徑和執行個體地址
        cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<kmsInstanceId>.cryptoservice.kms.aliyuncs.com","caFilePath":"<ca認證檔案路徑>"}]
        

        寫入程式碼方式傳遞 CA 憑證路徑

        import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
        import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
        import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
        import com.aliyuncs.kms.secretsmanager.client.v2.model.RegionInfo;
        import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
        import com.aliyuncs.kms.secretsmanager.client.v2.utils.CredentialsProviderUtils;
        
        public class CacheClientWithCaCertificateSample {
            public static void main(String[] args) {
                try {
                    // 建立包含 CA 憑證路徑的 RegionInfo
                    RegionInfo regionInfo = new RegionInfo();
                    regionInfo.setRegionId("#regionId#");
                    regionInfo.setEndpoint("#kmsInstanceEndpoint#"); // 指定 KMS 執行個體地址
                    regionInfo.setCaFilePath("#caFilePath#"); // 指定 CA 憑證檔案路徑
                    
                    SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                            BaseSecretManagerClientBuilder.standard()
                                    .withCredentialsProvider(CredentialsProviderUtils.withAccessKey(
                                            System.getenv("#accessKeyId#"), 
                                            System.getenv("#accessKeySecret#")))
                                    .addRegion(regionInfo) // 使用帶 CA 憑證路徑的 RegionInfo
                                    .build())
                            .build();
                    // ... 使用 client
                } catch (CacheSecretException e) {
                    e.printStackTrace();
                }
            }
        }
        import os
        
        from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
        from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import \
            DefaultSecretManagerClientBuilder
        from alibabacloud_secretsmanager_client_v2.model.region_info import RegionInfo
        
        if __name__ == '__main__':
            # 建立包含 CA 憑證路徑的 RegionInfo
            region_info = RegionInfo(
                region_id="#regionId#",
                endpoint="#kmsInstanceEndpoint#",  # 指定 KMS 執行個體地址
                ca_file_path="#caFilePath#"  # 指定 CA 憑證檔案路徑
            )
            secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
                DefaultSecretManagerClientBuilder.standard()
                .with_access_key(
                    os.getenv("#accessKeyId#"),
                    os.getenv("#accessKeySecret#"))
                .add_region_info(region_info)  # 使用帶 CA 憑證路徑的 RegionInfo
                .build()).build()
            # ... 使用 client
        package main
        import (
          "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
          "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/models"
          "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
          "os"
        )
        
        func main() {
          // 建立包含 CA 憑證路徑的 RegionInfo
          regionInfo := &models.RegionInfo{
            RegionId:   "#regionId#",
            Endpoint:   "#kmsInstanceEndpoint#", // 指定 KMS 執行個體地址
            CaFilePath: "#caFilePath#",          // 指定 CA 憑證檔案路徑
          }
        
          client, err := sdk.NewSecretCacheClientBuilder(
            service.NewDefaultSecretManagerClientBuilder().
              Standard().
              WithAccessKey(os.Getenv("#accessKeyId#"), os.Getenv("#accessKeySecret#")).
              AddRegionInfo(regionInfo). // 使用帶 CA 憑證路徑的 RegionInfo
              Build()).Build()
          if err != nil {
            // Handle exceptions
            panic(err)
          }
          secretInfo, err := client.GetSecretInfo("#secretName#")
          if err != nil {
            // Handle exceptions
            panic(err)
          }
        }
        import {
          SecretCacheClientBuilder,
          BaseSecretManagerClientBuilder,
          CredentialsProviderUtils,
          RegionInfo
        } from 'alibabacloud-secretsmanager-client-v2';
        
        async function example() {
          try {
            // 建立包含 CA 憑證路徑的 RegionInfo
            const regionInfo = new RegionInfo();
            regionInfo.setRegionId('#regionId#');
            regionInfo.setEndpoint('#kmsInstanceEndpoint#'); // 專屬網關訪問地址,若訪問共用網關,可不設定。
            regionInfo.setCaFilePath('#caFilePath#'); // 指定 CA 憑證檔案路徑
        
            const client = await SecretCacheClientBuilder.newCacheClientBuilder(
              BaseSecretManagerClientBuilder.standard()
                .withCredentialsProvider(
                  CredentialsProviderUtils.withAccessKey(
                    process.env['#accessKeyId#'],
                    process.env['#accessKeySecret#']
                  )
                )
                .addRegionInfo(regionInfo) // 使用帶 CA 憑證路徑的 RegionInfo
                .build()
            ).build();
        
            const secretInfo = await client.getSecretInfo('#secretName#');
            console.log(secretInfo);
          } catch (error) {
            console.error('Error:', error);
          }
        }
        
        example();
  2. 出現 “ env/config credentials type[client_key] is illegal”錯誤怎麼辦?

    • 問題原因:SDK 2.0 不支援 Client Key 鑒權方式。

    • 解決方案:

      • 參考配置鑒權訪問憑證,更換憑證方式為 AK、ECS RAM Role 或 OIDC Role Arn。

      • 切換至 SDK 1.0(不推薦)。