凭据客户端是基于KMS OpenAPI和KMS实例API的自定义封装,封装了在应用中缓存和刷新凭据的功能,业务稳定性更高且更易于开发者在业务应用中集成。凭据客户端支持获取所有凭据类型的凭据值。本文介绍如何安装及使用凭据客户端。
凭据客户端SDK介绍
凭据客户端基于API,封装了凭据缓存、最佳实践和设计模式,更易于开发者在业务系统中集成。凭据客户端具有以下:
此外KMS还提供了KMS实例SDK和阿里云SDK,也可以用于获取凭据值。详细信息,请参见SDK参考。
如果需要对凭据进行管控类操作,仅支持使用阿里云SDK。
SDK 优势
支持开发者在应用中快速集成凭据能力,一行代码读取凭据信息。
封装凭据在应用中缓存和刷新的功能。
封装API错误的重试机制,智能处理服务端错误。
开放插件式设计模式,支持开发者自定义扩展缓存、错误重试等功能模块。
SDK 版本
凭据客户端V2.0版本已发布,推荐使用V2.0版本。V1和SDK 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支持自动识别配置参数并据此选择合适的网关进行连接。通过这种灵活的鉴权机制,用户无需手动设置网关类型,鉴权步骤如下:
设置环境变量或准备配置文件,确保包含所有必要的凭证信息(专属网关和共享网关参数略有差异)。
初始化客户端,SDK将会自动读取这些信息并识别网关。
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-v2Go语言下凭据客户端依赖的
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),从而调用KMS的OpenAPI。
具体操作,请参见实例RAM角色。
登录RAM控制台,创建可信实体为阿里云服务的RAM角色。
信任主体类型:选择云服务器。
信任主体名称:选择云服务器ECS。
授予RAM角色访问KMS的权限。
方式一:设置基于身份的策略
单击RAM角色操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考。
说明同时支持自定义权限策略,具体操作请参见创建自定义权限策略。
方式二:设置基于资源的策略
KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略、凭据策略。
登录ECS管理控制台,将RAM角色授予ECS实例。

