Skip to content

Infisical

Infisical es una herramienta para gestionar secretos y certificados. Se puede intaractuar con CLI, SDK y su API, además de su interfaz visual (Dashboard).

Instalacion de Infisical

Infisical puede usarse en Linux Ubuntu/Debian (o WSL2) ejecutando las siguientes sentencias desde la línea de comandos (terminal):

bash
curl -1sLf 'https://artifacts-infisical-core.infisical.com/setup.deb.sh' | sudo -E bash
sudo apt-get update && sudo apt-get install -y infisical-core

Puede verificar la instalación ejecutando: infisical-ctl help

Para confgiurar se debe considerar crear un archivo infisical.rb en la ruta /etc/infisical, con el fin de conectar la base de datos. Tomando el ejemplo de la documentación oficial de Infisical, tenemos las siguientes líneas:

bash
# Important: Replace with secure values in production
infisical_core['ENCRYPTION_KEY'] = '6c1fe4e407b8911c104518103505b218'
infisical_core['AUTH_SECRET'] = '5lrMXKKWCVocS/uerPsl7V+TX/aaUaI7iDkgl3tSmLE='

# Example database connection strings
infisical_core['DB_CONNECTION_URI'] = 'postgres://<db-username>:<db-password>@<db-host>:<db-port>/<db-name>'
infisical_core['REDIS_URL'] = 'redis://<redis-host>:<redis-port>'

Para iniciar el servicio se ejecuta:

bash
infisical-ctl reconfigure

Por defecto se expone el servicio en el puerto 8080, salvo que se modifique en infisical.rb.

Infisical para contenedor (Docker)

Basados en la documentación respectiva, se tendrían los siguientes comandos de ejemplo con docker:

bash
docker pull infisical/infisical:v0.160.5

docker run -p 8080:8080  \
-e ENCRYPTION_KEY=f40c9178624764ad85a6830b37ce239a \
-e AUTH_SECRET="q6LRi7c717a3DQ8JUxlWYkZpMhG4+RHLoFUVt3Bvo2U=" \
-e DB_CONNECTION_URI="<>" \
-e REDIS_URL="<>" \
-e SITE_URL="<>" \
infisical/infisical:v0.160.5

Nótese que se debe configurar al menos los valores de entorno para ENCRYPTION_KEY, AUTH_SECRET, DB_CONNECTION_URI, REDIS_URL, SITE_URL

Ejemplo con JavaScript (Node.js) - SDK

Instalación:

bash
npm install @infisical/sdk

Ejemplo completo (index.js):

js
const { InfisicalSDK } = require("@infisical/sdk");

async function main() {
  const client = new InfisicalSDK({
    siteUrl: "https://tu-infisical.ejemplo.com" // opcional, por defecto app.infisical.com
  });

  await client.auth().universalAuth.login({
    clientId: process.env.INFISICAL_CLIENT_ID,
    clientSecret: process.env.INFISICAL_CLIENT_SECRET
  });

  const secret = await client.secrets().getSecret({
    environment: "dev",
    projectId: "<tu-project-id>",
    secretName: "DATABASE_URL",
    secretPath: "/"
  });

  console.log("DATABASE_URL:", secret.secretValue);
}

main().catch(console.error);

Ejemplo con JavaScript (Node.js) - API

Obtén un token (con CLI o directamente vía API) y úsalo como Bearer.

Ejemplo con fetch (Node ≥18):

js
const token = process.env.INFISICAL_TOKEN; // o JWT obtenido vía /api/v1/auth/universal-auth/login

const url = new URL("https://tu-infisical.ejemplo.com/api/v4/secrets/DATABASE_URL");
url.searchParams.set("projectId", "<tu-project-id>");
url.searchParams.set("environment", "dev");
url.searchParams.set("secretPath", "/");

const res = await fetch(url, {
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json"
  }
});

if (!res.ok) throw new Error(await res.text());
const { secret } = await res.json();
console.log("Valor:", secret.secretValue);

Ejemplo con Java (JBang) - SDK

JBang permite ejecutar un script Java con dependencias sin proyecto Maven/Gradle.

Crea InfisicalSdkExample.java:

java
///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS com.infisical:sdk:3.0.7

import com.infisical.sdk.InfisicalSdk;
import com.infisical.sdk.SdkConfig;

public class InfisicalSdkExample {

  public static void main(String[] args) {
    var sdk = new InfisicalSdk(
      new SdkConfig.Builder()
        .withSiteUrl("https://tu-infisical.ejemplo.com")
        .build()
    );

    sdk.Auth().UniversalAuthLogin(
      System.getenv("INFISICAL_CLIENT_ID"),
      System.getenv("INFISICAL_CLIENT_SECRET")
    );

    var secret = sdk.Secrets().GetSecret(
      "DATABASE_URL",
      "<tu-project-id>",
      "dev",
      "/"
    );

    System.out.println("DATABASE_URL = " + secret);
  }
}

Ejecuta:

bash
jbang InfisicalSdkExample.java