凭据客户端

更新时间:
复制为 MD 格式

凭据客户端是基于KMS OpenAPIKMS实例API的自定义封装,封装了在应用中缓存和刷新凭据的功能,业务稳定性更高且更易于开发者在业务应用中集成。凭据客户端支持获取所有凭据类型的凭据值。本文介绍如何安装及使用凭据客户端。

凭据客户端SDK介绍

凭据客户端基于API,封装了凭据缓存、最佳实践和设计模式,更易于开发者在业务系统中集成。凭据客户端具有以下:

说明
  • 此外KMS还提供了KMS实例SDK和阿里云SDK,也可以用于获取凭据值。详细信息,请参见SDK参考

  • 如果需要对凭据进行管控类操作,仅支持使用阿里云SDK。

SDK 优势

  • 支持开发者在应用中快速集成凭据能力,一行代码读取凭据信息。

  • 封装凭据在应用中缓存和刷新的功能。

  • 封装API错误的重试机制,智能处理服务端错误。

  • 开放插件式设计模式,支持开发者自定义扩展缓存、错误重试等功能模块。

SDK 版本

凭据客户端V2.0版本已发布,推荐使用V2.0版本。V1SDK 2.0区别如下:

  • 访问凭证支持

    凭证类型

    SDK 1.0

    SDK 2.0

    AccessKey

    支持

    支持

    OIDC Role Arn

    不支持

    支持

    ECS RAM Role

    支持

    支持

    RAM Role Arn

    支持

    支持

    说明

    SDK 2.0不支持从默认环境变量和配置文件读取RamRoleArn信息,需要通过硬编码模式。如有需要,请联系技术支持人员。

    Client Key

    支持

    不支持

    默认凭据链

    不支持

    支持

  • 安全证书

    特性

    V1 SDK

    SDK 2.0

    内置CA证书

    不支持

    支持

SDK凭据鉴权流程

凭据客户端通过访问凭据进行鉴权,鉴权过程因所访问的网关类型不同而略有差异。SDK支持自动识别配置参数并据此选择合适的网关进行连接。通过这种灵活的鉴权机制,用户无需手动设置网关类型,鉴权步骤如下:

  1. 设置环境变量或准备配置文件,确保包含所有必要的凭证信息(专属网关共享网关参数略有差异)。

  2. 初始化客户端,SDK将会自动读取这些信息并识别网关。

  3. SDK完成鉴权后即可进行后续的网关操作。

适用范围

  • 支持的凭据类型:通用凭据、RAM凭据、ECS凭据、数据库凭据。

  • 支持的开发语言:Java(Java 8及以上版本)、Python、Go。

安装凭据客户端

下文以安装SDK 2.0为例,V1 SDK 请参考各语言SDK源代码库。

Java

通过Maven的方式在项目中安装凭据客户端。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-secretsmanager-client-v2</artifactId>
    <version>x.x.x</version>
</dependency>
重要

建议使用SDK 2.0最新版本,以获得最新功能和优化。请访问alibabacloud-secretsmanager-client-java-v2,查看SDK 2.0示例代码和源代码信息。若使用V1版本,请访问alibabacloud-secretsmanager-client-java

Python

执行pip命令安装凭据客户端。

# 如果下述命令报错,请将pip替换为pip3
pip install alibabacloud_secretsmanager_client_v2
重要

建议使用V2版本,以获得最新功能和优化。请访问aliyun-secretsmanager-client-python-v2,查看SDK 2.0示例代码和源代码信息。若使用V1版本,请访问aliyun-secretsmanager-client-python

Go

使用go get命令安装凭据客户端。

go get -u github.com/aliyun/alibabacloud-secretsmanager-client-go-v2
重要
  • Go语言下凭据客户端依赖的alibaba-cloud-sdk-go 版本需小于V1.63.0,请在插件的 go.mod 文件中检查并确认版本,以避免潜在的兼容性问题。

  • 建议使用V2版本,以获得最新功能和优化。请访问alibabacloud-secretsmanager-client-go-v2,查看SDK 2.0示例代码和源代码信息。若使用V1版本,请访问aliyun-secretsmanager-client-go

配置鉴权访问凭证

ECS实例RAM角色

步骤1:创建RAM角色并配置权限

ECS RAM角色是指为ECS实例授予的RAM角色,该RAM角色是一个受信服务为云服务器的普通服务角色。使用实例RAM角色可以实现在ECS实例内部无需配置AccessKey即可获取临时访问凭证(STS Token),从而调用KMSOpenAPI。

具体操作,请参见实例RAM角色

  1. 登录RAM控制台,创建可信实体为阿里云服务的RAM角色。

    • 信任主体类型:选择云服务器

    • 信任主体名称:选择云服务器ECS

  2. 授予RAM角色访问KMS的权限。

    • 方式一:设置基于身份的策略

      单击RAM角色操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考

      说明

      同时支持自定义权限策略,具体操作请参见创建自定义权限策略

    • 方式二:设置基于资源的策略

      KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略凭据策略

  3. 登录ECS管理控制台,将RAM角色授予ECS实例。image

步骤2:设置环境变量或配置文件

