目录
Infisical 密钥系统搭建与使用
Infisical 是一个开源端到端加密平台,其实就是一个KMS密钥管理系统,它可以集中管理应用中的敏感信息,避免暴露在原始代码中,通过自有的API访问获取,最重要的它支持 Self-Host。
1. 本地搭建 Infisical
Infisical 支持自有云,毕竟是比较敏感的密钥信息,还是在自己的服务器上比较安全,这里直接使用 Docker 搭建,方便快捷
1.1. 创建并启动 mongodb
Infisical 使用 mongodb 做存储,最好两个服务在同一桥接网络中,这样可以直接引用服务的名称做为路径,可以使用 docker network create [桥接网络名称]
创建,这里已经创建好一个名为 docker_202_bridge 的桥接网络。
docker run -d \
--name mongo \
-p 57017:27017 \
-v /data/mongodb:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=[用户名] \
-e MONGO_INITDB_ROOT_PASSWORD=[用户密码] \
--privileged=true \
--restart always \
--network docker_202_bridge \
mongo:4.4.0
1.2. 创建并启动 infisical
- ENCRYPTION_KEY和JWT_XXX,可用使用
openssl rand -hex 16
生成,主要用于交互加密的作用 - SMTP_XXX,邮件服务的配置,不需要可以直接删掉,配置上体验更好,任何操作都会触发邮件通知
- SITE_URL,是你暴露的域名地址,如果仅在内网使用,直接配IP
- MONGO_URL,mongodb服务路径,@后面就是host地址,由于桥街网络,直接指定名称即可
docker run -d \
--name infisical \
-p 58972:80 \
-e ENCRYPTION_KEY=02f3611c1faf8278529d675e7d781f54 \
-e JWT_SIGNUP_SECRET=0a7a11ad759d3034752753f2cdd94ef4 \
-e JWT_REFRESH_SECRET=21bcb4f38057f31358f4485582abad1a \
-e JWT_AUTH_SECRET=46985e8b4f893662e2d184fe3de75f53 \
-e JWT_SERVICE_SECRET=edc8944935851b7bb033fbe853534c6c \
-e SMTP_HOST=smtp.qq.com \
-e [email protected] \
-e SMTP_PORT=465 \
-e SMTP_PASSWORD="nhkdlddidiznbggi" \
-e [email protected] \
-e SMTP_FROM_NAME="KMS infisical" \
-e SITE_URL=https://xxx.wangjun.dev \
-e INVITE_ONLY_SIGNUP=true \
-e MONGO_URL="mongodb://[用户名]:[用户密码]@mongo:27017/infisical?authSource=admin&retryWrites=true&w=majority" \
--privileged=true \
--restart always \
--network docker_202_bridge \
infisical/infisical:latest
启动完成,你将会得到一个很好的KMS密钥管理系统。
2. 配置密钥用于测试
进入控制台,创建工程,配置密码信息。这里也可以直接使用内置的 Example Project 工程进行测试.
3. 写个程序读取密钥
infisical 支持多种 SDK 读取密钥信息,详情点击,这里使用 Node 方式,提前在控制台创建请求 Token。
安装依赖
npm install infisical-node
关键代码
import InfisicalClient from "infisical-node";
import { NextResponse } from "next/server";
export async function GET(request) {
// 初始化客户端
const client = new InfisicalClient({
token: 'st.64bf8d8716519e5d38a83177.f5b01af38fdc3dbc6b5a1d2ee2ffbf53.129d441df97339a7xxxxxxxxxxxxx00f0a',
siteURL: 'https://xxx.wangjun.dev'
});
// 请求KMS
const mongo = await client.getSecret('MONGO_URL', {
environment: "dev",
path: "/",
type: "shared",
})
// 获取实际值
const value = mongo.secretValue;
const result = {
success: true,
data: value
}
return NextResponse.json(result);
}
由于使用NextJS,可能会有的警告或者错误,如何解决
- Module not found: Can’t resolve ‘debug’
npm install debug
- Module not found: Can’t resolve ‘supports-color’
npm i [email protected]
版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2023/07/how-to-use-infisical/