全部产品
Search
文档中心

密钥管理服务:凭据管理快速入门

更新时间:Dec 27, 2024

您可以使用KMS创建凭据,在应用程序中集成您的凭据信息,实现对敏感数据的统一管理。本文介绍如何创建凭据以及如何在应用程序中集成凭据信息。

背景信息

KMS提供凭据的创建、更新、删除等全生命周期的管理服务,应用程序通过SDK来获取凭据,解决您在应用程序中硬编码凭据带来的敏感数据泄露问题。

KMS支持托管通用凭据、RAM凭据、数据库凭据和ECS凭据。关于凭据的更多信息,请参见凭据管理概述

注意事项

KMS使用您指定的密钥来加密凭据值,该密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型

前提条件

  • 已购买并启用KMS实例。具体操作,请参见购买和启用KMS实例

  • 已在KMS实例中创建用于加密凭据的对称密钥。具体操作,请参见创建密钥

步骤一:创建凭据

创建凭据时支持设置轮转信息,KMS将定期为您更新凭据值,保护您的凭据安全。

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 凭据管理

  2. 凭据管理页面单击您要创建的凭据页签,选择实例ID后,单击创建凭据,完成各项配置后单击确定

    通用凭据

    说明

    通用凭据不支持在创建时设置轮转信息,如果您需要轮转通用凭据,请参见管理及使用通用凭据

    配置项

    说明

    凭据名称

    自定义的凭据名称。凭据名称在当前地域内唯一。

    设置凭据值

    根据您要托管的敏感数据类型,选择凭据键/值纯文本

    长度不超过30720字节(30KB)。

    初始版本号

    凭据的初始版本号。默认为v1,也支持自定义版本号。

    加密主密钥

    选择用于加密凭据值的密钥。

    重要
    • 密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

    • 如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。

    标签

    凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。

    说明
    • 标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。

    • 标签键不能以aliyun或acs:开头。

    • 每个凭据最多可以设置20个标签键值对。

    描述信息

    凭据的描述信息。

    策略配置

    凭据的策略配置。详细介绍,请参见凭据策略概述

    您可以先选择默认策略,创建凭据后根据业务需要再修改策略。

    RAM凭据

    配置项

    说明

    选择RAM用户

    选择您要托管凭据的RAM用户,所选RAM用户至少需要有一个AccessKey。若没有,请先创建AccessKey,详细步骤请参考创建AccessKey

    凭据名称根据RAM用户的名称自动生成,凭据名称在当前地域内唯一。

    设置凭据值

    输入对应的AccessKey Secret。

    长度不超过30720字节(30KB)。

    加密主密钥

    选择用于加密凭据值的密钥。

    重要
    • 密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

    • 如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。

    标签

    凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。

    说明
    • 标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。

    • 标签键不能以aliyun或acs:开头。

    • 每个凭据最多可以设置20个标签键值对。

    自动轮转

    选择开启或关闭凭据的周期性自动轮转。

    天数(7天~365天)

    仅当开启自动轮转需要设置。

    表示轮转的周期,设置后KMS将定期为您更新凭据值。

    描述信息

    凭据的描述信息。

    策略配置

    凭据的策略配置。详细介绍,请参见凭据策略概述

    您可以先选择默认策略,创建凭据后根据业务需要再修改策略。

    数据库凭据(RDS)

    仅支持选择创建单个凭据

    配置项

    说明

    数据库类型

    选择RDS凭据

    凭据名称

    自定义的凭据名称。凭据名称在当前地域内唯一。

    RDS实例

    选择阿里云账号下已有的RDS实例。

    账号托管

    • 双账号托管(推荐):适用于程序化访问数据库场景。托管两个相同权限的账号,保证口令重置切换的瞬间,程序访问数据库不被中断。

      • 单击新建账号,配置账号名、选择数据库并指定权限。

        说明

        一键创建和授权不会立即为您配置新的账号,而是在您审核确认凭据信息之后进行配置。

      • 单击导入已有账号,选择用户名、配置口令。

        说明

        建议您将口令配置为创建RDS实例用户账号时对应的密码。如果导入的账号和口令不匹配,您可以在凭据首次轮转之后,获取正确的账号和口令。

    • 单账号托管:适用于高权限账号或者人工运维账号托管场景。口令重置切换的瞬间,凭据的当前版本可能暂时无法使用。

      • 单击新建账号,配置账号名、选择账号类型。

        您可以选择普通账号高权限账号两种账号类型。当您选择普通账号时,还需选择数据库并指定权限。

      • 单击导入已有账号页签,选择用户名、配置口令。

    加密主密钥

    选择用于加密凭据值的密钥。

    重要
    • 密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

    • 如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。

    标签

    凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。

    说明
    • 标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。

    • 标签键不能以aliyun或acs:开头。

    • 每个凭据最多可以设置20个标签键值对。

    自动轮转

    选择开启或关闭凭据的周期性自动轮转。

    轮转周期

    仅当开启自动轮转时需要设置。支持设置为6小时~365天。

    表示轮转的周期,设置后KMS将定期为您更新凭据值。

    描述信息

    凭据的描述信息。

    策略配置

    凭据的策略配置。详细介绍,请参见凭据策略概述

    您可以先选择默认策略,创建凭据后根据业务需要再修改策略。

    数据库凭据PolarDB

    仅支持选择创建单个凭据,并且仅支持PolarDB MySQL/PgSQL新建账号双账号托管,不支持导入已有账号、以及单账号托管

    配置项

    说明

    数据库类型

    选择PolarDB凭据

    凭据名称

    自定义的凭据名称,凭据名称在当前地域内唯一。

    PolarDB实例

    选择阿里云账号下已有的PolarDB实例。

    账号托管

    双账号托管:适用于程序化访问数据库场景。创建两个相同权限的账号,保证口令重置切换的瞬间,程序访问数据库不被中断。

    新建账号:配置账号名和权限,账号类型只支持普通账号。MySQL凭据创建时候需要选择数据库+权限

    说明
    • 一键创建和授权不会立即为您配置新的账号,而是在您审核确认凭据信息之后进行配置。

    • 账号名必须唯一,如果账号名已经存在,就不能托管到凭据中

    加密主密钥

    选择用于加密凭据值的密钥。

    重要
    • 密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

    • 如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。

    标签

    凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。

    说明
    • 标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。

    • 标签键不能以aliyun或acs:开头。

    • 每个凭据最多可以设置20个标签键值对。

    自动轮转

    选择开启或关闭凭据的周期性自动轮转。

    轮转周期

    仅当开启自动轮转时需要设置。支持设置为6小时~365天。

    表示轮转的周期,设置后KMS将定期为您更新凭据值。

    描述信息

    凭据的描述信息。

    策略配置

    凭据的策略配置。详细介绍,请参见凭据策略概述

    您可以先选择默认策略,创建凭据后根据业务需要再修改策略。

    数据库凭据(Redis)

    支持创建单个凭据创建批量凭据,以单个凭据为例介绍。

    配置项

    说明

    数据库类型

    选择Redis/Tair实例

    凭据名称

    自定义的凭据名称。凭据名称在当前地域内唯一。

    Redis/Tair实例

    选择阿里云账号下已有的Redis实例或Tair实例。

    账号托管

    仅支持双账号托管

    设置凭据值

    仅支持托管新创建的账号且仅支持双账号托管,不支持托管已存在的Redis/Tair存量账号。

    • 定制账号名:您需要自定义Redis/Tair数据库的账号,此时KMS会调用Redis/Tair的API新创建两个权限相同的数据库账号及口令。以Redis为例,您自定义的Redis数据库的账号为user,则会创建两个Redis数据库账号useruser_clone

    • 指定权限:取值为读写只读。新创建的两个数据库账号权限相同。

    加密主密钥

    选择用于加密凭据值的密钥。

    重要
    • 密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

    • 如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。

    标签

    凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。

    说明
    • 标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。

    • 标签键不能以aliyun或acs:开头。

    • 每个凭据最多可以设置20个标签键值对。

    自动轮转

    选择开启或关闭凭据的周期性自动轮转。

    轮转周期

    仅当开启自动轮转时需要设置。支持设置为6小时~365天。

    表示轮转的周期,设置后KMS将定期为您更新凭据值。

    描述信息

    凭据的描述信息。

    策略配置

    凭据的策略配置。详细介绍,请参见凭据策略概述

    您可以先选择默认策略,创建凭据后根据业务需要再修改策略。

    ECS凭据

    配置项

    说明

    凭据名称

    自定义的凭据名称。凭据名称在当前地域内唯一。

    托管实例

    选择阿里云账号下已有的ECS实例。

    托管用户

    填写ECS实例上已有的用户名称,例如:root(Linux系统)或Administrator(Windows系统)。

    初始凭据值

    长度不超过30720字节(30KB)。

    • 口令:用户登录ECS实例的密码。

    • 密钥对:用户登录ECS实例的SSH密钥对。

      获取SSH密钥对

      • 您是在ECS创建的SSH密钥对

        • 私钥:创建SSH密钥对后,浏览器自动下载私钥文件(密钥对名称.pem)到本地电脑。详细内容,请参见创建SSH密钥对

        • 公钥:如何查看公钥信息,请参见查看公钥信息

      • 您是自行生成的SSH密钥对

        请在生成密钥对的同时保存私钥和公钥。以使用ssh-keygen命令生成并保存3072位RSA密钥对为例。

        ssh-keygen -t RSA -b 3072 -m PEM -f ~/.ssh/sshKey_demo -N ""

        执行完成后,会生成两个文件:

        • ~/.ssh/sshKey_demo:其中保存的是私钥。

        • ~/.ssh/sshKey_demo.pub:其中保存的是公钥。

    说明

    请您输入正确的凭据值。如果输入的凭据值不正确,在ECS凭据首次轮转前,您从KMS获取到的口令或密钥对将不能正常登录ECS实例。

    加密主密钥

    选择用于加密凭据值的密钥。

    重要
    • 密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

    • 如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。

    标签

    凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。

    说明
    • 标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。

    • 标签键不能以aliyun或acs:开头。

    • 每个凭据最多可以设置20个标签键值对。

    自动轮转

    选择开启或关闭凭据的周期性自动轮转。

    轮转周期

    仅当开启自动轮转时需要设置。支持设置为1小时~365天。

    表示轮转的周期,设置后KMS将定期为您更新凭据值。

    描述信息

    凭据的描述信息。

    策略配置

    凭据的策略配置。详细介绍,请参见凭据策略概述

    您可以先选择默认策略,创建凭据后根据业务需要再修改策略。

