凭据管理快速入门

更新时间:
复制为 MD 格式

在应用程序中硬编码数据库密码、API 密钥等敏感信息容易导致凭据泄露。KMS 凭据管理服务支持将敏感数据集中托管并加密存储,应用程序通过 VPC 网络使用 SDK 动态获取凭据,无需在代码中嵌入任何敏感信息。本文介绍如何创建凭据并在应用程序中集成。

凭据类型概览

密钥管理服务(Key Management Service,简称 KMS)提供凭据的全生命周期管理,支持创建、更新、轮转和删除凭据。应用程序通过 SDK 动态获取凭据值,避免在代码中硬编码敏感数据。

凭据类型

适用场景

说明

通用凭据

托管任意键值对或文本形式的敏感数据

适用于 API 密钥、连接字符串、证书文本等场景。敏感数据长度不超过 30720 字节(30 KB)。

RAM 凭据

托管 RAM 用户的 AccessKey

选择已有的 RAM 用户,托管其 AccessKey。凭据名称根据 RAM 用户名自动生成,支持自动轮转。

数据库凭据(RDS)

托管 RDS 数据库账号和口令

关联 RDS 实例,托管数据库账号。支持双账号模式,轮转时自动切换,避免连接中断。

数据库凭据(PolarDB)

托管 PolarDB 数据库账号和口令

关联 PolarDB MySQL/PgSQL 实例,仅支持双账号模式和一键创建账号。

数据库凭据(Redis)

托管 Redis/Tair 实例的账号和口令

关联 Redis 或 Tair 实例,仅支持双账号模式,创建时自动在数据库中新建两个权限相同的账号。

ECS 凭据

托管 ECS 实例的登录口令或 SSH 密钥对

关联 ECS 实例和系统用户,托管登录凭据。支持口令和 SSH 密钥对两种格式。

前提条件

已在 KMS 实例中创建用于加密凭据的对称密钥,且密钥和凭据必须属于同一个 KMS 实例。具体操作,请参见创建密钥

步骤一:创建凭据

创建凭据时可开启自动轮转,KMS 将定期更新凭据值,降低凭据泄露风险。各凭据类型的创建方法如下。

通用凭据

说明

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

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

  2. 自管凭据页签凭据类型区域,单击通用凭据

  3. 在右侧列表上方,单击创建通用凭据,完成以下配置后,单击确定

    配置项

    说明

    凭据名称

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

    设置凭据值

    选择凭据键/值纯文本,输入要托管的敏感数据。长度不超过 30720 字节(30 KB)。

    初始版本号

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

    加密主密钥

    选择用于加密凭据值的对称密钥。密钥和凭据必须属于同一个 KMS 实例。

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

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

    标签

    为凭据添加标签,便于分类管理。每个标签由键值对(Key:Value)组成。

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

    • 标签键不能以aliyunacs:开头。

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

    描述信息

    填写凭据的补充描述信息,便于后续识别和管理。

    高级设置 > 策略配置

    设置凭据的访问权限策略,可控制哪些 RAM 用户或角色可以读取或修改此凭据。

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

RAM 凭据

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

  2. 自管凭据页签凭据类型区域,单击RAM凭据

  3. 在右侧列表上方,单击创建RAM凭据,完成以下配置后,单击确定

    配置项

    说明

    选择RAM用户

    选择要托管凭据的 RAM 用户,所选用户至少需有一个 AccessKey。凭据名称根据 RAM 用户名自动生成。

    如没有 AccessKey,请先创建。

    设置凭据值

    输入对应 AccessKey Secret,长度不超过 30720 字节(30 KB)。

    加密主密钥

    选择用于加密凭据值的对称密钥。密钥和凭据必须属于同一个 KMS 实例。

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

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

    标签

    为凭据添加标签,便于分类管理。每个标签由键值对(Key:Value)组成。

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

    • 标签键不能以aliyunacs:开头。

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

    自动轮转

    选择是否启用自动轮转功能。启用后,KMS 将按照设定的周期自动更新凭据值,降低凭据泄露风险。

    天数(7天~365天)

    仅在开启开启自动轮转时设置。表示轮转周期,设置后 KMS 将定期更新凭据值。

    描述信息

    填写凭据的补充描述信息,便于后续识别和管理。

    高级设置 > 策略配置

    设置凭据的访问权限策略,可控制哪些 RAM 用户或角色可以读取或修改此凭据。

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

