
Local KMS (LKMS) 是AWS Key Management Service (KMS)的模拟实现,专为本地开发和测试设计,采用Go语言编写。该镜像支持真实加密算法(AES、ECDSA、RSA),但仅用于开发测试环境,不可用于生产环境。
适用于需要与AWS KMS交互的应用程序的本地开发和测试,可替代真实AWS KMS服务,避免产生云服务费用,同时提供可控、可重复的测试环境。
基本运行
bashdocker run -p 8080:8080 nsmithuk/local-kms
LKMS将在8080端口启动,默认配置下无需额外参数。
种子文件挂载
通过挂载包含seed.yaml的目录,实现启动时加载预定义密钥:
bashdocker run -p 8080:8080 \ --mount type=bind,source="$(pwd)"/init,target=/init \ nsmithuk/local-kms
容器默认在/init/seed.yaml路径查找种子文件。
数据持久化
通过挂载/data目录,实现密钥数据在容器重启后保留:
bashdocker run -p 8080:8080 \ --mount type=bind,source="$(pwd)"/data,target=/data \ nsmithuk/local-kms
种子文件采用YAML格式,支持对称密钥(AES)和非对称密钥(ECC、RSA)定义,以及密钥别名配置。
简单示例
yamlKeys: Symmetric: Aes: - Metadata: KeyId: bc436485-5092-42b8-92a3-0aa8b93536dc BackingKeys: - 5cdaead27fe7da2de47945d73cd6d79e36494e73802f3cd3869f1d2cb0b5d7a9 Asymmetric: Ecc: - Metadata: KeyId: 800d5768-3fd7-4edd-a4b8-4c81c3e4c147 KeyUsage: SIGN_VERIFY Description: ECC key with curve secp256r1 PrivateKeyPem: | -----BEGIN EC PRIVATE KEY----- MHcCAQEEIMnOrUrXr8rwne7d8f01cfwmpS/w+K7jcyWmmeLDgWKaoAoGCCqGSM49 AwEHoUQDQgAEYNMBBZ3h1ipuph1iO5k+yLvTs94UN71quXN3f0P/tprs2Fp2FEas M7m7XZ2xlDK3wcEAs1QEIoQjjwnhcptQ6A== -----END EC PRIVATE KEY----- Aliases: - AliasName: alias/testing TargetKeyId: bc436485-5092-42b8-92a3-0aa8b93536dc
多密钥示例
yamlKeys: Symmetric: Aes: - Metadata: KeyId: bc436485-5092-42b8-92a3-0aa8b93536dc BackingKeys: - 34743777217A25432A46294A404E635266556A586E3272357538782F413F4428 - 614E645267556B58703273357638792F423F4528472B4B6250655368566D5971 - Metadata: KeyId: 49c5492b-b1bc-42a8-9a5c-b2015e810c1c BackingKeys: - 5cdaead27fe7da2de47945d73cd6d79e36494e73802f3cd3869f1d2cb0b5d7a9 Aliases: - AliasName: alias/dev TargetKeyId: bc436485-5092-42b8-92a3-0aa8b93536dc - AliasName: alias/test TargetKeyId: 49c5492b-b1bc-42a8-9a5c-b2015e810c1c
可选字段说明
EXTERNAL时表示导入自定义密钥材料,此时BackingKeys可选(最多1个256位十六进制密钥)SIGN_VERIFY,RSA支持SIGN_VERIFY或ENCRYPT_DECRYPT| 环境变量 | 描述 | 默认值 |
|---|---|---|
| PORT | LKMS服务端口 | 8080 |
| KMS_ACCOUNT_ID | 模拟的AWS账户ID | 111122223333 |
| KMS_REGION | 模拟的AWS区域 | eu-west-2 |
| KMS_SEED_PATH | 种子文件路径 | /init/seed.yaml |
| KMS_DATA_PATH | 数据库存储路径(Docker环境);本地运行时默认/tmp/local-kms | /data |
注意:密钥和别名基于ARN存储,包含账户ID和区域信息,修改
KMS_ACCOUNT_ID或KMS_REGION会导致现有数据不可访问。
调用ScheduleKeyDeletion时,AWS返回的时间戳采用科学计数法(如1.5565824E9),而LKMS返回整数形式(如1556582400)。两者在JSON解析中等效,不影响AWS SDK使用。
创建客户主密钥
bashawslocal kms create-key
加密数据
bashawslocal kms encrypt \ --key-id 0579fe9c-129b-490a-adb0-42589ac4a017 \ --plaintext "My Test String"
解密数据
bashawslocal kms decrypt \ --ciphertext-blob fileb://encrypted.dat
生成数据密钥
bashawslocal kms generate-data-key \ --key-id 0579fe9c-129b-490a-adb0-42589ac4a017 \ --key-spec AES_128
创建客户主密钥
bashhttp -v --json POST http://localhost:8080/ \ X-Amz-Target:TrentService.CreateKey
加密数据(Base64编码)
bashhttp -v --json POST http://localhost:8080/ \ X-Amz-Target:TrentService.Encrypt \ KeyId=f154ba79-0b7d-4f19-9983-309f706ebc83 \ Plaintext='SGVsbG8='
解密数据
bashhttp -v --json POST http://localhost:8080/ \ X-Amz-Target:TrentService.Decrypt \ CiphertextBlob='S2Fybjphd3M6a21zOmV1LXdlc3QtMjoxMTExMjIyMjMzMzM6a2V5L2YxNTRiYTc5LTBiN2QtNGYxOS05OTgzLTMwOWY3MDZlYmM4MwAAAABjIzzp52djy/L4prvuGoG+jZ6OJzgQGi6n2CRO5dmfJHw='
bashfunction rsakey(){ local bits=$1 if ! [[ "$bits" =~ ^(2048|3072|4096)$ ]]; then echo "RSA密钥长度必须为:2048 3072 4096" return fi keyId=$(uuidgen | tr '[:upper:]' '[:lower:]') echo " Keys: Asymmetric: Rsa: - Metadata: KeyId: ${keyId} KeyUsage: SIGN_VERIFY # 或 ENCRYPT_DECRYPT Description: ${bits}位RSA密钥 PrivateKeyPem: | $(openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:${bits} -pkeyopt rsa_keygen_pubexp:65537 | sed 's/^/ /') " }
使用:rsakey 2048(生成2048位RSA密钥)
bashfunction ecckey(){ local curve=$1 if ! [[ "$curve" =~ ^(secp256r1|secp384r1|secp521r1)$ ]]; then echo "曲线必须为:secp256r1 secp384r1 secp521r1" return fi keyId=$(uuidgen | tr '[:upper:]' '[:lower:]') echo " Keys: Asymmetric: Ecc: - Metadata: KeyId: ${keyId} KeyUsage: SIGN_VERIFY Description: ${curve}曲线ECC密钥 PrivateKeyPem: | $(openssl ecparam -name ${curve} -genkey -noout | sed 's/^/ /') " }
使用:ecckey secp256r1(生成secp256r1曲线ECC密钥)
本项目采用MIT许可证,详见LICENSE文件。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务