DevOps Secret Manager
  • 7 minutos de leitura
  • Tema escuro
    Tema claro
  • Pdf

DevOps Secret Manager

  • Tema escuro
    Tema claro
  • Pdf

Resumo do artigo

O senhasegura DevOps Secret Management (DSM) proporciona uma maneira rápida e segura para que ferramentas e aplicativos solicitem informações confidenciais, como segredos, credenciais e outros dados sensíveis utilizados no ciclo de vida DevOps.
O objetivo deste documento é fornecer orientação às equipes DevOps que necessitam de integração com o senhasegura para gerir todos os segredos utilizados no seu pipeline.

Neste documento, serão abordadas as seguintes funções DevOps:

  • Consultar um secret.
  • Criar ou atualizar um secret.
  • Criar ou atualizar uma aplicação.
  • Provisionar uma credencial.
  • Deprovisionar uma credencial.
  • Inativar uma autorização.

Acesse também os documentos APIs para automações e API de gerenciamento de chaves criptográficas.

Consultar secret

GET https://vault_url/iso/dapp/application 

O método de aplicação consulta todos os segredos ligados a uma autorização de aplicação.

Resposta

CampoTipoDescrição
nameStringNome da aplicação.
descriptionStringDescrição da aplicação.
tagsStringTags que identificam a aplicação.
systemStringSistema do secret.
environmentStringAmbiente do secret.
secret_idInteiroID do secret.
secret_nameStringNome do secret.
identityStringIdentificador do secret.
versionStringVersão do secret.
expiration_dateDia/HoraData de validade do secret.
engineStringSecret engine.
dataArray de dadosValores do secret.
{
    "response": {
        "status": 200,
        "mensagem": "Application 5",
        "erro": false,
        "message": "Application 5",
        "error": false
    },
    "application": {
        "name": "postman",
        "description": null,
        "tags": [
            ""
        ],
        "system": "back",
        "environment": "test",
        "secrets": [
            {
                "secret_id": "106",
                "secret_name": "application5",
                "identity": "application5",
                "version": "",
                "expiration_date": "",
                "engine": "Kubernetes",
                "data": [
                    {
                        "hostname": "application5_v_test",
                        "username": "ADMIN_V_USR",
                        "password": "ADMIN_V_PW",
                        "additional_information": "ADMIN_V_SCHEMA",
                        "ip": "app.application.com"
                    },
                    {
                        "access_key_id": "LKU5YC6QWAT487S4KEK",
                        "secret_access_key": "sack10821du07f9sacfsdaasdf",
                        "TTL": null
                    },
                    {
                        "my_key_name": "my_key_value",
                        "my_key_name_2": "my_key_value_2"
                    }
                ]
            }
        ]
    }
}

Resposta com SSH como secret

{
    "response": {
        "status": 201,
        "mensagem": "Secret created successfully.",
        "erro": false,
        "cod_erro": 0,
        "message": "Secret created successfully.",
        "error": false,
        "error_code": 0
    },
    "application": {
        "name": "postman",
        "description": "teste",
        "tags": [
            "abc",
            "def",
            "teste"
        ],
        "system": "inetconfig",
        "environment": "stage",
        "secrets": [
            {
                "secret_id": "3",
                "secret_name": "state_secret",
                "identity": "cart/americanas/npf/cassandra",
                "version": "205",
                "description": "Chamada de API",
                "expiration_date": "2022-08-18 11:10:00",
                "engine": "GitLab",
                "data": [
                    {
                        "HOSTNAME": "AWS Gateway",
                        "USERNAME": "user",
                        "CONNECTION_STRING": "mongodb://api-server/auth",
                        "private_key": "An error occurred while encrypting the text",
                        "public_key": "ssh-rsa h+FntWwPBOwYUM27FOFUVBwf57Lgq+ZMOEmkfsN7T4QrrwBswkL+CDws0DmOdJGsZLl47O0HYpds6FQ/roXb2AXP3X4sCrDtAs4tN6bcDd3WgUKIuPns+qXejHq+5wsxBJdWUMyQfCQOwM0j7dsIK4rnGJlh7jAM4ROs/dXqkZ0Y7fbE2PPlomXvAKaF9GmHMcLB56j5o2K8aNc7YrTiLHc5NXX+GlJqOB5UWfiRHoDGP/Cr6B",
                        "PASSWORD": "5RxfSKds+djXZ9tR3uEJ8fppXaKYmf2+oI4CkFiaIVH0jZWV7T//s+PY8jgdP1WkbmYqrqHXpMqUjNs0+qI/9vYBvRkEb4Y0CpcT4jpFw2Hqbs+dc+T8RNdKkWq+daVh0Gf9mQIS7VMIjaR+O+iqSYkBsbZYPp7qsJ0+8txfwT==vPj",
                        "ip": "aws.amazon.com"
                    }
                ]
            }
        ]
    }
}