数据库凭据(RDS)

仅支持选择创建单个凭据

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

  2. 自管凭据页签凭据类型区域,单击数据库凭据

  3. 在右侧列表上方,单击创建数据库凭据下的创建单个凭据,完成以下配置后,单击确定

    配置项

    说明

    数据库类型

    选择RDS凭据

    凭据名称

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

    RDS实例

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

    账号托管

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

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

        说明
        • 一键创建和授权不会立即配置新账号,需审核确认凭据信息后才会创建。

        • RDS PostgreSQL 配置后,在创建阶段无法获取数据库名称,需手动设置 DBName。

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

        说明

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

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

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

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

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

    加密主密钥

    选择用于加密凭据值的对称密钥。密钥和凭据必须属于同一个 KMS 实例。

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

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

    标签

    为凭据添加标签,便于分类管理。每个标签由键值对(Key:Value)组成。

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

    • 标签键不能以aliyunacs:开头。

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

    自动轮转

    选择是否启用自动轮转功能。启用后,KMS 将按照设定的周期自动更新凭据值,降低凭据泄露风险。

    轮转周期

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

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

    描述信息

    填写凭据的补充描述信息,便于后续识别和管理。

    高级设置 > 策略配置

    设置凭据的访问权限策略,可控制哪些 RAM 用户或角色可以读取或修改此凭据。

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

数据库凭据(PolarDB)

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

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

  2. 自管凭据页签凭据类型区域,单击数据库凭据

  3. 在右侧列表上方,单击创建数据库凭据下的创建单个凭据,完成以下配置后,单击确定

  4. 配置项

    说明

    数据库类型

    选择PolarDB凭据

    凭据名称

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

    PolarDB实例

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

    账号托管

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

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

    说明
    • 一键创建和授权不会立即创建新账号,而是在审核确认凭据信息后创建。

    • 账号名必须唯一,如果账号名已存在则无法托管到凭据中

    加密主密钥

    选择用于加密凭据值的对称密钥。密钥和凭据必须属于同一个 KMS 实例。

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

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

    标签

    为凭据添加标签,便于分类管理。每个标签由键值对(Key:Value)组成。

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

    • 标签键不能以aliyunacs:开头。

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

    自动轮转

    选择是否启用自动轮转功能。启用后,KMS 将按照设定的周期自动更新凭据值,降低凭据泄露风险。

    轮转周期

    仅在开启自动轮转功能时设置。支持设置为 6 小时~365 天。

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

    描述信息

    填写凭据的补充描述信息,便于后续识别和管理。

    高级设置 > 策略配置

    设置凭据的访问权限策略,可控制哪些 RAM 用户或角色可以读取或修改此凭据。

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

数据库凭据(Redis)

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

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

  2. 自管凭据页签凭据类型区域,单击数据库凭据

  3. 在右侧列表上方,单击创建数据库凭据下的创建单个凭据,完成以下配置后,单击确定

  4. 配置项

    说明

    数据库类型

    选择Redis/Tair实例

    凭据名称

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

    Redis/Tair实例

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

    账号托管

    仅支持双账号托管

    设置凭据值

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

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

    • 指定权限:取值为读写只读。两个新账号权限相同。

    加密主密钥

    选择用于加密凭据值的对称密钥。密钥和凭据必须属于同一个 KMS 实例。

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

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

    标签

    为凭据添加标签,便于分类管理。每个标签由键值对(Key:Value)组成。

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

    • 标签键不能以aliyunacs:开头。

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

    自动轮转

    选择是否启用自动轮转功能。启用后,KMS 将按照设定的周期自动更新凭据值,降低凭据泄露风险。

    轮转周期

    仅在开启自动轮转功能时设置。支持设置为 6 小时~365 天。

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

    描述信息

    填写凭据的补充描述信息,便于后续识别和管理。

    高级设置 > 策略配置

    设置凭据的访问权限策略,可控制哪些 RAM 用户或角色可以读取或修改此凭据。

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

