Skip to content

FelipeMenezesDM/spring-secret-manager-suite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring Secret Manager Suite

Biblioteca para recuperação de secrets da AWS ou GCP.

Tópicos

Instalação com Maven

Crie o arquivo de configuração do maven ou inclua o repositório e o servidor no arquivo já existente:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
      <id>github</id>
      <username>${server.github.username}</username>
      <password>${server.github.password}</password>
    </server>
  </servers>
  
  <activeProfiles>
    <activeProfile>general</activeProfile>
  </activeProfiles>

  <profiles>
    <profile>
      <id>general</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
        </repository>
        <repository>
          <id>github</id>
          <url>https://maven.pkg.github.com/felipemenezesdm/spring-secret-manager-suite</url>
        </repository>
      </repositories>
    </profile>
  </profiles>
</settings>

Inclua a dependência no arquivo pom:

<dependency>
  <groupId>br.com.felipemenezesdm</groupId>
  <artifactId>spring-secret-manager-suite</artifactId>
  <version>1.0.0</version>
</dependency>

Execute com comando abaixo para download de dependências:

mvn install

Deploy manual

O deploy da biblioteca é realizado automaticamente sempre que houver a criação de uma nova tag de versão. Entretanto, se for necessário realizar seu deploy manual, é preciso seguir os passos abaixo:

  1. No settings.xml, confirmar que o servidor do GitHub está configurado:
      <servers>
        <server>
          <id>github</id>
          <username>${server.github.username}</username>
          <password>${server.github.password}</password>
        </server>
      </servers>
  2. Executar o comando abaixo, substuindo os parâmetros por seus respectivos valores:
    mvn deploy -s settings.xml -Dserver.github.username=USERNAME -Dserver.github.password=PASSWORD
    

Uso

Para usar a biblioteca de recuperação de secrets, é necessário injectar o service @Suite na classe. Abaixo, um exemplo de uso:

import br.com.felipemenezesdm.Suite;

@RestController
@RequestMapping("/api")
public class MyController {
    @Autowired
    Suite suite;

    @GetMapping("/get-secret")
    public String getSecret() {
        return suite.get().getSecretData("my-secret");
    }
}

Configuração

É possível configurar a biblioteca usando variáveis de ambiente do sistema ou propriedades da aplicação.

Variáveis de ambiente

Name Valor padrão Example
APP_SUITE gcp, aws ou vazio Definição do suite para recuperação de secrets
AWS_ACCOUNT_ID 000000000000 Definir a ID da conta AWS para a aplicação
AWS_ENDPOINT http://127.0.0.1 Definir o endpoint dos serviços AWS (indicado quando houver o uso do localstack)
AWS_DEFAULT_REGION us-east-1 Definir a região padrão para uma aplicação alocada na AWS
GCP_PROJECT_ID N/A ID do projeto no Google Cloud Plataform
GOOGLE_APPLICATION_CREDENTIALS N/A Arquivo de credenciais do Google Cloud Platform

Propriedades da aplicação

  • app:
    • suite:
      • tipo: string
      • descrição: definição do suite para recuperação de secrets. Atualmente disponíveis: aws, gcp e default
      • obrigatório: sim
    • aws:
      • region:
        • tipo: string
        • descrição: exclusivo para o provedor aws, para identificar a região padrão do cliente.
        • obrigatório: sim, quando o provedor for aws
      • end-point:
        • tipo: string
        • descrição: quando o provedor for igual a aws, este parâmetro pode ser configurado para definir o endpoint de onde serão obtidas as credenciais. É bastante útil para quando se está utilizando o LocalStack, por exemplo.
        • obrigatório: não
    • gcp:
      • project-id
        • tipo: string
        • descrição: exclusivo para o provedor gcp, para identificar o projeto do qual as credencials serão obtidas.
        • obrigatório: sim, quando o provedor for gcp