
nsmithuk/local-kmsLocal 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返回整数形式(如***)。两者在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
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文件。






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务