全部產品
Search
文件中心

Key Management Service:憑據管理快速入門

更新時間:Jul 22, 2025

您可以使用KMS建立憑據,在應用程式中整合您的憑據資訊,實現對敏感性資料的統一管理。本文介紹如何建立憑據以及如何在應用程式中整合憑據資訊。

背景資訊

KMS提供憑據的建立、更新、刪除等全生命週期的管理服務,應用程式通過SDK來擷取憑據,解決您在應用程式中寫入程式碼憑據帶來的敏感性資料泄露問題。

KMS支援託管通用憑據、RAM憑據、資料庫憑據和ECS憑據。關於憑據的更多資訊,請參見憑據管理概述

注意事項

KMS使用您指定的密鑰來加密憑據值,該密鑰和憑據需要屬於同一個KMS執行個體,且密鑰必須為對稱金鑰。關於KMS支援哪些對稱金鑰,請參見密鑰管理類型

前提條件

步驟一:建立憑據

建立憑據時支援設定輪轉資訊,KMS將定期為您更新憑據值,保護您的憑據安全。

  1. 登入Key Management Service控制台,在頂部功能表列選擇地區後,在左側導覽列單擊资源 > 凭据管理

  2. 凭据管理頁面單擊您要建立的憑據頁簽,選擇实例ID後,單擊创建凭据,完成各項配置後單擊確定

    通用憑據

    說明

    通用憑據不支援在建立時設定輪轉資訊,如果您需要輪轉通用憑據,請參見管理及使用通用憑據

    配置項

    說明

    凭据名称

    自訂的憑據名稱。憑據名稱在當前地區內唯一。

    设置凭据值

    根據您要託管的敏感性資料類型,選擇憑據鍵/值純文字

    長度不超過30720位元組(30KB)。

    初始版本号

    憑據的初始版本號碼。預設為v1,也支援自訂版本號碼。

    加密主密钥

    選擇用於加密憑據值的密鑰。

    重要
    • 密鑰和憑據需要屬於同一個KMS執行個體,且密鑰必須為對稱金鑰。關於KMS支援哪些對稱金鑰,請參見密鑰管理類型和密鑰規格

    • 如果是RAM使用者、RAM角色,需要具備使用加密主要金鑰執行GenerateDataKey操作的許可權。

    標籤

    憑據的標籤,方便您對憑據進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

    說明
    • 標籤鍵和標籤值的格式:最多支援128個字元,可以包含英文大小寫字母、數字、正斜線(/)、反斜線(\)、底線(_)、短劃線(-)、半形句號(.)、加號(+)、等號(=)、半形冒號(:)、字元at(@)、空格。

    • 標籤鍵不能以aliyun或acs:開頭。

    • 每個憑據最多可以設定20個標籤索引值對。

    描述信息

    憑據的描述資訊。

    高级设置 > 策略配置

    憑據的策略配置。詳細介紹,請參見憑據策略概述

    您可以先選擇預設策略,建立憑據後根據業務需要再修改策略。

    RAM憑據

    配置項

    說明

    选择RAM用户

    選擇您要託管憑據的RAM使用者,所選RAM使用者至少需要有一個AccessKey。若沒有,請先建立AccessKey,詳細步驟請參考建立AccessKey

    憑據名稱根據RAM使用者的名稱自動產生,憑據名稱在當前地區內是唯一。

    设置凭据值

    輸入對應的AccessKey Secret。

    長度不超過30720位元組(30KB)。

    加密主密钥

    選擇用於加密憑據值的密鑰。

    重要
    • 密鑰和憑據需要屬於同一個KMS執行個體,且密鑰必須為對稱金鑰。關於KMS支援哪些對稱金鑰,請參見密鑰管理類型和密鑰規格

    • 如果是RAM使用者、RAM角色,需要具備使用加密主要金鑰執行GenerateDataKey操作的許可權。

    標籤

    憑據的標籤,方便您對憑據進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

    說明
    • 標籤鍵和標籤值的格式:最多支援128個字元,可以包含英文大小寫字母、數字、正斜線(/)、反斜線(\)、底線(_)、短劃線(-)、半形句號(.)、加號(+)、等號(=)、半形冒號(:)、字元at(@)、空格。

    • 標籤鍵不能以aliyun或acs:開頭。

    • 每個憑據最多可以設定20個標籤索引值對。

    自动轮转

    選擇開啟或關閉憑據的周期性自動輪轉。

    天数(7天~365天)

    僅當开启自动轮转需要設定。

    表示輪轉的周期,設定後KMS將定期為您更新憑據值。

    描述信息

    憑據的描述資訊。

    高级设置 > 策略配置

    憑據的策略配置。詳細介紹,請參見憑據策略概述

    您可以先選擇預設策略,建立憑據後根據業務需要再修改策略。

    資料庫憑據(RDS)

    僅支援選擇创建单个凭据

    配置項

    說明

    数据库类型

    選擇RDS凭据

    凭据名称

    自訂的憑據名稱。憑據名稱在當前地區內唯一。

    RDS实例

    選擇阿里雲帳號下已有的RDS執行個體。

    账号托管

    • 双账号托管(推薦):適用於程式化訪問資料庫情境。託管兩個相同許可權的帳號,保證口令重設切換的瞬間,程式訪問資料庫不被中斷。

      • 單擊新建账号,配置帳號名、選擇資料庫並指定許可權。

        說明

        一鍵建立和授權不會立即為您配置新的帳號,而是在您審核確認憑據資訊之後進行配置。

      • 單擊导入已有账号,選擇使用者名稱、配置口令。

        說明

        建議您將口令配置為建立RDS執行個體使用者帳號時對應的密碼。如果匯入的帳號和口令不匹配,您可以在憑據首次輪轉之後,擷取正確的帳號和口令。

    • 单账号托管:適用於高許可權帳號或者人工營運帳號託管情境。口令重設切換的瞬間,憑據的目前的版本可能暫時無法使用。

      • 單擊新建账号,配置帳號名、選擇帳號類型。

        您可以選擇普通账号高权限账号兩種帳號類型。當您選擇普通账号時,還需選擇資料庫並指定許可權。

      • 單擊导入已有账号頁簽,選擇使用者名稱、配置口令。

    加密主密钥

    選擇用於加密憑據值的密鑰。

    重要
    • 密鑰和憑據需要屬於同一個KMS執行個體,且密鑰必須為對稱金鑰。關於KMS支援哪些對稱金鑰,請參見密鑰管理類型和密鑰規格

    • 如果是RAM使用者、RAM角色,需要具備使用加密主要金鑰執行GenerateDataKey操作的許可權。

    標籤

    憑據的標籤,方便您對憑據進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

    說明
    • 標籤鍵和標籤值的格式:最多支援128個字元,可以包含英文大小寫字母、數字、正斜線(/)、反斜線(\)、底線(_)、短劃線(-)、半形句號(.)、加號(+)、等號(=)、半形冒號(:)、字元at(@)、空格。

    • 標籤鍵不能以aliyun或acs:開頭。

    • 每個憑據最多可以設定20個標籤索引值對。

    自动轮转

    選擇開啟或關閉憑據的周期性自動輪轉。

    轮转周期

    僅當开启自动轮转時需要設定。支援設定為6小時~365天。

    表示輪轉的周期,設定後KMS將定期為您更新憑據值。

    描述信息

    憑據的描述資訊。

    高级设置 > 策略配置

    憑據的策略配置。詳細介紹,請參見憑據策略概述

    您可以先選擇預設策略,建立憑據後根據業務需要再修改策略。

    資料庫憑據PolarDB

    僅支援選擇创建单个凭据,並且僅支援PolarDB MySQL/PgSQL新建账号双账号托管,不支援导入已有账号、以及单账号托管

    配置項

    說明

    数据库类型

    選擇PolarDB凭据

    凭据名称

    自訂的憑據名稱,憑據名稱在當前地區內唯一。

    PolarDB实例

    選擇阿里雲帳號下已有的PolarDB執行個體。

    账号托管

    双账号托管:適用於程式化訪問資料庫情境。建立兩個相同許可權的帳號,保證口令重設切換的瞬間,程式訪問資料庫不被中斷。

    新建账号:配置帳號名和許可權,帳號類型只支援普通帳號。MySQL憑據建立時候需要選擇資料庫+許可權

    說明
    • 一鍵建立和授權不會立即為您配置新的帳號,而是在您審核確認憑據資訊之後進行配置。

    • 帳號名必須唯一,如果帳號名已經存在,就不能託管到憑據中

    加密主密钥

    選擇用於加密憑據值的密鑰。

    重要
    • 密鑰和憑據需要屬於同一個KMS執行個體,且密鑰必須為對稱金鑰。關於KMS支援哪些對稱金鑰,請參見密鑰管理類型和密鑰規格

    • 如果是RAM使用者、RAM角色,需要具備使用加密主要金鑰執行GenerateDataKey操作的許可權。

    標籤

    憑據的標籤,方便您對憑據進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

    說明
    • 標籤鍵和標籤值的格式:最多支援128個字元,可以包含英文大小寫字母、數字、正斜線(/)、反斜線(\)、底線(_)、短劃線(-)、半形句號(.)、加號(+)、等號(=)、半形冒號(:)、字元at(@)、空格。

    • 標籤鍵不能以aliyun或acs:開頭。

    • 每個憑據最多可以設定20個標籤索引值對。

    自动轮转

    選擇開啟或關閉憑據的周期性自動輪轉。

    轮转周期

    僅當开启自动轮转時需要設定。支援設定為6小時~365天。

    表示輪轉的周期,設定後KMS將定期為您更新憑據值。

    描述信息

    憑據的描述資訊。

    高级设置 > 策略配置

    憑據的策略配置。詳細介紹,請參見憑據策略概述

    您可以先選擇預設策略,建立憑據後根據業務需要再修改策略。

    資料庫憑據(Redis)

    支援创建单个凭据创建批量凭据,以單個憑據為例介紹。

    配置項

    說明

    数据库类型

    選擇Redis/Tair实例

    凭据名称

    自訂的憑據名稱。憑據名稱在當前地區內唯一。

    Redis/Tair实例

    選擇阿里雲帳號下已有的Redis執行個體或Tair執行個體。

    账号托管

    僅支援双账号托管

    设置凭据值

    僅支援託管新建立的帳號且僅支援雙帳號託管,不支援託管已存在的Redis/Tair存量帳號。

    • 定制账号名:您需要自訂Redis/Tair資料庫的帳號,此時KMS會調用Redis/Tair的API新建立兩個許可權相同的資料庫帳號及口令。以Redis為例,您自訂的Redis資料庫的帳號為user,則會建立兩個Redis資料庫帳號useruser_clone

    • 指定权限:取值為读写只读。新建立的兩個資料庫帳號許可權相同。

    加密主密钥

    選擇用於加密憑據值的密鑰。

    重要
    • 密鑰和憑據需要屬於同一個KMS執行個體,且密鑰必須為對稱金鑰。關於KMS支援哪些對稱金鑰,請參見密鑰管理類型和密鑰規格

    • 如果是RAM使用者、RAM角色,需要具備使用加密主要金鑰執行GenerateDataKey操作的許可權。

    標籤

    憑據的標籤,方便您對憑據進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

    說明
    • 標籤鍵和標籤值的格式:最多支援128個字元,可以包含英文大小寫字母、數字、正斜線(/)、反斜線(\)、底線(_)、短劃線(-)、半形句號(.)、加號(+)、等號(=)、半形冒號(:)、字元at(@)、空格。

    • 標籤鍵不能以aliyun或acs:開頭。

    • 每個憑據最多可以設定20個標籤索引值對。

    自动轮转

    選擇開啟或關閉憑據的周期性自動輪轉。

    轮转周期

    僅當開啟自动轮转時需要設定。支援設定為6小時~365天。

    表示輪轉的周期,設定後KMS將定期為您更新憑據值。

    描述信息

    憑據的描述資訊。

    高级设置 > 策略配置

    憑據的策略配置。詳細介紹,請參見憑據策略概述

    您可以先選擇預設策略,建立憑據後根據業務需要再修改策略。

    ECS憑據

    配置項

    說明

    凭据名称

    自訂的憑據名稱。憑據名稱在當前地區內唯一。

    托管实例

    選擇阿里雲帳號下已有的ECS執行個體。

    托管用户

    填寫ECS執行個體上已有的使用者名稱稱,例如:root(Linux系統)或Administrator(Windows系統)。

    初始凭据值

    長度不超過30720位元組(30KB)。

    • 口令:使用者登入ECS執行個體的密碼。

    • 金鑰組:使用者登入ECS執行個體的SSH金鑰組。

      擷取SSH金鑰組

      • 您是在ECS建立的SSH金鑰組

        • 私密金鑰:建立SSH金鑰組後,瀏覽器自動下載私密金鑰檔案(金鑰組名稱.pem)到本地電腦。詳細內容,請參見建立SSH金鑰組

        • 公開金鑰:如何查看公開金鑰資訊,請參見查看公開金鑰資訊

      • 您是自行產生的SSH金鑰組

        請在產生金鑰組的同時儲存私密金鑰和公開金鑰。以使用ssh-keygen命令產生並儲存3072位RSA金鑰組為例。

        ssh-keygen -t RSA -b 3072 -m PEM -f ~/.ssh/sshKey_demo -N ""

        執行完成後,會產生兩個檔案:

        • ~/.ssh/sshKey_demo:其中儲存的是私密金鑰。

        • ~/.ssh/sshKey_demo.pub:其中儲存的是公開金鑰。

    說明

    請您輸入正確的憑據值。如果輸入的憑據值不正確,在ECS憑據首次輪轉前,您從KMS擷取到的口令或金鑰組將不能正常登入ECS執行個體。

    加密主密钥

    選擇用於加密憑據值的密鑰。

    重要
    • 密鑰和憑據需要屬於同一個KMS執行個體,且密鑰必須為對稱金鑰。關於KMS支援哪些對稱金鑰,請參見密鑰管理類型和密鑰規格

    • 如果是RAM使用者、RAM角色,需要具備使用加密主要金鑰執行GenerateDataKey操作的許可權。

    標籤

    憑據的標籤,方便您對憑據進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

    說明
    • 標籤鍵和標籤值的格式:最多支援128個字元,可以包含英文大小寫字母、數字、正斜線(/)、反斜線(\)、底線(_)、短劃線(-)、半形句號(.)、加號(+)、等號(=)、半形冒號(:)、字元at(@)、空格。

    • 標籤鍵不能以aliyun或acs:開頭。

    • 每個憑據最多可以設定20個標籤索引值對。

    自动轮转

    選擇開啟或關閉憑據的周期性自動輪轉。

    轮转周期

    僅當开启自动轮转時需要設定。支援設定為1小時~365天。

    表示輪轉的周期,設定後KMS將定期為您更新憑據值。

    描述信息

    憑據的描述資訊。

    高级设置 > 策略配置

    憑據的策略配置。詳細介紹,請參見憑據策略概述

    您可以先選擇預設策略,建立憑據後根據業務需要再修改策略。

