應用接入點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集群或函數計算并綁定了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 for 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));