Acesso Colaboradores

Gerenciando Secrets com Infisical no .NET

Publicado em por Gustavo Mauricio de Barros

Gerenciando Secrets com Infisical no .NET Gerenciando Secrets com Infisical no .NET

Introdução

Infisical é uma plataforma de gerenciamento de secrets que centraliza credenciais, tokens e variáveis sensíveis em um lugar seguro. Em vez de espalhar segredos por arquivos, variáveis locais e pipelines, você mantém tudo organizado por projeto, ambiente e caminho, com controle de acesso e auditoria.

Vantagens do Infisical

  • Centralização dos segredos em um único local confiável
  • Separação por ambiente (dev, staging, prod) sem duplicar configuração
  • Controle de acesso por equipe, projeto e caminho
  • Auditoria de acesso e mudanças em secrets
  • Integração simples com aplicações e pipelines

A integração com .NET: JJConsulting.Infisical

Para usar Infisical de forma idiomática em .NET, criamos o JJConsulting.Infisical. A biblioteca conecta o Infisical ao sistema de configuração do .NET e registra serviços de DI para consumo direto de secrets quando necessário.

  • Adiciona um provider do Infisical ao IConfiguration
  • Registra IInfisicalAuthenticationService e IInfisicalSecretsService
  • Suporta autenticação por service token e por machine identity

Instalação

dotnet add package JJConsulting.Infisical
<ItemGroup>
  <PackageReference Include="JJConsulting.Infisical" Version="1.0.0" />
</ItemGroup>

Configuração com service token

Use service token quando quiser um fluxo simples, escopado por ambiente. Coloque as configurações no appsettings.json e registre no startup:

{
  "Infisical": {
    "Environment": "prod",
    "ProjectId": "your-project-id",
    "ServiceToken": "your-service-token",
    "SecretPath": "/",
    "Url": "https://app.infisical.com"
  }
}
using JJConsulting.Infisical.Configuration;

var infisicalConfig = ServiceTokenInfisicalConfig
    .FromConfiguration(builder.Configuration.GetSection("Infisical"));

builder.Host.AddInfisical(infisicalConfig);

Configuração com machine identity

Se preferir client credentials, use machine identity. O restante do fluxo é idêntico.

{
  "Infisical": {
    "Environment": "prod",
    "ProjectId": "your-project-id",
    "ClientId": "your-client-id",
    "ClientSecret": "your-client-secret",
    "SecretPath": "/",
    "Url": "https://app.infisical.com"
  }
}
using JJConsulting.Infisical.Configuration;

var infisicalConfig = MachineIdentityInfisicalConfig
    .FromConfiguration(builder.Configuration.GetSection("Infisical"));

builder.Host.AddInfisical(infisicalConfig);

Nomenclatura de secrets no .NET

O provider segue a convenção padrão do .NET: use double underscore (__) nas chaves do Infisical para mapear chaves aninhadas.

  • MySettings__MyKey vira MySettings:MyKey
  • ConnectionStrings__DefaultConnection vira ConnectionStrings:DefaultConnection
  • Logging__LogLevel__Default vira Logging:LogLevel:Default

Os valores são armazenados em cache em memória, e ficam disponíveis até o próximo restart da aplicação, ou seja, não há problema se houver alguma intermitência no servidor Infisical.

Acesso direto a secrets via DI

Às vezes você precisa buscar um secret diretamente (ou atualizar sob demanda). O pacote registra IInfisicalSecretsService, então você pode injetar onde quiser.

using JJConsulting.Infisical.Services;

public class MyService(IInfisicalSecretsService secretsService)
{
    public async Task UseSecretsAsync()
    {
        var all = await secretsService.GetSecretsAsync();
        var single = await secretsService.GetSecretAsync("DATABASE_PASSWORD");
    }
}

Conclusão

O JJConsulting.Infisical mantém a integração pequena e transparente, pois os secrets entram no IConfiguration, ou seja, você continua usando as mesmas APIs nativas de configuração já utilizadas pelo appsettings.json e variáveis de ambiente. e o acesso direto fica disponível quando precisar.

Para visualizar o código fonte dela, sugerir melhorias ou até mesmo contribuir, está disponível neste repositório do GitHub.

Mais artigos deste autor

← Voltar ao ínicio