應用存取點AAP(Application Access Point)是KMS提供的一種身分識別驗證和存取控制機制,當自建應用在SDK中使用密鑰或憑據時,對其進行身份認證和行為鑒權。
什麼是應用存取點
應用存取點AAP包含兩個關鍵資訊:權限原則和身份憑證。
建議您為每個整合KMS的應用單獨建立應用存取點,以確保存取權限的獨立性。
權限原則
用於設定允許哪些應用使用指定的密鑰和憑據。每個應用存取點可以配置1~3個權限原則。每個權限原則包含如下內容:
RBAC許可權:
允許訪問資源:應用允許訪問的密鑰、憑據。
網路控制規則:設定基於網路來源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)。

在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));