应用接入点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(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));