Criar ou atualizar um secret

POST https://vault_url/iso/sctm/secret

Parâmetros

CampoTipoDescrição
nameStringNome do secret.
identityStringIdentificador do secret.
expiration_DateDate/timeA data de desativação do secret.
descriptionStringDescrição do secret.
engineStringA engine do secret, deve ser uma engine válida registrada no senhasegura.
renew_cloud_timeIntDefine o tempo para renovar as chaves de acesso à nuvem em minutos. Se omitido é ignorado, mas com a array vazia, irá desabilitar a renovação automática.
renew_credential_timeIntDefina o tempo para renovar as credenciais em minutos. Se omitido é ignorado, mas com a array vazia, irá desabilitar a renovação automática.
renew_ephemeral_credential_timeIntDefine o tempo para renovar as credenciais efêmeras em minutos. Se omitido é ignorado, mas com a array vazia, irá desabilitar a renovação automática.
dataStringDeve ser um json codificado em base64 válido como em Exemplo Data.

Exemplo Data

{
    access_keys:
    [
        {
            access_key:
            {
                type: "aws",
                fields:
                {
                    access_key_id: "AKIAREVEFYNPPAOT3PF6",
                    access_key_id_label: "AWS_ACCESS_KEY_ID",
                    secret_access_key: "AStrongPass",
                    secret_access_key_label: "AWS_SECRET_ACCESS_KEY",
                }
            }
        },
    ],
    credentials:
    [
        {
            credential:
            {
                fields:
                {
                    user: "cred_a",
                    user_label: "USERNAME",
                    host: "aws.amazon.com",
                    host_label: "HOSTNAME",
                    password: "StrongPass",
                    password_label: "PASSWORD",
                    additional_information: "mongodb://api-server/auth",
                    additional_information_label: "CONNECTION_STRING",
                }
            }
        },
        {
            credential:
            {
                fields:
                {
                    user: "an_username",
                    user_label: "USERNAME",
                    host: "an_ip",
                    host_label: "HOSTNAME",
                    password: "StrongPass",
                    password_label: "PASSWORD",
                    additional_information: "the_additional_info",
                }
            }
        },
    ]
}

Resposta

