nagyesta/lowkey-vault
GitHub: nagyesta/lowkey-vault
Lowkey Vault 是一个兼容 Azure Key Vault REST API 的测试替身服务,帮助开发者在本地和 CI 环境中无需依赖真实云服务即可进行集成测试。
Stars: 102 | Forks: 7

[](https://raw.githubusercontent.com/nagyesta/lowkey-vault/main/LICENSE)
[](https://img.shields.io/badge/Java%20version-25%20app|17%20libs-yellow?logo=java)
[](https://github.com/nagyesta/lowkey-vault/releases)
[](https://search.maven.org/search?q=com.github.nagyesta.lowkey-vault)
[](https://hub.docker.com/r/nagyesta/lowkey-vault)
[](https://hub.docker.com/r/nagyesta/lowkey-vault)
[](https://github.com/nagyesta/lowkey-vault/actions/workflows/gradle.yml)
[](https://bestpractices.coreinfrastructure.org/projects/5577)
[](https://sonarcloud.io/summary/new_code?id=nagyesta_lowkey-vault)
[](https://sonarcloud.io/summary/new_code?id=nagyesta_lowkey-vault)
[](https://sonarcloud.io/summary/new_code?id=nagyesta_lowkey-vault)
[](https://img.shields.io/github/last-commit/nagyesta/lowkey-vault?logo=git)
[](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, 仿真器, 加密, 域名枚举, 域名枚举, 安全防御评估, 开发运维, 开源, 开源框架, 微服务测试, 持续集成, 本地开发, 测试工具, 测试替身, 测试驱动开发, 漏洞扫描器, 证书管理, 请求拦截, 集成测试