全部產品
Search
文件中心

Key Management Service:使用AAP進行存取控制

更新時間:Jul 06, 2024

應用存取點AAP(Application Access Point)是KMS提供的一種身分識別驗證和存取控制機制,當自建應用在SDK中使用密鑰或憑據時,對其進行身份認證和行為鑒權。

什麼是應用存取點

應用存取點AAP包含兩個關鍵資訊:權限原則和身份憑證。

重要

建議您為每個整合KMS的應用單獨建立應用存取點,以確保存取權限的獨立性。

權限原則

用於設定允許哪些應用使用指定的密鑰和憑據。每個應用存取點可以配置1~3個權限原則。每個權限原則包含如下內容:

  • RBAC許可權:

    • CryptoServiceKeyUser:允許使用KMS執行個體中的密鑰。支援執行個體API中的密碼運算介面,具體請參見密鑰介面

    • CryptoServiceSecretUser:允許使用KMS執行個體中的憑據。支援執行個體API中的憑據介面,具體請參見憑據介面

    • SecretUser:允許使用當前帳號下的憑據。支援的介面為OpenAPI中的GetSecretVaule。

  • 允許訪問資源:應用允許訪問的密鑰、憑據。

  • 網路控制規則:設定基於網路來源IP的控制規則,即配置允許哪些來源IP地址訪問。

身份憑證

身份憑證用於對KMS資源訪問者進行身份認證和行為鑒權。支援兩種身份憑證,本文以ClientKey為例進行介紹。

  • ClientKey:應用與KMS之間通過ClientKey對請求進行數位簽章和驗證。ClientKey包含應用身份憑證內容(ClientKeyContent)憑證口令(ClientKeyPassword)

    重要
    • KMS不會儲存ClientKey,如果您未儲存或不慎遺失,請刪除後新建立一個ClientKey。

    • ClientKey的有效期間預設為5年,您也可以在建立ClientKey時指定有效期間,推薦您設定為1年。請務必在到期前更換,以免無法正常訪問KMS。具體操作,請參見更換ClientKey。建議您在更換完成後,在KMS刪除不再使用的ClientKey。

    • 如果ClientKey泄露,請刪除並建立新的ClientKey。每個應用存取點最多可以建立3個ClientKey。

  • RAMRole:當您應用程式的運行環境是ECS執行個體、ACK叢集或Function Compute並綁定了RAM角色,且需要通過KMS服務Endpoint擷取憑據值時,可使用本方式。KMS將通過存取控制RAM對OpenAPI要求者進行委託認證。

使用應用存取點進行網路訪問限制

AAP支援設定網路控制規則,在使用SDK進行密碼運算或擷取憑據值時,進行網路訪問限制。支援如下3類:

  • Private:應用通過KMS執行個體Endpoint使用密鑰和憑據。

  • Public:應用通過KMS服務Endpoint(公網接入地址)使用憑據。

  • VPC:應用通過KMS服務Endpoint(VPC接入地址)使用憑據。僅華東1(杭州)、華東2(上海)、華南1(深圳)、華北3(張家口)支援該選項。

說明
  • 密碼運算操作:僅支援使用KMS執行個體SDK通過KMS執行個體Endpoint訪問。您建立應用存取點時,網路類型請選擇Private。

  • 擷取憑據值:可以使用KMS執行個體SDK,也可以使用憑據SDK。建議您使用憑據SDK,並且應用存取點中網路類型選擇Private,以擷取更高的QPS和更高的安全性。

    • KMS執行個體SDK:網路類型只能選擇Private,來源IP只能設定為KMS執行個體綁定的VPC中的IP。

    • 憑據SDK:網路類型可以選擇Private、Public、VPC。

樣本介紹

以您使用KMS執行個體SDK進行密碼運算、擷取憑據值為例介紹。

假如配置的AAP如下圖所示,則表示:

當應用所在的IP為192.168.XX.XX時,才可以訪問KMS執行個體kst-hzz660a5c8ac57csp****,支援訪問的資源共4個:密鑰(key-hzz660a5e7ensihzs****、key-hzz660a5e8dq4iih6****)、憑據(test_01、test_02)。

image

在AAP中建立ClientKey完成後,瀏覽器會自動下載ClientKey檔案及ClientKey口令,您在初始化SDK時,需要設定clientKeyFilePath(ClientKey檔案路徑)、clientKeyPass(ClientKey口令)。以下為Java版本的初始化SDK程式碼範例,詳細內容,請參見KMS執行個體SDK(Java)

import com.aliyun.dkms.gcs.openapi.models.Config;
import com.aliyun.dkms.gcs.sdk.Client;

// 連線協定請設定為"https"。KMS執行個體服務僅允許通過HTTPS協議訪問。
String protocol = "https";
// 設定endpoint為<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com。
String endpoint = "<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com";

// Client Key。
String clientKeyFilePath = "<your client key file path>";
//String clientKey = "<your client key>";

// Client Key口令。
String clientKeyPass = "<your client key password>";

// KMS執行個體的CA認證,可通過檔案路徑或直接設定內容。
String caCertPath = "<path/to/DKMSInstanceCACertificates>";
//String caCert = "<The DKMS instance CA certificates content>";

Client client = new Client(new Config()
                           .setProtocol(protocol)
                           .setEndpoint(endpoint)
                           .setCaFilePath(caCertPath) // 設定CA認證檔案路徑,還支援設定CA認證內容,請根據需要選擇。
                           //.setCa(caCert) // 設定CA認證內容。
                           .setClientKeyFile(clientKeyFilePath)//設定應用身份憑證檔案路徑,還支援設定應用身份憑證內容,請根據需要選擇。
                           //.setClientKeyContent(clientKey)//設定應用身份憑證內容。
                           .setPassword(clientKeyPass));

操作文檔