步骤二:应用程序获取凭据

本文以阿里云SDK Java版为例进行介绍。

准备工作

  1. 环境准备。

    环境要求

    已下载并安装Java 8或以上版本。

    验证版本

    打开终端,输入java -version,查看Java(JDK)版本。

  2. 安装SDK。

    在项目中添加Maven依赖,从Maven仓库中自动下载Java安装包。请使用阿里云SDK(V2.0)。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>kms20160120</artifactId>
      <version>1.2.3</version>
    </dependency>
  3. 创建接口调用凭证。

    阿里云SDK支持基于RAM的多种认证方式,本文以使用RAM用户的AccessKey为例。更多认证方式的介绍,请参见管理访问凭据

    1. RAM控制台创建RAM用户的AccessKey。具体操作,请参见创建AccessKey

      如果您已有AccessKey,请跳过该步骤。image

    2. 为RAM用户设置合适的访问权限。

      例如,您希望该RAM用户能获取凭据值,可以授予其系统权限策略

      AliyunKMSSecretUserAccess和AliyunKMSCryptoUserAccess。具体操作,请参见为RAM用户授权image

      说明

      KMS提供了两种设置访问权限的途径:

      • 基于身份的策略:上述示例即该方式,通过关联身份与相应的权限来控制访问。详细介绍,请参见使用RAM进行访问控制

      • 基于资源的策略:包含密钥策略、凭据策略,这些策略直接与资源相关联,用于定义对特定资源的访问规则。详细介绍,请参见密钥策略凭据策略

  4. 获取KMS实例的CA证书。

    1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 实例管理

    2. 在右侧操作页面上方,单击获取实例CA证书

      image

  5. 获取实例VPC地址。

    在实例的详情页面,记录实例VPC地址。

    image

