Como utilizar o senhasegura DSMCLI

1- Acesse o repositório abaixo e faça download do cli respectivo ao sistema operacional onde será executado. Em nossa exemplo, usaremos em um ambiente Linux, sendo assim baixaremos o “dsm-linux-amd64”.

2- Crie sua aplicação e sua autorização.

https://docs.senhasegura.io/docs/dsm-applications

https://docs.senhasegura.io/docs/dsm-authorizations

2.1- Adicione a Secret que deseja injetar no alvo em sua autorização.

https://docs.senhasegura.io/docs/dsm-secrets#register-a-secret

Com o DSMCLI na máquina host, você poderá executar o comando abaixo para obter mais detalhes de sua execução.

./dsm-linux-amd64 --help
./dsm-linux-amd64 runb --help

Atualmente existe duas formas de definirmos as variáveis de execução do DSMCLI:

  • Variável de ambiente;
  • Arquivo de configuração YML.

Variáveis de ambiente disponíveis

SENHASEGURA_URL: IP ou DNS da instância do senhasegura;

SENHASEGURA_CLIENT_ID: Client ID da autorização criada acima;

SENHASEGURA_CLIENT_SECRET: Client Secret da autorização criada acima;

SENHASEGURA_MAPPING_FILE: Arquivo que irá mapear variáveis de ambiente para inserção de novas secrets no senhasegura;

SENHASEGURA_SECRETS_FILE: Local onde as secrets devem ser salvas após a injeção.

Realizando a injeção de secrets usando variáveis de ambiente

3- Crie as variáveis de ambiente conforme demonstração abaixo:

[email protected]:/home/gustavo/DSM# SENHASEGURA_URL="https://192.168.10.200"
[email protected]:/home/gustavo/DSM# SENHASEGURA_CLIENT_ID=29672fc28d86699171649a1f564f83dc063ca1ef2
[email protected]:/home/gustavo/DSM# SENHASEGURA_CLIENT_SECRET=587a2ab361ad3f3128c67041db20e7dd
[email protected]:/home/gustavo/DSM# export SENHASEGURA_URL SENHASEGURA_CLIENT_ID SENHASEGURA_CLIENT_SECRET

4- Agora vamos executar o DSMCLI, onde as variáveis de ambiente serão usadas para autenticação.

./dsm-linux-amd64 runb -a Access -s test -e test -v

Parâmetro “a”: nome da aplicação

Parâmetro “s” e “e” : nome do sistema e ambiente configurado em sua autorização e key

A saída do comando deve ser:

No config file provided, proceeding...
Registering Application on DevSecOps
Trying to authenticate on senhasegura DevSecOps API
Authenticated successfully
Application register success
The parameter SENHASEGURA_MAPPING_FILE is empty
Mapping file not found, proceeding...
Posting variables in senhasegura...
Trying to authenticate on senhasegura DevSecOps API
Authenticated successfully
Posting variables successfully
Finding secrets from application
Trying to authenticate on senhasegura DevSecOps API
Authenticated successfully
Injecting secrets!
Injecting secret into .runb.vars: host.....Success!
Injecting secret into .runb.vars: user.....Success!
Injecting secret into .runb.vars: additional_information.....Success!
Injecting secret into .runb.vars: VALUE3.....Success!
Injecting secret into .runb.vars: VALUE1.....Success!
Injecting secret into .runb.vars: VALUE2.....Success!
Injecting secret into .runb.vars: pass.....Success!
Injecting secret into .runb.vars: ip.....Success!
Secrets injected!
Deleting linux variables...
Is not possible to delete linux variables!
Finish

Observe que por padrão as secrets são injetadas em um arquivo oculto no diretório correte da execução, em nosso caso o arquivo possui seu nome padrão “.runb.vars”.

Vamos visualizar o arquivo de secrets? Dando um cat no arquivo temos:

declare -x pass='[email protected]'
declare -x ip='192.168.10.200'
declare -x VALUE1='SECRET1'
declare -x VALUE2='SECRET2'
declare -x VALUE3='SECRET3'
declare -x host='senhasegura'
declare -x user='mt4adm'
declare -x additional_information=''

Nossos valores de secrets cadastrados no senhasegura são:

Observer que o arquivo de secret já possui uma sintaxe pronta para declaração, dessa forma, basta executarmos o source para declararmos elas:

image

Você poderá usar o parâmetro -t para definir a formatação da saída, de acordo com sua tecnologia.
Exemplo:
./dsm-linux-amd64 runb -a Access -s test -e test -t github -v