步驟二:應用程式擷取憑據

本文以阿里雲SDK Java版為例進行介紹。

準備工作

  1. 環境準備。

    環境要求

    已下載並安裝Java 8或以上版本。

    驗證版本

    開啟終端,輸入java -version,查看Java(JDK)版本。

  2. 安裝SDK。

    在專案中添加Maven依賴,從Maven倉庫中自動下載Java安裝包。請使用阿里雲SDK(V2.0)。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>kms20160120</artifactId>
      <version>1.2.3</version>
    </dependency>
  3. 建立介面調用憑證。

    阿里雲SDK支援基於RAM的多種認證方式,本文以使用RAM使用者的AccessKey為例。更多認證方式的介紹,請參見管理訪問憑據

    1. RAM控制台建立RAM使用者的AccessKey。具體操作,請參見建立AccessKey

      如果您已有AccessKey,請跳過該步驟。image

    2. 為RAM使用者佈建合適的存取權限。

      例如,您希望該RAM使用者能擷取憑據值,可以授予其系統權限原則

      AliyunKMSSecretUserAccess和AliyunKMSCryptoUserAccess。具體操作,請參見為RAM使用者授權image

      說明

      KMS提供了兩種設定存取權限的途徑:

      • 基於身份的策略:上述樣本即該方式,通過關聯身份與相應的許可權來控制訪問。詳細介紹,請參見使用RAM進行存取控制

      • 基於資源的策略:包含密鑰策略、憑據策略,這些策略直接與資源相關聯,用於定義對特定資源的訪問規則。詳細介紹,請參見密鑰策略憑據策略

  4. 擷取KMS執行個體的CA認證。

    1. 实例管理頁面,單擊软件密钥管理硬件密钥管理頁簽後,選擇目標KMS執行個體。

    2. 單擊執行個體ID或單擊操作列詳情,在詳情頁,執行個體CA認證地區單擊下载並妥善保管。

      CA認證下載後檔案名稱預設為PrivateKmsCA_kst-******.pem。image

  5. 擷取執行個體VPC地址。

    1. 实例管理頁面,單擊软件密钥管理硬件密钥管理頁簽後,選擇目標KMS執行個體。

    2. 單擊執行個體ID進入到詳情頁,查看实例VPC地址image

