
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Local KMS (LKMS) 是AWS Key Management Service (KMS)的模拟实现,专为本地开发和测试设计,采用Go语言编写。该镜像支持真实加密算法(AES、ECDSA、RSA),但仅用于开发测试环境,不可用于生产环境。
适用于需要与AWS KMS交互的应用程序的本地开发和测试,可替代真实AWS KMS服务,避免产生云服务费用,同时提供可控、可重复的测试环境。
基本运行
bashdocker run -p 8080:8080 docker.xuanyuan.run/nsmithuk/local-kms
LKMS将在8080端口启动,默认配置下无需额外参数。
种子文件挂载
通过挂载包含seed.yaml的目录,实现启动时加载预定义密钥:
bashdocker run -p 8080:8080 \ --mount type=bind,source="$(pwd)"/init,target=/init \ docker.xuanyuan.run/nsmithuk/local-kms
容器默认在/init/seed.yaml路径查找种子文件。
数据持久化
通过挂载/data目录,实现密钥数据在容器重启后保留:
bashdocker run -p 8080:8080 \ --mount type=bind,source="$(pwd)"/data,target=/data \ docker.xuanyuan.run/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文件。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务