Bom, injetamos as secrets desejadas em variáveis de ambiente no sistema executor. E se quisessemos realizar o processo inverso? Isto é, coletar secrets presentes no sistema executor e inseri-las no senhasegura.

Por padrão, o DSMCLI realiza isto e cria secrets de todas variáveis de ambiente no momento da execução. Você pode visualiza-las em:

Porém, ainda assim são só apenas um conjunto de informação, não atreladas a uma secret por momento.

Para resolver isto, usaremos a variável “SENHASEGURA_MAPPING_FILE”. O valor dela deve ser o caminho absoluto de seu arquivo de mapeamento. Sua extensão deve ser .json.

https://docs.senhasegura.io/docs/pt/dsm-cli#usando-o-dsm-cli-para-registrar-segredos

Seu arquivo base é:

[email protected]:/home/gustavo/DSM# cat map.json
{
  "access_keys": [
    {
      "name": "ACCESS_KEY_VARIABLES",
      "type": "aws",
      "fields": {
        "access_key_id": "AWS_ACCESS_KEY_ID_VARIABLE",
        "secret_access_key": "AWS_SECRET_ACCESS_KEY_VARIABLE"
      }
    }
  ],
  "credentials": [
    {
      "name": "CREDENCIAL_VARIABLES",
      "fields": {
        "user": "USER_VARIABLE",
        "password": "PASSWORD_VARIABLE",
        "host": "HOST_VARIABLE"
      }
    }
  ],
  "key_value": [
    {
      "name": "GENERIC_VARIABLES",
      "fields": ["KEY_VALUE_VARIABLE"]
    }
  ]
}
[email protected]:/home/gustavo/DSM#

Neste exemplo trabalhemos apenas com o indice “credentials” e “key_value”. Como o nome já sugere. respectivamente criaremos credenciais e secrets. É válido dizer que “credentials” é aplicável apenas a credenciais que já existem no PAM.

Vamos criar nossa variáveis de ambiente para injeção no senhasegura DSM:

[email protected]:/home/gustavo/DSM# MYPASSPROD=HBJI546561JKB
[email protected]:/home/gustavo/DSM# MYACCESSKEY=nkjdfgojgdfdhgf51fdmjksndafjiafm
[email protected]:/home/gustavo/DSM# USER_PRD=superuser
[email protected]:/home/gustavo/DSM# USER_PASS=kfds*_uHUI3
[email protected]:/home/gustavo/DSM# USER_HOST=access.prod.com
[email protected]:/home/gustavo/DSM# export MYPASSPROD MYACCESSKEY USER_PRD USER_PASS USER_HOST

Dessa forma, nosso arquivo de mapeamento deve ficar da seguinte forma:

[email protected]:/home/gustavo/DSM# cat map.json
{
  "access_keys": [
    {
      "name": "ACCESS_KEY_VARIABLES",
      "type": "aws",
      "fields": {
        "access_key_id": "AWS_ACCESS_KEY_ID_VARIABLE",
        "secret_access_key": "AWS_SECRET_ACCESS_KEY_VARIABLE"
      }
    }
  ],
  "credentials": [
    {
      "name": "CREDENCIAL_VARIABLES",
      "fields": {
        "user": "USER_PRD",
        "password": "USER_PASS",
        "host": "USER_HOST"
      }
    }
  ],
  "key_value": [
    {
      "name": "GENERIC_VARIABLES",
      "fields": ["MYPASSPROD","MYACCESSKEY"]
    }
  ]
}

Após isto, vamos a execução:

Nossa secret agora está da seguinte forma:

Usando um arquivo de configuração para definirir as variáveis de execução

A extensão do arquivo de ser .yml, segue abaixo exemplo de arquivo:

SENHASEGURA_URL: "https://192.168.10.200"
SENHASEGURA_CLIENT_ID: "29672fc28d86699171649a1f564f83dc063ca1ef2"
SENHASEGURA_CLIENT_SECRET: "587a2ab361ad3f3128c67041db20e7dd"
SENHASEGURA_MAPPING_FILE: "/home/gustavo/DSM/map.json"
SENHASEGURA_SECRETS_FILE: ".vars"

Por padrão o DSMCLI procurará um arquivo de configuração na home do usuário chamado .config.yml. Caso deseje especificar um arquivo use a opção -c:

./dsm-linux-amd64 runb -a Access -s test -e test -c data.yml -v