SDK支持通过以下两种方式获取访问凭证:

  • 读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见Linux、macOSWindows系统配置环境变量

    警告

    参数名称不可修改,否则SDK无法识别。

  • 读取配置文件:

    • 默认配置文件为secretsmanager.properties(不可更改名称)为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:

      • Java:将配置文件放在src/main/resources目录下,以便在编译时自动包含在类路径中。

      • Go:通常将配置文件放在项目的根目录或专门的config目录中,然后通过代码加载文件。

      • Python:将配置文件放在项目目录中,或在特定的config目录中,并使用适当的方法(如os.pathpkg_resources)来加载。

    • 若使用自定义配置文件,需要在初始化客户端时,指定配置文件地址(#customConfigFileName#)。

配置文件

  • 专属网关

    # 访问凭据类型
    credentials_type=ecs_ram_role
    # ECS RAM Role名称
    credentials_role_name=#credentials_role_name#
    # 关联的KMS服务地域及KMS实例endpoint
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共享网关

    # 访问凭据类型
    credentials_type=ecs_ram_role
    # ECS RAM Role名称
    credentials_role_name=#credentials_role_name#
    # 关联的KMS服务地域
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 共享网关(VPC)

    # 访问凭据类型
    credentials_type=ecs_ram_role
    # ECS RAM Role名称
    credentials_role_name=#credentials_role_name#
    # 关联的KMS服务地域及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

环境变量

参数

参数值

credentials_type

固定取值ecs_ram_role。

credentials_role_name

RAM角色名称。

cache_client_region_id

  • 专属网关:[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共享网关:[{"regionId":"<your region id>"}]。

    重要
    • 请将<regionId>替换为真实的地域ID<you kms instanceId>替换为真实的实例ID。

    • Linux系统下,使用export命令设置环境变量时,请添加转义字符,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共享网关(VPC)时,格式为 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

AccessKey

步骤1:创建 AccessKey 并配置权限

警告

阿里云账号默认有所有资源的Administrator权限且不可修改,为了确保资源安全,建议使用RAM用户创建AccessKey,并根据需求进行最小化授权。

  1. 登录RAM控制台,在页用户面,单击目标RAM用户名称。

  2. 认证管理页签下的AccessKey区域,单击创建AccessKey,并按照指引完成创建。

  3. 授予RAM用户访问KMS的权限。

    • 方式一:设置基于身份的策略

      单击RAM用户操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考

      说明

      同时支持自定义权限策略,具体操作请参见创建自定义权限策略

    • 方式二:设置基于资源的策略

      KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略凭据策略

步骤2:设置环境变量或配置文件

SDK支持通过以下两种方式获取访问凭证:

  • 读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见Linux、macOSWindows系统配置环境变量

    警告

    参数名称不可修改,否则SDK无法识别。

  • 读取配置文件:

    • 默认配置文件为secretsmanager.properties(不可更改名称)为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:

      • Java:将配置文件放在src/main/resources目录下,以便在编译时自动包含在类路径中。

      • Go:通常将配置文件放在项目的根目录或专门的config目录中,然后通过代码加载文件。

      • Python:将配置文件放在项目目录中,或在特定的config目录中,并使用适当的方法(如os.pathpkg_resources)来加载。

    • 若使用自定义配置文件,需要在初始化客户端时,指定配置文件地址(#customConfigFileName#)。

配置文件

  • 专属网关

    # 访问凭据类型
    credentials_type=ak
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    #访问KMS实例网关时,使用如下配置
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共享网关

    # 访问凭据类型
    credentials_type=ak
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 关联的KMS服务地域
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 共享网关(VPC)

    # 访问凭据类型
    credentials_type=ak
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 关联的KMS服务地域及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

环境变量

参数

参数值

credentials_type

固定取值ak。

credentials_access_key_id

AccessKey ID。

credentials_access_secret

AccessKey Secret。

cache_client_region_id

  • 专属网关:[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共享网关:[{"regionId":"<your region id>"}]。

    重要
    • 请将<regionId>替换为真实的地域ID<you kms instanceId>替换为真实的实例ID。

    • Linux系统下,使用export命令设置环境变量时,请添加转义字符,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共享网关(VPC)时,格式为 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

OIDC Role ARN

说明

仅凭据客户端SDK 2.0 支持OIDC Role ARN 凭证,V1 SDK不支持。

步骤1:创建OIDC Role ARN 并配置权限

  1. 创建OIDC身份提供商

    1. 使用RAM管理员登录RAM控制台,进入集成管理 > SSO管理页面,并选择角色SSO。

    2. OIDC页签,单击创建身份提供商

    3. 创建身份提供商页面,设置身份提供商信息。具体配置,请参见管理OIDC身份提供商

  2. 获取并保存OIDC身份信息(ARN和客户端ID)

    1. 进入集成管理 > SSO管理页面,单击目标身份提供商名称。

    2. 进入身份提供商详情页,可查看ARN客户端 ID。

  3. 创建OIDC身份提供商的RAM角色并授权

    1. 使用RAM管理员登录RAM控制台,在身份管理 > 角色页面。

    2. 单击创建角色,在创建页面右上角,单击切换编辑器

    3. 在编辑器中指定具体的OIDC身份提供商。选择可视化编辑模式,并参考如下说明,完成配置。

      说明

      更多模式,请参见创建OIDC身份提供商的RAM角色

      1. 主体中选择身份提供商后,单击下方编辑。

      2. 添加主体弹窗中,参考如下说明,完成配置。

        • 身份提供商类型:选择OIDC。

        • 身份提供商:选择之前创建的OIDC身份提供商。

  4. 授予OIDC RAM角色访问KMS的权限

    • 方式一:设置基于身份的策略

      返回身份管理角色列表页,单击目标OIDC 角色操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考

      说明

      同时支持自定义权限策略,具体操作请参见创建自定义权限策略

    • 方式二:设置基于资源的策略

      KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略凭据策略

  5. 获取目标 Role ARN

    1. 身份管理 > 角色页面,单击目标角色名称。

    2. 进入角色详情页,在ARN区域可获取OIDC Role ARN信息。

      说明

      Role ARNRAM角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::$accountID:role/$roleName。$accountID为阿里云账号ID。$roleNameRAM角色名称。

  6. 签发并保存OIDC令牌(OIDC Token)文件

    阿里云不支持在控制台上直接通过OIDC登录,但可以通过编程方式完成OIDC SSO流程。获取OIDC令牌涉及一个OAuth流程,常用的方法包括标准的OAuth 2.0流程,从OIDC IdP,获取OIDC Token。例如当应用程序运行于已启用RRSA功能的ACK集群中时,集群将自动为该应用Pod创建和挂载相应的服务账户OIDC Token文件。

步骤2:设置环境变量或配置文件

SDK支持通过以下两种方式获取访问凭证:

  • 读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见Linux、macOSWindows系统配置环境变量

    警告

    参数名称不可修改,否则SDK无法识别。

  • 读取配置文件:

    • 默认配置文件为secretsmanager.properties(不可更改名称)为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:

      • Java:将配置文件放在src/main/resources目录下,以便在编译时自动包含在类路径中。

      • Go:通常将配置文件放在项目的根目录或专门的config目录中,然后通过代码加载文件。

      • Python:将配置文件放在项目目录中,或在特定的config目录中,并使用适当的方法(如os.pathpkg_resources)来加载。

    • 若使用自定义配置文件,需要在初始化客户端时,指定配置文件地址(#customConfigFileName#)。

配置文件

  • 专属网关

    # 访问凭据类型
    credentials_type=oidc_role_arn
    # 角色ARN (可选,不填则使用阿里云默认凭据链)
    credentials_role_arn=<role arn>
    # OIDC提供者ARN (可选,不填则使用阿里云默认凭据链)
    credentials_oidc_provider_arn=<oidc provider arn>
    # OIDC令牌文件路径 (可选,不填则使用阿里云默认凭据链)
    credentials_oidc_token_file_path=<oidc token file path>
    # KMS服务地域及实例ID
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共享网关

    # 访问凭据类型
    credentials_type=oidc_role_arn
    # 角色ARN (可选,不填则使用阿里云默认凭据链)
    credentials_role_arn=<role arn>
    # OIDC提供者ARN (可选,不填则使用阿里云默认凭据链)
    credentials_oidc_provider_arn=<oidc provider arn>
    # OIDC令牌文件路径 (可选,不填则使用阿里云默认凭据链)
    credentials_oidc_token_file_path=<oidc token file path>
    # 关联的KMS服务地域
    cache_client_region_id=[{"regionId":"<regionId>"}]
  • 共享网关(VPC)

    # 访问凭据类型
    credentials_type=oidc_role_arn
    # 角色ARN (可选,不填则使用阿里云默认凭据链)
    credentials_role_arn=<role arn>
    # OIDC提供者ARN (可选,不填则使用阿里云默认凭据链)
    credentials_oidc_provider_arn=<oidc provider arn>
    # OIDC令牌文件路径 (可选,不填则使用阿里云默认凭据链)
    credentials_oidc_token_file_path=<oidc token file path>
    # 关联的KMS服务地域及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

环境变量

参数

参数值

credentials_type

固定取值oidc_role_arn。

credentials_role_arn

OIDC身份提供商的RAM角色的资源ARN。可选,不填默认使用阿里云默认凭据链

credentials_oidc_provider_arn

OIDC身份提供商ARN。可选,不填默认使用阿里云默认凭据链

credentials_oidc_token_file_path

保存OIDC Token的文件相对或绝对路径。可选,不填默认使用阿里云默认凭据链

cache_client_region_id

  • 专属网关:[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共享网关:[{"regionId":"<your region id>"}]。

    重要
    • 请将<regionId>替换为真实的地域ID<you kms instanceId>替换为真实的实例ID。

    • Linux系统下,使用export命令设置环境变量时,请添加转义字符,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共享网关(VPC)时,格式为 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

AK+RamRoleArn

说明

V1 SDK支持从默认环境变量和配置文件读取RamRoleArn信息,SDK 2.0不支持。若需使用SDK 2.0+(AK+RamRoleArn)模式,请联系技术支持人员。

步骤1:创建RamRoleArn并配置权限

RAM用户或云产品可以通过扮演角色的方式获取临时权限(STS Token),而不是直接使用长期密钥,降低了密钥泄露的风险。例如,在临时的数据处理任务中,RAM用户或云产品临时扮演一个具有特定RamRoleArn的角色,完成任务后角色权限被收回,减少泄露风险。

  1. 创建用户AK

    1. 登录RAM控制台,在身份管理 > 用户页面,单击目标RAM用户名称。

    2. RAM用户分配系统策略 AliyunSTSAssumeRoleAccess或包含权限操作sts:AssumeRole的自定义策略。

    3. 认证管理页签下的AccessKey区域,单击创建AccessKey,并按照指引完成创建。

  2. 创建RAM角色并授权:

    1. 身份管理 > 角色页面,单击创建角色具体操作,请参见创建RAM角色

    2. 授予RAM角色访问KMS的权限。

      • 方式一:设置基于身份的策略

        单击RAM角色操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考

        说明

        同时支持自定义权限策略,具体操作请参见创建自定义权限策略

      • 方式二:设置基于资源的策略

        KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略凭据策略

  3. 获取目标RAM角色的RamRoleArn。具体操作,请参见查看RAM角色

    1. 身份管理 > 角色页面,单击目标角色名称。

    2. 进入角色详情页,在ARN区域可获取RamRoleArn信息。

      说明

      RamRoleArnRAM角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::$accountID:role/$roleName。$accountID为阿里云账号ID。$roleNameRAM角色名称。

步骤2:设置环境变量或配置文件

SDK支持通过以下两种方式获取访问凭证:

  • 读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见Linux、macOSWindows系统配置环境变量

    警告

    参数名称不可修改,否则SDK无法识别。

  • 读取配置文件:

    • 默认配置文件为secretsmanager.properties(不可更改名称)为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:

      • Java:将配置文件放在src/main/resources目录下,以便在编译时自动包含在类路径中。

      • Go:通常将配置文件放在项目的根目录或专门的config目录中,然后通过代码加载文件。

      • Python:将配置文件放在项目目录中,或在特定的config目录中,并使用适当的方法(如os.pathpkg_resources)来加载。

    • 若使用自定义配置文件,需要在初始化客户端时,指定配置文件地址(#customConfigFileName#)。

配置文件

  • 专属网关

    # 访问凭据类型
    credentials_type=ram_role
    # 角色名称
    credentials_role_session_name=#role name#
    # 资源短名称
    credentials_role_arn=#role arn#
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    #访问KMS实例网关时,使用如下配置
    cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]
  • 共享网关

    # 访问凭据类型
    credentials_type=ram_role
    # 角色名称
    credentials_role_session_name=#role name#
    # 资源短名称
    credentials_role_arn=#role arn#
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 关联的KMS服务地域
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 共享网关(VPC)

    # 访问凭据类型
    credentials_type=ram_role
    # 角色名称
    credentials_role_session_name=#role name#
    # 资源短名称
    credentials_role_arn=#role arn#
    # AK
    credentials_access_key_id=#access key id#
    # SK
    credentials_access_secret=#access key secret#
    # 关联的KMS服务地域及VPC Endpoint
    cache_client_region_id=[{"regionId":"#regionId#","endpoint":"kms-vpc.#regionId#.aliyuncs.com","vpc":"true"}]

环境变量

参数

参数值

credentials_type

ram_rolests

credentials_role_session_name

RAM角色的名称。

credentials_role_arn

RAM角色的资源ARN。

credentials_access_key_id

AccessKey ID。

credentials_access_secret

AccessKey Secret。

cache_client_region_id

  • 专属网关:[{"regionId":"<regionId>","endpoint":"<you kms instanceId>.cryptoservice.kms.aliyuncs.com"}]

  • 共享网关:[{"regionId":"<your region id>"}]。

    重要
    • 请将<regionId>替换为真实的地域ID<you kms instanceId>替换为真实的实例ID。

    • Linux系统下,使用export命令设置环境变量时,请添加转义字符,如:[{\"regionId\":\"<your region id>\"}]

    • 使用共享网关(VPC)时,格式为 [{\"regionId\":\"<your region id>\",\"endpoint\":\"kms-vpc.<your region id>.aliyuncs.com\",\"vpc\":\"true\"}]

ClientKey(不推荐)

说明

V1 SDK支持ClientKey凭证,SDK 2.0不支持。

共享网关

步骤1:创建ClientKey

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击应用接入 > 多云接入(原接入点)

  2. 创建网络规则(非必须)。

    说明

    如果您不需要基于来源IP限制访问,则不需要设置网络规则。但为了更高的安全性,通常建议您合理设置。

    1. 单击网络规则页签,然后单击创建网络规则

    2. 创建网络规则面板,网络类型选择Public,填写允许访问的源IP地址后,单击确定

  3. 创建权限策略。

    1. 单击权限策略,然后单击创建权限策略

    2. 创建权限策略面板,按照下方提示完成共享网关配置后,单击确定

      1. 作用域KMS共享网关

      2. 允许访问的资源:勾选你需要访问的凭据

      3. 网络控制规则(非必须):勾选步骤二创建网络规则。

  4. 创建应用接入点AAP。

    1. 单击应用接入页签,然后单击创建应用接入点,。

    2. 创建应用接入点面板,创建模式选择标准创建,然后按照下方提示完成各项配置。

      配置项

      说明

      认证方式

      选择ClientKey

      Client Key加密口令

      设置8~64位包含数字、英文大小写、特殊字符~!@#$%^&*?_-的字符串

      有效期

      重要

      推荐设置为1年,以降低ClientKey被泄露的风险。请务必在到期前更换,以免无法正常访问KMS。具体操作,请参见更换ClientKey

      权限策略

      选择您步骤三创建的权限策略。

    3. 单击确定,浏览器会自动下载ClientKey。ClientKey包含以下内容:

      • 应用身份凭证内容ClientKeyContent):文件名默认为clientKey_****.json

      • 凭证口令(ClientKeyPassword):文件名默认为clientKey_****_Password.txt

步骤2:设置环境变量或配置文件

  • 读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见Linux、macOSWindows系统配置环境变量

    警告

    参数名称不可修改,否则SDK无法识别。

  • 读取配置文件:

    • 默认配置文件为secretsmanager.properties(不可更改名称)为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:

      • Java:将配置文件放在src/main/resources目录下,以便在编译时自动包含在类路径中。

      • Go:通常将配置文件放在项目的根目录或专门的config目录中,然后通过代码加载文件。

      • Python:将配置文件放在项目目录中,或在特定的config目录中,并使用适当的方法(如os.pathpkg_resources)来加载。

    • 若使用自定义配置文件,需要在初始化客户端时,指定配置文件地址(#customConfigFileName#)。

配置文件

  • 方案一:配置ClientKey凭证口令(clientKey_****_Password.txt)文件的路径,由SDK读取其中的内容。

    # 访问凭据类型
    credentials_type=client_key
    
    # 存放凭证口令(ClientKeyPassword)的文件的绝对路径或相对路径,即为clientKey_****_Password.txt的存放位置
    client_key_password_from_file_path=#your client key private key password file path#
    
    # 存放应用身份凭证内容(ClientKeyContent)文件的绝对路径或相对路径。即clientKey_****.json的存放位置。
    client_key_private_key_path=#your client key private key file path#
    
    # 关联的KMS服务地域
    cache_client_region_id=[{"regionId":"#regionId#"}]
  • 方案二:直接配置ClientKey凭证口令(ClientKeyPassword)内容

    警告

    请先将凭证口令(ClientKeyPassword)clientKey_****_Password.txt中的内容,存放至自定义环境变量(如clientKeyPassword_content)中。

    # 访问凭据类型
    credentials_type=client_key
    
    # 存放凭证口令(ClientKeyPassword)内容的环境变量名称,如 clientKeyPassword_content
    client_key_password_from_env_variable=#your client key private key password environment variable name#
    
    # Client Key私钥文件路径
    client_key_private_key_path=#your client key private key file path#
    
    # 关联的KMS服务地域
    cache_client_region_id=[{"regionId":"#regionId#"}]

环境变量

  • 方案一:配置ClientKey凭证口令(clientKey_****_Password.txt)文件的路径,由SDK读取其中的内容。

    参数

    参数值

    credentials_type

    固定取值client_key。

    client_key_password_from_file_path

    存放凭证口令(ClientKeyPassword)clientKey_****_Password.txt文件的绝对路径或相对路径。

    client_key_private_key_path

    存放应用身份凭证内容ClientKeyContent)clientKey_****.json文件的绝对路径或相对路径名。

    cache_client_region_id

    格式为[{"regionId":"<your region id>"}],请将<your region id>替换为您真实的地域ID。

    重要

    Linux系统下,使用export命令设置环境变量时,请添加转义字符,即[{\"regionId\":\"<your region id>\"}]

  • 方案二:直接配置ClientKey凭证口令(ClientKeyPassword)内容

    警告

    请先将凭证口令(ClientKeyPassword)clientKey_****_Password.txt中的内容,存放至自定义环境变量(如clientKeyPassword_content)中。

    参数名称

    参数值

    credentials_type

    固定取值client_key。

    client_key_password_from_env_variable

    存放凭证口令(ClientKeyPassword)clientKey_****_Password.txt中内容的环境变量名称,如clientKeyPassword_content

    client_key_private_key_path

    存放应用身份凭证内容ClientKeyContent)clientKey_****.json文件的绝对路径或相对路径名。

    cache_client_region_id

    格式为[{"regionId":"<your region id>"}],

    重要
    • 请将<your region id>替换为真实的地域ID。

    • Linux系统下,使用export命令设置环境变量时,请添加转义字符,即[{\"regionId\":\"<your region id>\"}]

专属网关

步骤1:创建ClientKey

ClientKey支持快速创建和标准创建两种方式。关于ClientKey的详细介绍,请参见应用接入点概述创建应用接入点

  • 方式一:快速创建

    便捷高效适合于快速测试和开发场景,该方式创建的访问凭证可以访问KMS实例的全部资源。

    1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击应用接入 > 多云接入(原接入点)

    2. 应用接入页签,单击创建应用接入点,在创建应用接入点面板完成各项配置。

      配置项

      说明

      创建模式

      选择快速创建

      作用域(KMS实例)

      选择应用要访问的KMS实例。

      应用接入点名称

      自定义应用接入点的名称。

      认证方式

      默认为ClientKey,不支持修改。

      默认权限策略

      默认为key/*secret/*,不支持修改。即应用可以访问指定KMS实例中的所有密钥和凭据。

    3. 单击确定,浏览器会自动下载ClientKey。ClientKey包含以下内容:

      • 应用身份凭证内容ClientKeyContent):文件名默认为clientKey_****.json

      • 凭证口令(ClientKeyPassword):文件名默认为clientKey_****_Password.txt

  • 方式二:标准创建

    若希望对资源设置更精细化的访问权限,建议使用标准创建。

    1. 请参考创建应用接入点中的标准创建方式,创建用于访问专属网关的ClientKey。关键配置说明如下:

      1. 配置网络规则时,网络类型选择Private

      2. 配置权限规则作用域时,请选择对应的KMS实例ID

    2. 创建完成后,浏览器会自动下载ClientKey。ClientKey包含以下内容:

      • 应用身份凭证内容ClientKeyContent):文件名默认为clientKey_****.json

      • 凭证口令(ClientKeyPassword):文件名默认为clientKey_****_Password.txt

步骤2:配置环境变量或配置文件

  • 读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见Linux、macOSWindows系统配置环境变量

    警告

    参数名称不可修改,否则SDK无法识别。

  • 读取配置文件:

    • 默认配置文件为secretsmanager.properties(不可更改名称)为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:

      • Java:将配置文件放在src/main/resources目录下,以便在编译时自动包含在类路径中。

      • Go:通常将配置文件放在项目的根目录或专门的config目录中,然后通过代码加载文件。

      • Python:将配置文件放在项目目录中,或在特定的config目录中,并使用适当的方法(如os.pathpkg_resources)来加载。

    • 若使用自定义配置文件,需要在初始化客户端时,指定配置文件地址(#customConfigFileName#)。

配置文件

  • 方案一:配置ClientKey凭证口令(clientKey_****_Password.txt)文件的路径,由SDK读取其中的内容。

    cache_client_dkms_config_info=[{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromFilePath":"< your password file path >","clientKeyFile":"<your Client Key file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]
  • 方案二:直接配置ClientKey凭证口令(ClientKeyPassword)内容

    警告

    请先将凭证口令(ClientKeyPassword)clientKey_****_Password.txt中的内容,存放至自定义环境变量(如clientKeyPassword_content)中。

    cache_client_dkms_config_info=[{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromEnvVariable":"<YOUR_PASSWORD_ENV_VARIABLE>","clientKeyFile":"<your ClientKey file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]

环境变量

  • 方案一:配置ClientKey凭证口令(clientKey_****_Password.txt)文件的路径,由SDK读取其中的内容。

    参数

    参数值

    cache_client_dkms_config_info

    参数值格式为:[{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromFilePath":"< your password file path >","clientKeyFile":"<your Client Key file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]

  • 方案二:直接配置ClientKey凭证口令(ClientKeyPassword)内容

    警告

    请先将凭证口令(ClientKeyPassword)clientKey_****_Password.txt中的内容,存放至自定义环境变量(如clientKeyPassword_content)中。

    参数

    参数格式

    cache_client_dkms_config_info

    [{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromEnvVariable":"<YOUR_PASSWORD_ENV_VARIABLE>","clientKeyFile":"<your ClientKey file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]

cache_client_dkms_config_info参数说明

配置项

配置项说明

regionId

KMS实例所在地域ID,具体的地域ID,请参见地域和可用区

endpoint

KMS实例的域名地址,格式为{实例ID}.kms.aliyuncs.com

clientKeyFile

存放应用身份凭证内容ClientKeyContent)clientKey_****.json文件的绝对路径或相对路径名。

passwordFromFilePath

存放凭证口令(ClientKeyPassword)clientKey_****_Password.txt文件的绝对路径或相对路径。

passwordFromEnvVariable

存放凭证口令(ClientKeyPassword)clientKey_****_Password.txt中内容的环境变量名称,如clientKeyPassword_content

ignoreSslCerts

是否忽略KMS实例SSL证书的有效性检查。KMS实例内置SSL证书,使用SSL/TLS协议用于身份验证和加密通信。取值:

  • true:表示忽略,不检查KMS实例SSL证书的有效性。

    说明

    取值为true时,无需配置caFilePath

  • false:表示验证,检查KMS实例SSL证书的有效性。

caFilePath

KMS实例CA证书文件的绝对路径或相对路径。

说明

KMS实例CA证书,用于检查KMS实例SSL证书的有效性,如何获取CA证书,请参见获取KMS实例CA证书

获取凭据

本文示例均以SDK 2.0 为例。V1 SDK示例,请前往V1 SDK源代码库

JAVA

  • 使用默认配置:此方式SDK会自动读取secretsmanager.properties文件或环境变量中的凭证信息。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.SecretInfo;
    
    public class CacheClientEnvironmentSample {
    
        public static void main(String[] args) {
            try {
                SecretCacheClient client = SecretCacheClientBuilder.newClient();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
                System.out.println(secretInfo);
            } catch (CacheSecretException e) {
                e.printStackTrace();
            }
        }
    }
  • 使用自定义配置文件:此方式适用于配置文件未使用默认文件名或自定义文件路径的场景,需指定配置文件的路径(#customConfigFileName#)。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.SecretInfo;
    import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
    
    public class CacheClientCustomConfigFileSample {
    
        public static void main(String[] args) {
            try {
                SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                        BaseSecretManagerClientBuilder.standard().withCustomConfigFile("#customConfigFileName#").build()).build();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
                System.out.println(secretInfo);
            } catch (CacheSecretException e) {
                System.out.println("CacheSecretException:" + e.getMessage());
            }
        }
    }
  • 通过硬编码方式(指定参数accessKey、accessSecret、regionId等):此方式,无需将AK写入配置文件或默认环境变量中。只需在初始化客户端时,传入对应的ak和访问地域信息即可。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.RegionInfo;
    import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.utils.CredentialsProviderUtils;
    
    public class CacheClientWithCaCertificateSample {
        public static void main(String[] args) {
            try {
                // 创建包含证书路径的 RegionInfo
                RegionInfo regionInfo = new RegionInfo();
                regionInfo.setRegionId("#regionId#");
                regionInfo.setEndpoint("<you kms instanceId>.cryptoservice.kms.aliyuncs.com"); //专属网关访问地址,若访问共享网关,可不设置。 
                SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                        BaseSecretManagerClientBuilder.standard()
                                .withCredentialsProvider(CredentialsProviderUtils.withAccessKey(
                                        System.getenv("#accessKeyId#"), 
                                        System.getenv("#accessKeySecret#")))
                                .addRegion(regionInfo) 
                                .build())
                        .build();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
            } catch (CacheSecretException e) {
                e.printStackTrace();
            }
        }
    }
  • 使用阿里云默认凭据链:默认凭据链是一种兜底策略,按照内置的凭据查找顺序逐层向下查找,直至获取凭据信息。若所有情况均未成功则表示鉴权失败,无法获取凭据。

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.SecretInfo;
    import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
    
    public class CacheClientDefaultCredentialChainSample {
    
        public static void main(String[] args) {
            try {
                SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                        BaseSecretManagerClientBuilder.standard().withRegion("#regionId#").build()).build();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
                System.out.println(secretInfo);
            } catch (CacheSecretException e) {
                e.printStackTrace();
            }
        }
    }
说明

更多示例,请参见凭据客户端SDK示例

Python

  • 使用默认配置:此方式SDK会自动读取secretsmanager.properties文件或环境变量中的凭证信息。

    from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    
    if __name__ == '__main__':
        secret_cache_client = SecretManagerCacheClientBuilder.new_client()
        secret_info = secret_cache_client.get_secret_info("#secretName#")
        print(secret_info.__dict__)
  • 使用自定义配置文件:此方式适用于配置文件未使用默认文件名或自定义文件路径的场景,需指定配置文件的路径(#customConfigFileName#)。

    from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import DefaultSecretManagerClientBuilder
    
    if __name__ == '__main__':
        secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
            DefaultSecretManagerClientBuilder.standard().with_custom_config_file("#customConfigFileName#").build()).build()
        secret_info = secret_cache_client.get_secret_info("#secretName#")
        print(secret_info.__dict__)
  • 通过硬编码方式(指定参数accessKey、accessSecret、regionId等):此方式,无需将AK写入配置文件或默认环境变量中。只需在初始化客户端时,传入对应的ak和访问地域信息即可。

    import os
    
    from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import \
        DefaultSecretManagerClientBuilder
    from alibabacloud_secretsmanager_client_v2.model.region_info import RegionInfo
    
    if __name__ == '__main__':
        # 创建包含 CA 证书路径的 RegionInfo
        region_info = RegionInfo(
            region_id="#regionId#",
            endpoint="#kmsInstanceEndpoint#",  # 专属网关访问地址,若访问共享网关,可不设置。 
        )
        secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
            DefaultSecretManagerClientBuilder.standard()
            .with_access_key(
                os.getenv("#accessKeyId#"),
                os.getenv("#accessKeySecret#"))
            .add_region_info(region_info)  
            .build()).build()
        # ... 使用 client
  • 使用阿里云默认凭据链:默认凭据链是一种兜底策略,按照内置的凭据查找顺序逐层向下查找,直至获取凭据信息。若所有情况均未成功则表示鉴权失败,无法获取凭据。

    from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
    from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import DefaultSecretManagerClientBuilder
    
    if __name__ == '__main__':
        secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
            DefaultSecretManagerClientBuilder.standard().with_region("#regionId#").build()).build()
        secret_info = secret_cache_client.get_secret_info("#secretName#")
        print(secret_info.__dict__)
说明

更多示例,请参见凭据客户端SDK示例

Go

  • 使用默认配置:此方式SDK会自动读取secretsmanager.properties文件或环境变量中的凭证信息。

    package main
    
    import "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
    
    func main() {
        client, err := sdk.NewClient()
        if err != nil {
            // Handle exceptions
            panic(err)
        }
        secretInfo, err := client.GetSecretInfo("#secretName#")
        if err != nil {
            // Handle exceptions
            panic(err)
        }
    }
  • 使用自定义配置文件:此方式适用于配置文件未使用默认文件名或自定义文件路径的场景,需指定配置文件的路径(#customConfigFileName#)。

    package main
    
    import (
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
    )
    
    func main() {
        client, err := sdk.NewSecretCacheClientBuilder(
                service.NewDefaultSecretManagerClientBuilder().Standard().WithCustomConfigFile("#customConfigFileName#").Build()).Build()
        if err != nil {
            // Handle exceptions
            panic(err)
        }
        secretInfo, err := client.GetSecretInfo("#secretName#")
        if err != nil {
            // Handle exceptions
            panic(err)
        }
    }
  • 通过硬编码方式(指定参数accessKey、accessSecret、regionId等):此方式,无需将AK写入配置文件或默认环境变量中。只需在初始化客户端时,传入对应的ak和访问地域信息即可。

    package main
    import (
      "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
      "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/models"
      "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
      "os"
    )
    
    func main() {
      regionInfo := &models.RegionInfo{
        RegionId:   "#regionId#",
        Endpoint:   "<kmsInstanceId>.cryptoservice.kms.aliyuncs.com", //专属网关访问地址,若访问共享网关,可不设置。
      }
    
      client, err := sdk.NewSecretCacheClientBuilder(
        service.NewDefaultSecretManagerClientBuilder().
          Standard().
          WithAccessKey(os.Getenv("#accessKeyId#"), os.Getenv("#accessKeySecret#")).
          AddRegionInfo(regionInfo).
          Build()).Build()
      if err != nil {
        // Handle exceptions
        panic(err)
      }
      secretInfo, err := client.GetSecretInfo("#secretName#")
      if err != nil {
        // Handle exceptions
        panic(err)
      }
    }
  • 使用阿里云默认凭据链:默认凭据链是一种兜底策略,按照内置的凭据查找顺序逐层向下查找,直至获取凭据信息。若所有情况均未成功则表示鉴权失败,无法获取凭据。

    package main
    
    import (
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
        "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
    )
    
    func main() {
        client, err := sdk.NewSecretCacheClientBuilder(
                service.NewDefaultSecretManagerClientBuilder().Standard().WithRegion("#regionId#").Build()).Build()
        if err != nil {
            // Handle exceptions
            panic(err)
        }
        secretInfo, err := client.GetSecretInfo("#secretName#")
        if err != nil {
            // Handle exceptions
            panic(err)
        }
    }
说明

更多示例,请参见凭据客户端SDK示例

常见问题

  1. 出现 "cannot find the built-in ca certificate for region[$regionId], please provide the caFilePath parameter." 错误怎么办?

    • 问题原因: SDK 中该地域内置的 CA 证书不存在。

    • 解决方案:

      • 请更新 SDK 到最新V2版本

      • 如果已更新到最新版本仍然报此错误,可以下载最新的CA证书(CA证书可在密钥管理服务实例管理> 实例详情页面下载),并传入CA证书路径参数。具体方式如下:

        通过环境变量方式传递 CA 证书路径 

        在环境变量配置cache_client_region_id中添加 CA 证书路径参数:

        # 关联的KMS服务地域,包含CA证书路径和实例地址
        cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<kmsInstanceId>.cryptoservice.kms.aliyuncs.com","caFilePath":"<ca证书文件路径>"}]

        通过配置文件方式传递 CA 证书路径 

        在 secretsmanager.properties 或自定义配置文件中添加 caFilePath 参数:

        # 关联的KMS服务地域,包含CA证书路径和实例地址
        cache_client_region_id=[{"regionId":"<regionId>","endpoint":"<kmsInstanceId>.cryptoservice.kms.aliyuncs.com","caFilePath":"<ca证书文件路径>"}]
        

        硬编码方式传递 CA 证书路径

        import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
        import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
        import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
        import com.aliyuncs.kms.secretsmanager.client.v2.model.RegionInfo;
        import com.aliyuncs.kms.secretsmanager.client.v2.service.BaseSecretManagerClientBuilder;
        import com.aliyuncs.kms.secretsmanager.client.v2.utils.CredentialsProviderUtils;
        
        public class CacheClientWithCaCertificateSample {
            public static void main(String[] args) {
                try {
                    // 创建包含 CA 证书路径的 RegionInfo
                    RegionInfo regionInfo = new RegionInfo();
                    regionInfo.setRegionId("#regionId#");
                    regionInfo.setEndpoint("#kmsInstanceEndpoint#"); // 指定 KMS 实例地址
                    regionInfo.setCaFilePath("#caFilePath#"); // 指定 CA 证书文件路径
                    
                    SecretCacheClient client = SecretCacheClientBuilder.newCacheClientBuilder(
                            BaseSecretManagerClientBuilder.standard()
                                    .withCredentialsProvider(CredentialsProviderUtils.withAccessKey(
                                            System.getenv("#accessKeyId#"), 
                                            System.getenv("#accessKeySecret#")))
                                    .addRegion(regionInfo) // 使用带 CA 证书路径的 RegionInfo
                                    .build())
                            .build();
                    // ... 使用 client
                } catch (CacheSecretException e) {
                    e.printStackTrace();
                }
            }
        }
        import os
        
        from alibabacloud_secretsmanager_client_v2.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder
        from alibabacloud_secretsmanager_client_v2.service.default_secret_manager_client_builder import \
            DefaultSecretManagerClientBuilder
        from alibabacloud_secretsmanager_client_v2.model.region_info import RegionInfo
        
        if __name__ == '__main__':
            # 创建包含 CA 证书路径的 RegionInfo
            region_info = RegionInfo(
                region_id="#regionId#",
                endpoint="#kmsInstanceEndpoint#",  # 指定 KMS 实例地址
                ca_file_path="#caFilePath#"  # 指定 CA 证书文件路径
            )
            secret_cache_client = SecretManagerCacheClientBuilder.new_cache_client_builder(
                DefaultSecretManagerClientBuilder.standard()
                .with_access_key(
                    os.getenv("#accessKeyId#"),
                    os.getenv("#accessKeySecret#"))
                .add_region_info(region_info)  # 使用带 CA 证书路径的 RegionInfo
                .build()).build()
            # ... 使用 client
        package main
        import (
          "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk"
          "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/models"
          "github.com/aliyun/alibabacloud-secretsmanager-client-go-v2/sdk/service"
          "os"
        )
        
        func main() {
          // 创建包含 CA 证书路径的 RegionInfo
          regionInfo := &models.RegionInfo{
            RegionId:   "#regionId#",
            Endpoint:   "#kmsInstanceEndpoint#", // 指定 KMS 实例地址
            CaFilePath: "#caFilePath#",          // 指定 CA 证书文件路径
          }
        
          client, err := sdk.NewSecretCacheClientBuilder(
            service.NewDefaultSecretManagerClientBuilder().
              Standard().
              WithAccessKey(os.Getenv("#accessKeyId#"), os.Getenv("#accessKeySecret#")).
              AddRegionInfo(regionInfo). // 使用带 CA 证书路径的 RegionInfo
              Build()).Build()
          if err != nil {
            // Handle exceptions
            panic(err)
          }
          secretInfo, err := client.GetSecretInfo("#secretName#")
          if err != nil {
            // Handle exceptions
            panic(err)
          }
        }
  2. 出现 “ env/config credentials type[client_key] is illegal”错误怎么办?

    • 问题原因:阿里云凭据管理客户端SDK 2.0不支持Client Key鉴权方式。

    • 解决方案

      • 参考配置鉴权访问凭证,更换凭证方式为AK、ECS RAM RoleOIDC Role Arn。

      • 切换SDK版本至V1 SDK(不推荐)。