ECS 快速接入是 KMS 提供的云原生凭据获取方案,用于通过在 ECS 实例上安装 KMS Agent,使应用程序通过本地 HTTP 请求获取凭据,无需在代码中管理 AccessKey。
概述
ECS 快速接入提供向导式的 Agent 安装与配置流程,将原本需要手动创建 RAM 角色、配置权限策略、安装 Agent 等多步操作整合为 3 步向导。
工作原理: ECS 实例上的应用程序发起 HTTP 请求后,本地 KMS Agent 接收请求并通过 RAM 角色或实例身份完成认证, KMS 服务验证权限并返回凭据,最终由 Agent 将凭据返回给应用程序。 Agent 在本地缓存凭据,减少重复请求,提升获取效率。
认证方式:
实例身份(ECS)(默认推荐): ECS 实例身份认证, Agent 自动从元数据服务获取身份证明,无需创建 RAM 角色,配置步骤最少。
RAMRole:需要手动创建 RAM 角色并绑定 ECS 实例,灵活但配置步骤更多,适用于需要复用已有 RAM 角色体系的场景。
适用范围
操作系统限制:仅支持 Linux 操作系统的 ECS 实例。
实例状态限制:ECS 实例必须处于 运行中(Running) 状态,已停止或已释放的实例无法安装 Agent。
网络与安全组限制:ECS 安全组需放行 KMS Agent 监听的 HTTP 端口(默认 2025 ),否则应用程序无法连接 Agent 。
存储空间限制:系统盘需具备足够的剩余存储空间,否则可能导致 Agent 安装失败。
实例身份(ECS)接入限制:
实例网关:实例版本需 ≥ 4.0.0。
共享网关:对实例版本无特殊要求。
配置接入
步骤 1 :权限配置
步骤 2 :安装 Agent
进入安装 Agent 页签后,根据步骤 1 中选择认证方式,选择对应的页签实例身份(ECS)或RAMRole。
配置基础参数:
参数
说明
AapArn
仅实例身份(ECS)需要配置,选择步骤 1 中创建的应用接入点。
本地主机HTTP端口号
默认值为 2025 。 KMS Agent 的 HTTP 服务默认监听地址为 127.0.0.1:2025 。
重要在 ECS 的安全组中放行该端口,具体操作参见安全组配置。
最大并发数
应用访问 Agent 时, Agent 能处理的最大并发请求数。默认值为 800 ,最大 1000 。
KMS地域
KMS 实例所在地域,例如 cn-hangzhou 。可以和 ECS 同地域,可不同地域。
不同地域时:确保 ECS 和 KMS 实例网络互通,具体参考通过高速通道实现本地 IDC 与专有网络互通、通过 VPN 网关实现本地 IDC 与专有网络互通或通过云企业网实现本地 IDC 与专有网络互通。
同地域时:若 ECS 和 KMS 实例属于不同 VPC ,将 ECS 所属 VPC 绑定到 KMS 实例以实现网络互通,具体操作参见绑定 VPC 到 KMS 实例。
访问KMS服务域名
KMS 服务的访问地址。
作用域选择KMS共享网关:
VPC 网络访问:填写 VPC 访问地址,例如
kms-vpc.cn-hangzhou.aliyuncs.com。公网访问:填写公网访问地址,例如
kms.cn-hangzhou.aliyuncs.com。
作用域选择指定的 KMS 实例:填写 KMS 私有网络地址,格式为
<YOUR_KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com。
内存限制
KMS Agent 可以缓存的凭据数,默认值 1000 ,最大值 1000 。
缓存时间TTL(秒)
Agent 的缓存时间 TTL ,建议根据凭据的轮转间隔设置,默认为 300 秒。
高级设置(可选):展开高级设置后显示以下配置项,一般使用默认值即可。
参数
说明
SSRF请求头
应用访问 Agent 时携带的 SSRF 请求头,默认为
["X-KMS-Token","X-Vault-Token"]。SSRF令牌环境变量
Agent 使用该环境变量中的文件验证 SSRF 请求,默认为
["KMS_TOKEN","KMS_SESSION_TOKEN","KMS_CONTAINER_AUTHORIZATION_TOKEN"]。日志级别
日志记录的级别,默认为 debug 。支持设置为 debug 、 info 、 warn 、 error ,建议使用默认取值 debug 以便调试。
日志路径
日志文件存储路径,默认为
./logs/。日志文件大小(MB)
单个日志文件的最大限制,默认取值 100 MiB 。
日志备份文件数
保留的日志文件数量,默认取值 2 。
配置完成后,单击确定, KMS 将通过云助手自动向目标 ECS 实例远程安装 Agent ,无需手动登录服务器操作。
步骤 3 :安装验证
安装验证页是配置向导的最后一个页签,在此页面可查看安装状态并获取应用程序集成代码示例。
单击刷新按钮,在KMS最近操作结果列查看安装状态。状态为运行中表示 Agent 安装成功。
关闭配置面板后,可在 ECS 快速接入列表页查看 Agent 状态。
可登录 ECS 实例,执行以下 curl 命令验证 Agent 是否正常工作:
curl -v -H "X-KMS-Token:$(cat /var/run/kmstoken)" 'http://localhost:2025/secretsmanager/get?secretId=test'返回 HTTP 200 表示 Agent 工作正常。如果返回其他状态码,参考"故障排查"部分排查问题。
应用程序集成
Agent 启动后,应用程序通过本地代理访问 KMS,无需配置 AccessKey。以下示例展示如何在代码中调用 KMS API。使用时,将示例代码中的agent-test替换为实际的凭据名称。
KMS Agent 只监听 127.0.0.1,即仅允许同一机器上的应用或进程与其通信,外部网络设备无法连接。访问地址仅支持 localhost 或 127.0.0.1,不支持应用的本地 IP。以下示例以 localhost 为例。
除 KMS Agent 接入方式外,KMS 还支持通过 SDK 接入。具体操作,请参见凭据客户端。
curl 示例
从本地 Agent 获取凭据,可以通过文件读取 Token 或直接写入 Token :
# 从文件读取 token
curl -v -H "X-KMS-Token:$(</var/run/kmstoken)" 'http://localhost:2025/secretsmanager/get?secretId=agent-test'
# 直接写入 token
curl -v -H "X-KMS-Token:<token>" 'http://localhost:2025/secretsmanager/get?secretId=agent-test'
Go 示例
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
// 支持指定 versionStage 或 versionId 以获取特定凭据值。
// 以获取指定 versionId 的凭据值为例。
url := fmt.Sprintf("http://localhost:2025/secretsmanager/get?secretId=%s", "agent-test")
token, err := os.ReadFile("/var/run/kmstoken")
if err != nil {
fmt.Printf("error reading token file: %v\n", err)
return
}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Printf("error creating request: %v\n", err)
return
}
req.Header.Add("X-KMS-Token", string(token))
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Printf("error sending request: %v\n", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Printf("error reading response body: %v\n", err)
return
}
fmt.Printf("status code %d - %s\n", resp.StatusCode, string(body))
}
Agent 状态说明
状态 | 说明 |
运行中 | Agent 已安装并正常运行。 |
未安装 | 该 ECS 实例未安装 KMS Agent 。 |
未运行 | Agent 已安装但当前未运行。 |
未知 | 无法获取 Agent 状态,检查实例网络配置。 |
故障排查
如果在安装或使用 KMS Agent 过程中遇到问题,参考以下常见问题进行排查:
失败原因 | 解决方案 |
Agent 安装失败 | 检查 ECS 实例是否处于运行中状态,确认当前账号具有 KMS 相关操作权限。 |
网络不通或超时 | 确认本地主机HTTP端口号配置正确,且 ECS 安全组已放行该端口。如果通过 VPC 访问 KMS ,确保 ECS 与 KMS 实例网络互通。 |
权限不足 | 如果使用 RAMRole 方式,确认 ECS 实例已绑定正确的 RAM 角色,且该角色的权限策略包含 |
端口冲突 | 如果本地 HTTP 端口(默认 2025 )被其他进程占用,在安装 Agent 时更换为其他未被占用的端口号。 |
Agent 未启动 | 通过 SSH 登录 ECS 实例,检查 Agent 进程是否存在。如不存在,参照接入步骤重新配置 ECS 接入。 |