步骤2:设置环境变量或配置文件
SDK支持通过以下两种方式获取访问凭证:
读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
警告参数名称不可修改,否则SDK无法识别。
读取配置文件:
默认配置文件为
secretsmanager.properties(不可更改名称)。为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:Java:将配置文件放在
src/main/resources目录下,以便在编译时自动包含在类路径中。Go:通常将配置文件放在项目的根目录或专门的
config目录中,然后通过代码加载文件。Python:将配置文件放在项目目录中,或在特定的
config目录中,并使用适当的方法(如os.path或pkg_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 |
|
AccessKey
步骤1:创建 AccessKey 并配置权限
阿里云账号默认有所有资源的Administrator权限且不可修改,为了确保资源安全,建议使用RAM用户创建AccessKey,并根据需求进行最小化授权。
登录RAM控制台,在页用户面,单击目标RAM用户名称。
在认证管理页签下的AccessKey区域,单击创建AccessKey,并按照指引完成创建。
授予RAM用户访问KMS的权限。
方式一:设置基于身份的策略
单击RAM用户操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考。
说明同时支持自定义权限策略,具体操作请参见创建自定义权限策略。
方式二:设置基于资源的策略
KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略、凭据策略。
步骤2:设置环境变量或配置文件
SDK支持通过以下两种方式获取访问凭证:
读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
警告参数名称不可修改,否则SDK无法识别。
读取配置文件:
默认配置文件为
secretsmanager.properties(不可更改名称)。为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:Java:将配置文件放在
src/main/resources目录下,以便在编译时自动包含在类路径中。Go:通常将配置文件放在项目的根目录或专门的
config目录中,然后通过代码加载文件。Python:将配置文件放在项目目录中,或在特定的
config目录中,并使用适当的方法(如os.path或pkg_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 |
|
OIDC Role ARN
仅凭据客户端SDK 2.0 支持OIDC Role ARN 凭证,V1 SDK不支持。
步骤1:创建OIDC Role ARN 并配置权限
创建OIDC身份提供商
使用RAM管理员登录RAM控制台,进入集成管理 > SSO管理页面,并选择角色SSO。
在OIDC页签,单击创建身份提供商。
在创建身份提供商页面,设置身份提供商信息。具体配置,请参见管理OIDC身份提供商。
获取并保存OIDC身份信息(ARN和客户端ID)
进入集成管理 > SSO管理页面,单击目标身份提供商名称。
进入身份提供商详情页,可查看ARN和客户端 ID。
创建OIDC身份提供商的RAM角色并授权
使用RAM管理员登录RAM控制台,在页面。
单击创建角色,在创建页面右上角,单击切换编辑器。
在编辑器中指定具体的OIDC身份提供商。选择可视化编辑模式,并参考如下说明,完成配置。
说明更多模式,请参见创建OIDC身份提供商的RAM角色。
在主体中选择身份提供商后,单击下方编辑。
在添加主体弹窗中,参考如下说明,完成配置。
身份提供商类型:选择OIDC。
身份提供商:选择之前创建的OIDC身份提供商。
授予OIDC RAM角色访问KMS的权限
方式一:设置基于身份的策略
返回身份管理角色列表页,单击目标OIDC 角色操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考。
说明同时支持自定义权限策略,具体操作请参见创建自定义权限策略。
方式二:设置基于资源的策略
KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略、凭据策略。
获取目标 Role ARN
在页面,单击目标角色名称。
进入角色详情页,在ARN区域可获取OIDC Role ARN信息。
说明Role ARN是RAM角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::$accountID:role/$roleName。$accountID为阿里云账号ID。$roleName为RAM角色名称。
签发并保存OIDC令牌(OIDC Token)文件
阿里云不支持在控制台上直接通过OIDC登录,但可以通过编程方式完成OIDC SSO流程。获取OIDC令牌涉及一个OAuth流程,常用的方法包括标准的OAuth 2.0流程,从OIDC IdP,获取OIDC Token。例如当应用程序运行于已启用RRSA功能的ACK集群中时,集群将自动为该应用Pod创建和挂载相应的服务账户OIDC Token文件。
步骤2:设置环境变量或配置文件
SDK支持通过以下两种方式获取访问凭证:
读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
警告参数名称不可修改,否则SDK无法识别。
读取配置文件:
默认配置文件为
secretsmanager.properties(不可更改名称)。为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:Java:将配置文件放在
src/main/resources目录下,以便在编译时自动包含在类路径中。Go:通常将配置文件放在项目的根目录或专门的
config目录中,然后通过代码加载文件。Python:将配置文件放在项目目录中,或在特定的
config目录中,并使用适当的方法(如os.path或pkg_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 |
|
AK+RamRoleArn
仅V1 SDK支持从默认环境变量和配置文件读取RamRoleArn信息,SDK 2.0不支持。若需使用SDK 2.0+(AK+RamRoleArn)模式,请联系技术支持人员。
步骤1:创建RamRoleArn并配置权限
RAM用户或云产品可以通过扮演角色的方式获取临时权限(STS Token),而不是直接使用长期密钥,降低了密钥泄露的风险。例如,在临时的数据处理任务中,RAM用户或云产品临时扮演一个具有特定RamRoleArn的角色,完成任务后角色权限被收回,减少泄露风险。
创建用户AK
登录RAM控制台,在页面,单击目标RAM用户名称。
为RAM用户分配系统策略
AliyunSTSAssumeRoleAccess或包含权限操作sts:AssumeRole的自定义策略。在认证管理页签下的AccessKey区域,单击创建AccessKey,并按照指引完成创建。
创建RAM角色并授权:
在页面,单击创建角色具体操作,请参见创建RAM角色。
授予RAM角色访问KMS的权限。
方式一:设置基于身份的策略
单击RAM角色操作列的新增授权,直接绑定KMS内置系统权限策略到RAM角色。KMS内置系统权限策略,请参见密钥管理服务系统权限策略参考。
说明同时支持自定义权限策略,具体操作请参见创建自定义权限策略。
方式二:设置基于资源的策略
KMS支持基于资源的策略,即为单个密钥和凭据设置访问权限,用于控制哪些阿里云账号、RAM用户、RAM角色有权限来管理或使用KMS密钥、凭据。详细介绍,请参见密钥策略、凭据策略。
获取目标RAM角色的RamRoleArn。具体操作,请参见查看RAM角色。
在页面,单击目标角色名称。
进入角色详情页,在ARN区域可获取RamRoleArn信息。
说明RamRoleArn是RAM角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::$accountID:role/$roleName。$accountID为阿里云账号ID。$roleName为RAM角色名称。
步骤2:设置环境变量或配置文件
SDK支持通过以下两种方式获取访问凭证:
读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
警告参数名称不可修改,否则SDK无法识别。
读取配置文件:
默认配置文件为
secretsmanager.properties(不可更改名称)。为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:Java:将配置文件放在
src/main/resources目录下,以便在编译时自动包含在类路径中。Go:通常将配置文件放在项目的根目录或专门的
config目录中,然后通过代码加载文件。Python:将配置文件放在项目目录中,或在特定的
config目录中,并使用适当的方法(如os.path或pkg_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_role或sts |
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 |
|
ClientKey(不推荐)
仅V1 SDK支持ClientKey凭证,SDK 2.0不支持。
共享网关
步骤1:创建ClientKey
登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击。
创建网络规则(非必须)。
说明如果您不需要基于来源IP限制访问,则不需要设置网络规则。但为了更高的安全性,通常建议您合理设置。
单击网络规则页签,然后单击创建网络规则。
在创建网络规则面板,网络类型选择Public,填写允许访问的源IP地址后,单击确定。
创建权限策略。
单击权限策略,然后单击创建权限策略。
在创建权限策略面板,按照下方提示完成共享网关配置后,单击确定。
作用域:KMS共享网关
允许访问的资源:勾选你需要访问的凭据
网络控制规则(非必须):勾选步骤二创建网络规则。
创建应用接入点AAP。
单击应用接入页签,然后单击创建应用接入点,。
在创建应用接入点面板,创建模式选择标准创建,然后按照下方提示完成各项配置。
配置项
说明
认证方式
选择ClientKey
Client Key加密口令
设置8~64位包含数字、英文大小写、特殊字符
~!@#$%^&*?_-的字符串有效期
重要推荐设置为1年,以降低ClientKey被泄露的风险。请务必在到期前更换,以免无法正常访问KMS。具体操作,请参见更换ClientKey。
权限策略
选择您步骤三创建的权限策略。
单击确定,浏览器会自动下载ClientKey。ClientKey包含以下内容:
应用身份凭证内容(ClientKeyContent):文件名默认为
clientKey_****.json凭证口令(ClientKeyPassword):文件名默认为
clientKey_****_Password.txt。
步骤2:设置环境变量或配置文件
读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
警告参数名称不可修改,否则SDK无法识别。
读取配置文件:
默认配置文件为
secretsmanager.properties(不可更改名称)。为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:Java:将配置文件放在
src/main/resources目录下,以便在编译时自动包含在类路径中。Go:通常将配置文件放在项目的根目录或专门的
config目录中,然后通过代码加载文件。Python:将配置文件放在项目目录中,或在特定的
config目录中,并使用适当的方法(如os.path或pkg_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实例的全部资源。
登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击。
在应用接入页签,单击创建应用接入点,在创建应用接入点面板完成各项配置。
配置项
说明
创建模式
选择快速创建。
作用域(KMS实例)
选择应用要访问的KMS实例。
应用接入点名称
自定义应用接入点的名称。
认证方式
默认为ClientKey,不支持修改。
默认权限策略
默认为
key/*secret/*,不支持修改。即应用可以访问指定KMS实例中的所有密钥和凭据。单击确定,浏览器会自动下载ClientKey。ClientKey包含以下内容:
应用身份凭证内容(ClientKeyContent):文件名默认为
clientKey_****.json凭证口令(ClientKeyPassword):文件名默认为
clientKey_****_Password.txt。
方式二:标准创建
若希望对资源设置更精细化的访问权限,建议使用标准创建。
请参考创建应用接入点中的标准创建方式,创建用于访问专属网关的ClientKey。关键配置说明如下:
配置网络规则时,网络类型选择Private。
配置权限规则作用域时,请选择对应的KMS实例ID。
创建完成后,浏览器会自动下载ClientKey。ClientKey包含以下内容:
应用身份凭证内容(ClientKeyContent):文件名默认为
clientKey_****.json凭证口令(ClientKeyPassword):文件名默认为
clientKey_****_Password.txt。
步骤2:配置环境变量或配置文件
读取环境变量:不同操作系统的环境变量配置方法不同,具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
警告参数名称不可修改,否则SDK无法识别。
读取配置文件:
默认配置文件为
secretsmanager.properties(不可更改名称)。为了确保应用程序能够正确加载配置文件,请将其放置在相应的配置目录中。以下是不同编程语言的通用配置目录:Java:将配置文件放在
src/main/resources目录下,以便在编译时自动包含在类路径中。Go:通常将配置文件放在项目的根目录或专门的
config目录中,然后通过代码加载文件。Python:将配置文件放在项目目录中,或在特定的
config目录中,并使用适当的方法(如os.path或pkg_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实例的域名地址,格式为 |
clientKeyFile | 存放应用身份凭证内容(ClientKeyContent)即 |
passwordFromFilePath | 存放凭证口令(ClientKeyPassword)即 |
passwordFromEnvVariable | 存放凭证口令(ClientKeyPassword)即 |
ignoreSslCerts | 是否忽略KMS实例SSL证书的有效性检查。KMS实例内置SSL证书,使用SSL/TLS协议用于身份验证和加密通信。取值:
|
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示例。
常见问题
出现 "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() # ... 使用 clientpackage 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) } }
出现 “ env/config credentials type[client_key] is illegal”错误怎么办?
问题原因:阿里云凭据管理客户端SDK 2.0不支持Client Key鉴权方式。
解决方案:
参考配置鉴权访问凭证,更换凭证方式为AK、ECS RAM Role或OIDC Role Arn。
切换SDK版本至V1 SDK(不推荐)。