nagyesta/lowkey-vault

GitHub: nagyesta/lowkey-vault

Lowkey Vault 是一个兼容 Azure Key Vault REST API 的测试替身服务,帮助开发者在本地和 CI 环境中无需依赖真实云服务即可进行集成测试。

Stars: 102 | Forks: 7

![LowkeyVault](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/dff21b8d23024826.png) [![GitHub license](https://img.shields.io/github/license/nagyesta/lowkey-vault?color=informational)](https://raw.githubusercontent.com/nagyesta/lowkey-vault/main/LICENSE) [![Java version](https://img.shields.io/badge/Java%20version-25%20app|17%20libs-yellow?logo=java)](https://img.shields.io/badge/Java%20version-25%20app|17%20libs-yellow?logo=java) [![latest-release](https://img.shields.io/github/v/tag/nagyesta/lowkey-vault?color=blue&logo=git&label=releases&sort=semver)](https://github.com/nagyesta/lowkey-vault/releases) [![Maven Central](https://img.shields.io/maven-central/v/com.github.nagyesta.lowkey-vault/lowkey-vault-app?logo=apache-maven)](https://search.maven.org/search?q=com.github.nagyesta.lowkey-vault) [![Docker Hub](https://img.shields.io/docker/v/nagyesta/lowkey-vault?sort=semver&arch=amd64&logo=docker&label=amd64)](https://hub.docker.com/r/nagyesta/lowkey-vault) [![Docker Hub](https://img.shields.io/docker/v/nagyesta/lowkey-vault?sort=date&arch=arm64&logo=docker&label=multi-arch)](https://hub.docker.com/r/nagyesta/lowkey-vault) [![JavaCI](https://img.shields.io/github/actions/workflow/status/nagyesta/lowkey-vault/gradle.yml?logo=github&branch=main)](https://github.com/nagyesta/lowkey-vault/actions/workflows/gradle.yml) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5577/badge)](https://bestpractices.coreinfrastructure.org/projects/5577) [![Sonar Coverage](https://img.shields.io/sonar/coverage/nagyesta_lowkey-vault?server=https%3A%2F%2Fsonarcloud.io&logo=sonarcloud&logoColor=white)](https://sonarcloud.io/summary/new_code?id=nagyesta_lowkey-vault) [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=nagyesta_lowkey-vault&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=nagyesta_lowkey-vault) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=nagyesta_lowkey-vault&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=nagyesta_lowkey-vault) [![last_commit](https://img.shields.io/github/last-commit/nagyesta/lowkey-vault?logo=git)](https://img.shields.io/github/last-commit/nagyesta/lowkey-vault?logo=git) [![badge-abort-mission-armed-green](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6469a14f8d024827.svg)](https://github.com/nagyesta/abort-mission) Lowkey Vault 是一个旨在兼容 [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) REST API 的测试替身(伪造对象)。该项目的目标是在使用真实 Key Vault 不切实际或不可能的情况下,提供一种低开销的替代方案。 ## 推荐用途 ### 有效用例 我有一个使用 Azure Key Vault 的应用程序,并且: - 我希望能够在没有互联网连接的情况下在本地运行我的测试;或者 - 我不想为我的 CI 实例维护一个持续运行的 Key Vault;或者 - 我不想费心于每次测试运行时如何提供一个新的 Key Vault;或者 - 我不想担心在本地使用 Key Vault 时的身份验证问题。 ## 快速入门指南 ### Java 1. 手动从包中下载 Spring Boot 应用程序,或使用 [Maven Central](https://search.maven.org/search?q=com.github.nagyesta.lowkey-vault)。 2. 启动 Lowkey Vault jar 包 3. 在使用 [Azure Key Vault Key client](https://docs.microsoft.com/en-us/azure/key-vault/keys/quick-create-java) 或 [Azure Key Vault Secret client](https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-java) 时,将 `https://localhost:8443` 作为 key vault URI,并设置任意基本凭据(Lowkey Vault 会检查凭据是否存在,但会忽略其值。) 4. 如果您并行使用多个 vault 1. 要么在 hosts 文件中将其所有主机名设置为指向 localhost 2. 或者,使用 [lowkey-vault-client](lowkey-vault-client/README.md) 中的 provider 为您处理映射 3. (或者使用您的 HTTP 客户端 provider 模拟相同的操作) 5. 使用客户端初始化您的 keys 或 secrets 6. 运行您的代码 7. 停止 Lowkey Vault ### Docker 1. 从 `nagyesta/lowkey-vault` 拉取最新版本 - 您可以在[这里](https://hub.docker.com/r/nagyesta/lowkey-vault/tags)找到所有可用标签的列表 2. `docker run --rm -p 8443:8443 nagyesta/lowkey-vault:` 3. 在使用 [Azure Key Vault Key client](https://docs.microsoft.com/en-us/azure/key-vault/keys/quick-create-java) 或 [Azure Key Vault Secret client](https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-java) 时,将 `https://localhost:8443` 作为 key vault URI,并设置任意基本凭据(Lowkey Vault 会检查凭据是否存在,但会忽略其值。) 4. 如果您并行使用多个 vault 1. 要么在 hosts 文件中将其所有主机名设置为指向 localhost 2. 或者,使用 [lowkey-vault-client](lowkey-vault-client/README.md) 中的 provider 为您处理映射 3. (或者使用您的 HTTP 客户端 provider 模拟相同的操作) 5. 使用客户端初始化您的 keys 或 secrets 6. 运行您的代码 7. 停止 Lowkey Vault ## Testcontainers 请参阅 [Lowkey Vault Testcontainers](lowkey-vault-testcontainers/README.md) 下的示例。 ## 功能特性 Lowkey Vault 远未支持所有 Azure Key Vault 功能。受支持的功能列表可在此处找到: ### 通用 - 配置自定义端口以访问 Lowkey Vault - 使用多个别名通过不同的主机名/端口访问同一个 vault - 启动时自动创建默认 vault - 使用伪造的 token 端点模拟 Managed Identity - 在启动期间导入先前导出的内容 - 每次更改后自动将内容导出到预定义文件 ### Keys - 支持的 API 版本:`7.2`,部分 `7.3`、`7.4`、`7.5`、`7.6` - 创建 key(`RSA`、`EC`、`OCT`) - 包含元数据 - 导入 key(`RSA`、`EC`、`OCT`) - 包含元数据 - 获取可用的 key 版本 - 获取 key - 单个 key 的最新版本 - 单个 key 的特定版本 - 所有 keys 的列表 - 获取已删除的 key - 单个 key 的最新版本 - 所有 keys 的列表 - 删除 key - 更新 key - 恢复已删除的 key - 清除已删除的 key - 加密/解密/包装/解包 keys - `RSA` (`2k`/`3k`/`4k`) - `RSA1_5` - `RSA-OAEP` - `RSA-OAEP-256` - `AES` (`128`/`192`/`256`) - `AES-CBC` - `AES-CBC Pad` - 使用 keys 签名/验证摘要 - `RSA` (`2k`/`3k`/`4k`) - `PS256` - `PS384` - `PS512` - `RS256` - `RS384` - `RS512` - `EC` (`P-256`/`P-256K`/`P-384`/`P-521`) - `ES256` - `ES256K` - `ES384` - `ES512` - 备份和恢复 keys - 获取随机字节 - 轮换 keys - 手动 - 当使用带有适用轮换策略的时间偏移时自动进行 - 获取轮换策略 - 更新轮换策略 ### Secrets - 支持的 API 版本:`7.2`、`7.3`、`7.4`、`7.5`、`7.6` - 设置 secret - 包含元数据 - 获取可用的 secret 版本 - 获取 secret - 单个 secret 的最新版本 - 单个 secret 的特定版本 - 所有 secrets 的列表 - 获取已删除的 secret - 单个 secret 的最新版本 - 所有 secrets 的列表 - 删除 secret - 更新 secret - 恢复已删除的 secret - 清除已删除的 secret - 备份和恢复 secrets ### Certificates - 支持的 API 版本:`7.3`、`7.4`、`7.5`、`7.6` - 创建证书 - 仅限自签名 - 使用 `PKCS12` (`.pfx`) 或 `PEM` (`.pem`) 格式 - 可下载的证书使用空密码(`""`)保护 `PKCS12` 存储 - 获取证书操作 - 获取待处理创建操作的结果 - 获取待处理删除操作的结果 - 获取可用的证书版本 - 获取证书 - 单个证书的最新版本 - 单个证书的特定版本 - 所有证书的列表 - 获取证书策略 - 导入证书 - 仅限自签名 - 使用 `PKCS12` (`.pfx`) 或 `PEM` (`.pem`) 格式 - 可下载的证书使用空密码(`""`)保护 `PKCS12` 存储 - 获取已删除的证书 - 单个证书的最新版本 - 所有证书的列表 - 删除证书 - 更新证书属性 - 更新证书颁发策略 - 恢复已删除的证书 - 清除已删除的证书 - 备份和恢复证书 ### 管理 API #### 功能 - 创建 vault - 列出 vaults - 删除 vault - 列出已删除的 vaults - 恢复已删除的 vault - 清除 vault - 时间偏移(模拟时间流逝) - 单个 vault - 所有 vaults - 导出 vault 内容(以便稍后在启动时导入) #### Swagger - 管理 API(HTTPS 端口) - 内置,自动生成:[https://localhost:8443/api/swagger-ui/index.html](https://localhost:8443/api/swagger-ui/index.html) - SwaggerHub,已发布:[https://app.swaggerhub.com/apis-docs/nagyesta/Lowkey-Vault-Management-API/v2.6.x](https://app.swaggerhub.com/apis-docs/nagyesta/Lowkey-Vault-Management-API/v2.6.x) - 元数据 API(HTTP 端口) - SwaggerHub,已发布:[https://app.swaggerhub.com/apis-docs/nagyesta/Lowkey-Vault-Metadata-API/v2.6.x](https://app.swaggerhub.com/apis-docs/nagyesta/Lowkey-Vault-Metadata-API/v2.6.x) ### 端口映射(默认) #### HTTP `:8080` 用于元数据端点 - 就绪/存活探针 `/ping` - Managed Identity Token API - 模拟 Managed Identity Token 端点 `GET /metadata/identity/oauth2/token?resource=`。 - OpenID 配置 `GET /metadata/identity/.well-known/openid-configuration` - 用于 token 签名的 Key `GET /metadata/identity/.well-known/openid-configuration/jwks` - 获取 Lowkey Vault 的默认证书 - 默认 `PKCS12` keystore:`GET /metadata/default-cert/lowkey-vault.p12` - 保护默认 keystore 的密码:`GET /metadata/default-cert/password` #### HTTPS `:8443` - 就绪/存活探针 `/ping` - 管理 API - Key Vault APIs ## 启动参数 1. 使用 `.jar`:[Lowkey Vault App](lowkey-vault-app/README.md)。 2. 使用 Docker:[Lowkey Vault Docker](lowkey-vault-docker/README.md)。 3. 使用 Testcontainers:[Lowkey Vault Testcontainers](lowkey-vault-testcontainers/README.md)。 # 示例项目 1. [Java](https://github.com/nagyesta/lowkey-vault-example) 2. [.Net](https://github.com/nagyesta/lowkey-vault-example-dotnet) 3. [Python](https://github.com/nagyesta/lowkey-vault-example-python) 4. [Go](https://github.com/nagyesta/lowkey-vault-example-go) 5. [Node.js](https://github.com/nagyesta/lowkey-vault-example-nodejs) 6. [Docker](https://github.com/nagyesta/lowkey-vault-example-docker) # 限制 - 不支持某些加密/签名算法。有关受支持算法的最新列表,请参阅[“功能特性”](#features)部分。 - 证书 API 仅支持自签名证书。 - 时间偏移无法续订/重新创建已删除的证书。请考虑在时间偏移后执行删除操作作为变通方法。 - 无法为启动期间创建的 vault 配置恢复选项 - Docker 容器使用 root 用户,这是由于一个限制,即当主机上的 Docker UID 与容器内常规用户的 UID 不匹配时,该限制阻止了自定义用户写入导出文件。
标签:Azure Key Vault, Docker, JS文件枚举, KMS, Mock, Stub, TDD, 仿真器, 加密, 域名枚举, 域名枚举, 安全防御评估, 开发运维, 开源, 开源框架, 微服务测试, 持续集成, 本地开发, 测试工具, 测试替身, 测试驱动开发, 漏洞扫描器, 证书管理, 请求拦截, 集成测试