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