CampoTipoDescrição
nameStringNome da aplicação.
descriptionStringDescrição da aplicação.
tagsStringTag para identificação da aplicação.
systemStringSistema do secret.
environmentStringAmbiente do secret.
secret_idIntegerID do secret.
secret_nameStringNome do secret.
identityStringIdentificador do secret.
versionStringVersão do secret.
expiration_dateDate/TimeData de expiração do secret.
engineStringEngine do secret
dataArray de dadosValores do secret.
{
    "response": {
        "status": 201,
        "mensagem": "Secret created successfully.",
        "erro": false,
        "cod_erro": 0,
        "message": "Secret created successfully.",
        "error": false,
        "error_code": 0
    },
    "application": {
        "name": "postman",
        "description": "teste",
        "tags": [
            "abc",
            "def",
            "teste"
        ],
        "system": "inetconfig",
        "environment": "stage",
        "secrets": [
            {
                "secret_id": "7",
                "secret_name": "state_secret",
                "identity": "example_2",
                "version": "2",
                "description": "Chamada de API",
                "expiration_date": "2022-08-18 11:10:00",
                "engine": "GitLab",
                "data": [
                    {
                        "AWS_ACCESS_KEY_ID": "AKIAREVEFYNPPAOT3PF6",
                        "AWS_SECRET_ACCESS_KEY": "fd/ZmmciA4d8CqkXIzK8l2oWrUY7+fds/aasdf+WwP5cTAQW5mpr9XAHiGS1zkRQEUvJ7pta3ABrAeRt3QH6UuuGwPunATFdhFvAG/lTlrby6z+dfdfas/cKUzQpHpQE0UNxNwzCauRpbPDOUzMnpRopbyGQDzdkN0uXSXJLh3kraX+/qQ/v3riN1pB+Wuzd4zvxLfeH6oA==",
                        "TTL": ""
                    },
                    {
                        "APP": "Postman",
                        "CONNECTION_STRING": "mongodb://api-server/auth",
                        "DATE": "date",
                        "HOSTNAME": "an_ip",
                        "PASSWORD": "StrongPass",
                        "USERNAME": "an_username"
                    }
                ]
            }
        ]
    }
}

Criar ou atualizar uma aplicação

POST https://vault_url/iso/dapp/application

Parâmetros

CampoTipoDescrição
nameStringNome do secret.
identityStringIdentificador do secret.
expiration_dateData/HoraData de desativação do secret.
descriptionStringDescrição do secret.
engineStringA engine do secret. Eeve ser uma engine válida registrada no senhasegura
renew_cloud_timeIntDefina o tempo de renovação das chaves de acesso à nuvem em minutos. Se omitido, desativará a renovação automática
renew_credential_timeIntDefina o tempo de renovação para credenciais em minutos. Se omitido, desativará a renovação automática
renew_efemeral_credential_timeIntDefina o tempo de renovação para credenciais temporárias em minutos. Se omitido, desativará a renovação automática
DataStringDeve ser um json codificado em base64 válido

Resposta

CampoTipoDescrição
unique keyStringIdentificador único de uma autorização, se o valor for enviado, os campos ambiente e sistema serão ignorados para a busca de autorização
applicationStringNome da Aplicação
systemStringSistema a que pertence a autorização, utilizado para consulta, utilizado apenas para escrita em novas autorizações
envinromentStringAmbiente a que pertence a autorização, utilizado para consulta, utilizado apenas para escrita em novas autorizações
descriptionStringDescrição do aplicativo
authentication MethodStringMétodo de autenticação e autorização do aplicativo, este parâmetro é utilizado apenas na criação do aplicativo, ao atualizá-lo é ignorado
line of BusinessStringDefine a linha de negócios do aplicativo
Application TypeStringDefine o tipo de aplicação
TagsStringDefinir tags de aplicativos
Amazon ARNs (for AWS Authentication)StringDefinir ARNs da aplicação
Cloud Dynamic Provising profileStringDefine perfis de provisionamento dinâmico de nuvem de aplicativos
Credential Dynamic Provising Profile (device and profile)ArrayDefine perfis de provisionamento dinâmico de credenciais efêmeras de aplicativos
Authorized ResourcesStringDefine os recursos autorizados da autorização, utilizados apenas na criação da autorização
Expiration date/timeDate/TimeData de expiração secreta, usada apenas ao criar a autorização
Enable Encryption of sensitive information?BooleanoDefine a criptografia de dados de autorização confidenciais, usado ​​apenas na criação de autorização
Allowed IPsStringDefine os IPs permitidos da autorização, utilizados somente na criação da autorização
Allowed HTTPS refersStringDefine os referenciadores HTTP permitidos da autorização, utilizados apenas ao criar a autorização
Certificate FingerprintStringDefine a fingerprint do certificado de autorização, utilizada apenas na criação da autorização