ECS 凭据

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

  2. 自管凭据页签凭据类型区域,单击ECS凭据

  3. 在右侧列表上方,单击创建ECS凭据,完成以下配置后,单击确定

  4. 配置项

    说明

    凭据名称

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

    托管实例

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

    托管用户

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

    初始凭据值

    凭据值的长度不超过 30720 字节(30 KB)。

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

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

      获取 SSH 密钥对

      • 通过 ECS 创建 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实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格

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

    标签

    为凭据添加标签,便于分类管理。每个标签由键值对(Key:Value)组成。

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

    • 标签键不能以aliyunacs:开头。

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

    自动轮转

    选择是否启用自动轮转功能。启用后,KMS 将按照设定的周期自动更新凭据值,降低凭据泄露风险。

    轮转周期

    仅在开启自动轮转功能时设置。支持设置为 1 小时~365 天。

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

    描述信息

    填写凭据的补充描述信息,便于后续识别和管理。

    高级设置 > 策略配置

    设置凭据的访问权限策略,可控制哪些 RAM 用户或角色可以读取或修改此凭据。

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

说明

创建成功后,凭据列表中将显示新创建的凭据,确认凭据名称、类型正确且状态为"已启用"。

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

本文以阿里云软件开发工具包(SDK) Java 版为例,介绍在应用程序中动态获取凭据的方法。

准备工作

  1. 准备 SDK 运行环境。

    环境要求:已安装 Java 8 或更高版本。

    验证方法:在终端运行 java -version,确认版本符合要求。

  2. 安装 SDK。在项目中添加以下 Maven 依赖,使用阿里云 SDK(V2.0)。

    重要

    建议使用最新版本,访问kms-20160120了解更多版本和源代码信息。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>kms20160120</artifactId>
      <version>1.4.0</version>
    </dependency>
  3. 创建接口调用凭证。阿里云 SDK 支持多种认证方式,以下以 RAM 用户的访问密钥(AccessKey,简称 AK)为例。

    1. RAM 控制台创建 RAM 用户的 AccessKey。如已有 AccessKey,可跳过此步骤。

    2. 为 RAM 用户授予访问 KMS 的权限;如需获取凭据值,需授予系统权限策略 AliyunKMSSecretUserAccessAliyunKMSCryptoUserAccess,详情请参见权限策略配置

      说明

      KMS 提供两种访问权限设置方式:

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

    1. 实例管理页面,单击软件密钥管理硬件密钥管理页签后,选择目标KMS实例。

    2. 单击实例ID或单击操作列详情,在详情页的实例CA证书区域,单击下载并妥善保管。

      说明

      CA证书下载后文件名默认为PrivateKmsCA_kst-******.pem。

  5. 获取实例 VPC 地址。

    1. 实例管理页面,单击软件密钥管理硬件密钥管理页签后,选择目标KMS实例。

    2. 单击实例ID进入到详情页,查看实例VPC地址image

获取凭据

  1. 初始化 SDK 客户端。

    说明

    运行代码示例前,请将代码中的以下占位符替换为实际值:

    • <实例 VPC 地址>:替换为 KMS 实例的 VPC 地址

    • <实例 CA 证书>:替换为 KMS 实例 CA 证书的实际内容

    • <SecretName>:替换为步骤一中创建的凭据名称

        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);
            }
        }
    }
说明

成功获取凭据值后,SDK 将返回包含 SecretNameSecretData 等字段的响应对象。可打印 response.body.secretData 查看凭据值,并在实际应用中使用该凭据访问对应服务来验证是否成功。