擷取憑據

  1. 初始化阿里雲SDK。

    重要

    請使用阿里雲SDK(V2.0),Endpoint請填寫執行個體VPC地址,同時需要設定執行個體CA認證。

        public static com.aliyun.kms20160120.Client createClient() throws Exception {
            // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
            // 建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/document_detail/378657.html。
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // Endpoint請輸入執行個體VPC地址,例如kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com
            config.endpoint = "<執行個體VPC地址>";
            // 請填寫執行個體ca認證的內容
            config.ca = "<執行個體CA認證>";
            return new com.aliyun.kms20160120.Client(config);
        }
  2. 調用GetSecretValue擷取憑據值。

    // This file is auto-generated, don't edit it. Thanks.
    package com.aliyun.sample;
    
    import com.aliyun.tea.*;
    
    public class Sample {
    
      public static com.aliyun.kms20160120.Client createClient() throws Exception {
            // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
            // 建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/document_detail/378657.html。
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // Endpoint請輸入執行個體VPC地址,例如kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com
            config.endpoint = "<執行個體VPC地址>";
            // 請填寫執行個體ca認證的內容
            config.ca = "<執行個體CA認證>";
            return new com.aliyun.kms20160120.Client(config);
        }
    
        public static void main(String[] args_) throws Exception {
            java.util.List<String> args = java.util.Arrays.asList(args_);
            com.aliyun.kms20160120.Client client = Sample.createClient();
            com.aliyun.kms20160120.models.GetSecretValueRequest getSecretValueRequest = new com.aliyun.kms20160120.models.GetSecretValueRequest()
                    .setSecretName("<SecretName>");
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            try {
                // 複製代碼運行請自行列印 API 的傳回值
                client.getSecretValueWithOptions(getSecretValueRequest, runtime);
            } catch (TeaException error) {
                // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                // 錯誤 message
                System.out.println(error.getMessage());
                // 診斷地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                // 錯誤 message
                System.out.println(error.getMessage());
                // 診斷地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            }        
        }
    }