获取凭据

  1. 初始化阿里云SDK。

    重要

    请使用阿里云SDK(V2.0),Endpoint请填写实例VPC地址,同时需要设置实例CA证书。

        public static com.aliyun.kms20160120.Client createClient() throws Exception {
            // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
            // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // Endpoint请输入实例VPC地址,例如kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com
            config.endpoint = "<实例VPC地址>";
            // 请填写实例ca证书的内容
            config.ca = "<实例CA证书>";
            return new com.aliyun.kms20160120.Client(config);
        }
  2. 调用GetSecretValue获取凭据值。

    // This file is auto-generated, don't edit it. Thanks.
    package com.aliyun.sample;
    
    import com.aliyun.tea.*;
    
    public class Sample {
    
      public static com.aliyun.kms20160120.Client createClient() throws Exception {
            // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
            // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // Endpoint请输入实例VPC地址,例如kst-hzz65f176a0ogplgq****.cryptoservice.kms.aliyuncs.com
            config.endpoint = "<实例VPC地址>";
            // 请填写实例ca证书的内容
            config.ca = "<实例CA证书>";
            return new com.aliyun.kms20160120.Client(config);
        }
    
        public static void main(String[] args_) throws Exception {
            java.util.List<String> args = java.util.Arrays.asList(args_);
            com.aliyun.kms20160120.Client client = Sample.createClient();
            com.aliyun.kms20160120.models.GetSecretValueRequest getSecretValueRequest = new com.aliyun.kms20160120.models.GetSecretValueRequest()
                    .setSecretName("<SecretName>");
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            try {
                // 复制代码运行请自行打印 API 的返回值
                client.getSecretValueWithOptions(getSecretValueRequest, runtime);
            } catch (TeaException error) {
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                // 错误 message
                System.out.println(error.getMessage());
                // 诊断地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                // 错误 message
                System.out.println(error.getMessage());
                // 诊断地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            }        
        }
    }