Resposta

CampoTipoDescrição
IDStringID do aplicativo
SignatureStringAssinatura do Aplicativo
{
    "response": {
        "status": 200,
        "mensagem": "Application updated: (4) postman | Authorization found: (6)",
        "erro": false,
        "cod_erro": 0,
        "message": "Application updated: (4) postman | Authorization found: (6)",
        "error": false,
        "error_code": 0
    },
    "id": "applicationID",
    "signature": "signature"
}

Provisionar uma credencial

POST https://vault_url/iso/coe/dapp/provision 

Criar um novo segredo de credencial para ser usado em um recipiente.

Parâmetros

CampoTipoDescriçãoObrig.
pod_nomeStringNome da cápsula que irá usar a credencial.Sim
deployStringNome do deploy que irá usar a credencial.Sim
namespaceStringNamespace do contentor que irá utilizar a credencial.Sim

Resposta

CampoTipoDescrição
nameStringNome da aplicação.
descriptionStringDescrição da aplicação.
tagsStringTags que identificam a aplicação.
systemStringSistema do secret.
environmentStringAmbiente do secret.
secret_idInteiroID do secret.
secret_nameStringNome do secret.
identityStringIdentificador do secret.
versionStringVersão do secret
expiration_dateData/HoraData de validade do secret.
engineStringEngine do secret.
dataStringValor do secret.
{
    "response": {
        "status": 200,
        "mensagem": "Application 6",
        "erro": false
    },
    "application": {
        "name": "runb",
        "description": null,
        "tags": [
            ""
        ],
        "system": "senhasegura",
        "environment": "lab",
        "secrets": [
            {
                "secret_id": "3",
                "secret_name": "secure-demo",
                "identity": "secure-demo",
                "version": "",
                "expiration_date": "",
                "engine": "Kubernetes",
                "data": {
                    "APP_VAR1": "fX6v8vh7TADY",
                    "APP_VAR2": "vlln0XkBNWIk",
                    "APP_VAR3": "7qWgm1EBFnQb",
                    "APP_DB_PASSWORD": "4i8Vm0khqTWs",
                    "APP_SECRET": "GSePWjXyd91K"
                }
            }
        ]
    }
}

Desprovisionar uma credencial

POST https://vault_url/iso/coe/dapp/deprovision 

Remove a credencial a ser utilizada por um container.

Parâmetros

CampoTipoDescriçãoObrig.
pod_nomeStringNome da cápsula que irá usar a credencial.Sim
deployStringNome do deploy que irá usar a credencial.Sim
namespaceStringNamespace do contentor que usará a credencial.Sim
secret_idIntID do secret.Sim

Deletar uma autorização

DELETE https://vault_url/iso/dapp/application/authorization

Inativa uma autorização para uma aplicação.

Resposta

{
"code": 200,
"response": {
"status": 200,
"message": "Authorization deleted successfully.",
"error": false,
"error_code": 0,
"detail": "",
"mensagem": "Authorization deleted successfully.",
"erro": false,
"cod_erro": 0
}
}

Erros

404 - Autorização não encontrada

{
"code": 404,
"response": {
"status": 404,
"message": "Resource sub not found",
"error": true,
"error_code": 4,
"detail": "",
"mensagem": "Resource sub not found",
"erro": true,
"cod_erro": 4
}
}

401 - A autorização que deseja inativar já está inativa

{
"code": 401,
"response": {
"status": 401,
"message": "Inactive authorization",
"error": true,
"error_code": 1,
"detail": "",
"mensagem": "Inactive authorization",
"erro": true,
"cod_erro": 1
}
}

Você não possui autorização para executar ações na API

{
"message": "no Route matched with those values"
}

Este artigo foi útil?