全部产品
Search
文档中心

密钥管理服务:使用AAP进行访问控制

更新时间:Apr 17, 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集群或函数计算并绑定了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 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));

操作文档