Update avaliable. Click RELOAD to update.
目录

Infisical 密钥系统搭建与使用

Infisical 是一个开源端到端加密平台,其实就是一个KMS密钥管理系统,它可以集中管理应用中的敏感信息,避免暴露在原始代码中,通过自有的API访问获取,最重要的它支持 Self-Host

infisical-login-page

infisical-dashboard-page

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

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 工程进行测试.

infisical-secret-page

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,可能会有的警告或者错误,如何解决

  1. Module not found: Can’t resolve ‘debug’
    npm install debug
    
  2. Module not found: Can’t resolve ‘supports-color’
版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2023/07/how-to-use-infisical/