Este documento fornece uma visão geral de como utilizar o Segura® SDK para C, com base nos trechos de documentação fornecidos. O SDK simplifica o acesso a serviços Segura® como PAM (Gerenciamento de Acesso Privilegiado) e DSM (Gerenciamento de Segredos DevOps) em suas aplicações C.
Conceitos Principais
O SDK facilita a construção de aplicações robustas ao fornecer interfaces para gerenciar credenciais, dispositivos e segredos de aplicações. Um recurso importante é o uso de um cache local para reduzir o tempo de resposta das requisições. Todos os dados armazenados neste cache são criptografados para garantir a segurança.
Um objeto fundamental utilizado em todo o SDK é o objeto mapa. Este objeto serve como um contêiner de pares chave/valor, armazenando todas as informações necessárias ao chamar funções da API.
Usar o objeto mapa
O objeto mapa é essencial para passar parâmetros para a maioria das funções do SDK.
- Criando um objeto mapa: para começar, você deve criar um novo objeto mapa usando a função
segura_map_new(). Esta função retorna um ponteiro para o novo objeto mapa em caso de sucesso ouNULLem caso de erro. Se falhar, você pode verificar o motivo exato usandosegura_last_error().
Segura_map *map = Segura_map_new();
if (map == NULL) {
// Trate o erro usando Segura_last_error()
}
- Adicionar itens ao mapa: use
segura_map_add()para adicionar um novo par chave/valor a um objeto mapa existente. A função recebe o objeto mapa, a chave (const char*) e o valor (void*) como argumentos. Retorna0em caso de sucesso ou-1em caso de erro, com detalhes do erro disponíveis viaSegura_last_error().
Segura_map_add(map, "key_name", value_pointer);
Os exemplos demonstram como adicionar valores de string como URLs, client IDs, client secrets, hostnames, usernames, endereços IP, nomes de site, modelos, fabricantes e tipos.
- Recuperar informações de um mapa: para obter o valor associado a uma chave específica de um mapa, use
Segura_map_get(). Esta função recebe o objeto mapa e a chave (const char*) como entrada. Retorna o valor (void*) em caso de sucesso ouNULLem caso de falha.
void *value = Segura_map_get(map, "key_name");
- Limpar um mapa: a função
Segura_map_clear()remove todos os pares chave/valor de um objeto mapa. Isso é útil quando você precisa reutilizar um objeto mapa para diferentes parâmetros.
Segura_map_clear(map);
- Liberar um objeto mapa: quando terminar de usar um objeto mapa, libere a memória alocada usando
Segura_map_free(). Note que ela recebe um ponteiro para o ponteiro do mapa (Segura_map **).
Segura_map_free(&map);
Usar serviços PAM
O Segura® SDK para C permite gerenciar dispositivos e credenciais via serviços PAM.
Gerenciar Dispositivos
O objeto dispositivo fornece métodos para consultar e registrar dispositivos.
- Criar um objeto cliente de dispositivo: semelhante ao objeto mapa, você precisa criar um objeto de acesso à API de dispositivos usando
Segura_pam_device_new(). Esta função normalmente requer um objeto mapa contendo detalhes de conexão comourl,client_ideclient_secret.
Segura_map *map = Segura_map_new();
Segura_pam_device *dev = Segura_pam_device_new(map);
- Criar ou atualizar um dispositivo: a função
Segura_pam_device_save()é usada para criar um novo dispositivo ou atualizar um existente. Ela recebe o objeto de acesso ao dispositivo e um mapa contendo os parâmetros do dispositivo. Se um dispositivo correspondente for encontrado, ele é atualizado; caso contrário, um novo é criado. Os parâmetros obrigatórios para o mapa de entrada sãohostname,ip,site,model,vendoretype. A função retorna0em caso de sucesso ou-1em caso de erro.
Segura_map *params = Segura_map_new();
Segura_map_add(params, "hostname", "mydevice02");
Segura_map_add(params, "ip", "22.13.50.71");
int status = Segura_pam_device_save(dev, params);
- Buscar um dispositivo registrado: para consultar um único dispositivo, use
Segura_pam_device_get(). Esta função requer o objeto de acesso ao dispositivo e um mapa contendo os dados de identificação do dispositivo. O identificador necessário é normalmente ohostnameou odevice id. Retorna umSegura_pam_device*em caso de sucesso ou-1em caso de erro.
Segura_map *identifier = Segura_map_new();
Segura_map_add(identifier, "hostname", "localhost");
Segura_pam_device *found_dev = Segura_pam_device_get(dev, identifier);
- Listar dispositivos: a função
Segura_pam_device_fetch()busca uma lista de dispositivos. Ela aceita o objeto de acesso ao dispositivo e um mapa de filtro opcional. O mapa de filtro pode incluir parâmetros comohostname,ip,type,vendor,modelousitepara refinar os resultados. Um mapa de filtro vazio listará todos os dispositivos. A função retorna um mapa contendo a lista de dispositivos em caso de sucesso ouNULLem caso de erro.
Segura_map *filter = Segura_map_new();
Segura_map_add(filter, "type", "Server"); // Filtro opcional
Segura_map *found_devices = Segura_pam_device_fetch(dev, filter);
- Desativar um dispositivo: para desabilitar um dispositivo, use
Segura_pam_device_disable(). Esta função recebe o objeto de acesso ao dispositivo e um mapa contendo os dados de identificação do dispositivo. O identificador necessário é ohostnameou odevice id. Retorna0em caso de sucesso ou-1em caso de erro.
Segura_map *identifier = Segura_map_new();
Segura_map_add(identifier, "hostname", "localhost");
int status = Segura_pam_device_disable(dev, identifier);
Gerenciar Credenciais
O objeto credencial fornece métodos para consultar e registrar credenciais.
- Criar um objeto cliente de credencial: crie um objeto de acesso à API de credenciais usando
Segura_pam_credential_new(). Esta função requer um objeto mapa com detalhes de conexão (url,client_id,client_secret), semelhante à criação de um objeto cliente de dispositivo.
Segura_map *map = Segura_map_new();
Segura_pam_credential *cred = Segura_pam_credential_new(map);
- Criar ou atualizar uma credencial: use
Segura_pam_credential_save()para criar ou atualizar uma credencial. Ela requer o objeto de acesso à credencial e um mapa contendo os parâmetros da credencial. Os parâmetros obrigatórios para o mapa de entrada sãohostname,ip,identifiereusername. Se uma credencial com esses parâmetros for encontrada, ela é alterada; caso contrário, uma nova é criada. A função retorna0em caso de sucesso ou-1em caso de erro (detalhes do erro viaSegura_last_error()).
Segura_map *params = Segura_map_new();
Segura_map_add(params, "hostname", "johns.Segura.com");
Segura_map_add(params, "ip", "22.13.50.71");
Segura_map_add(params, "username", "credential05");
int status = Segura_pam_credential_save(cred, params);
- Buscar uma credencial registrada: a função
Segura_pam_credential_get()busca uma única credencial. Ela recebe o objeto de acesso à credencial e um mapa contendo as informações de identificação da credencial. Os parâmetros para o mapa de identificação podem incluirhostname,ipouusername. A função retorna umSegura_pam_credential*em caso de sucesso ouNULLem caso de erro (detalhes do erro viaSegura_last_error()).
Segura_map *identifier = Segura_map_new();
Segura_map_add(identifier, "hostname", "mycredential02");
Segura_map_add(identifier, "username", "credential05");
Segura_pam_credential *found_cred = Segura_pam_credential_get(cred, identifier);
- Listar credenciais: para buscar uma lista de credenciais, use
Segura_pam_credential_fetch(). Ela recebe o objeto de acesso à credencial e um mapa opcional para filtrar os resultados. Os filtros podem incluirhostname,ip,usernameouall(para pesquisar em todos esses campos). Em caso de sucesso, retorna um objeto mapa que contém a lista de credenciais; em caso de erro, retornaNULLe fornece detalhes do erro viaSegura_last_error().
Segura_map *filters = Segura_map_new();
Segura_map_add(filters, "hostname", "mycredential02"); // Filtro opcional
Segura_map *found_creds = Segura_pam_credential_fetch(cred, filters);
- Desativar uma credencial: a função
Segura_pam_credential_disable()desabilita uma única credencial. Ela requer o objeto de acesso à credencial e um mapa com as informações de identificação da credencial. Os parâmetros podem incluirhostname,ipouusername. Retorna0em caso de sucesso ou-1em caso de erro (detalhes do erro viaSegura_last_error()).
Segura_map *identifier = Segura_map_new();
Segura_map_add(identifier, "hostname", "mycredential02");
Segura_map_add(identifier, "username", "credential05");
int status = Segura_pam_credential_disable(cred, identifier);
- Liberar o objeto credencial: o exemplo mostra a liberação do objeto credencial usando
Segura_pam_credential_free(), que também limpa os dados da memória de forma segura. Note que ela recebe um ponteiro para o ponteiro da credencial (Segura_pam_credential **).
Segura_pam_credential_free(&cred);
Usar serviços do DSM
O Segura® SDK para C fornece interfaces para registrar aplicações e gerenciar seus segredos e variáveis via DevOps Secret Management.
Gerenciar Aplicações
O objeto DSM permite gerenciar aplicações, segredos e variáveis.
- Criar um objeto cliente DSM: crie um objeto de acesso à API de aplicações DSM usando
Segura_dsm_application_new(). Esta função requer um objeto mapa contendo detalhes de conexão comoclient_ideclient_secret.
Segura_map *map = Segura_map_new();
Segura_dsm_application *app = Segura_dsm_application_new(map);
- Criar ou atualizar uma aplicação: a função
Segura_dsm_application_save()atualiza ou cria uma nova aplicação. Ela recebe o objeto de acesso à aplicação DSM e um mapa contendo os parâmetros da aplicação. Os parâmetros obrigatórios para o mapa de entrada sãoapplication,systemeenvironment. Um parâmetro opcional éunique_key. Se uma aplicação com a combinação deapplication,systemeenvironmentexistir para o cliente, ela será alterada; caso contrário, uma nova aplicação ou autorização será criada. Quando a aplicação ativa o provisionamento dinâmico, o destino recebe automaticamente um segredo. A função retorna0em caso de sucesso ou-1em caso de erro (detalhes do erro viaSegura_last_error()).
Segura_map *params = Segura_map_new();
Segura_map_add(params, "application", "checkout");
Segura_map_add(params, "system", "ecommerce");
Segura_map_add(params, "environment", "production");
int status = Segura_dsm_application_save(app, params);
- Obter informações e segredos da aplicação cliente: use
Segura_dsm_application_get()para buscar as informações da aplicação cliente, incluindo seus segredos. Ela recebe o objeto de acesso à aplicação DSM. Retorna umSegura_dsm_application*em caso de sucesso ou-1em caso de erro (detalhes do erro viaSegura_last_error()). O objeto retornado contém as informações da aplicação e os segredos.
Segura_dsm_application *app_info = Segura_dsm_application_get(app);
- Registrar segredos da aplicação: a função
Segura_dsm_application_register_secret()registra um segredo de aplicação. Ela recebe o objeto de acesso à aplicação DSM e um mapa contendo as informações do segredo. Um parâmetro obrigatório ésecret_type, que pode seraccess_key,key_value,credential,certificateoussh_key. Dependendo dosecret_type, outros parâmetros são obrigatórios:access_keysparaaccess_key,key_valueparakey_value,credentialsparacredential,certificateparacertificateessh_keyparassh_key. O exemplo mostra o registro de um segredokey_value, que contém um mapa de pares chave/valor. A função retorna0em caso de sucesso ou-1em caso de erro (detalhes do erro viaSegura_last_error()).
Segura_map *secret_info = Segura_map_new();
Segura_map_add(secret_info, "secret_type", "key_value");
Segura_map *kv_data = Segura_map_new();
Segura_map_add(kv_data, "key1", "val1");
Segura_map_add(kv_data, "key2", "val2");
Segura_map_add(kv_data, "key3", "val3");
Segura_map_add(secret_info, "key_value", kv_data); // Adiciona o mapa aninhado
int status = Segura_dsm_application_register_secret(app, secret_info);
- Registrar variáveis da aplicação: use
Segura_dsm_application_register_variables()para registrar variáveis da aplicação. Ela recebe o objeto de acesso à aplicação DSM e um mapa contendo as informações das variáveis. Os parâmetros obrigatórios sãoenv,helmemap. O exemplo mostra a adição das variáveis diretamente ao mapa passado para a função. A função retorna0em caso de sucesso ou-1em caso de erro.
Segura_map *variables = Segura_map_new();
Segura_map_add(variables, "env", "production");
Segura_map_add(variables, "helm", "myapp-helm");
Segura_map *var_map_data = Segura_map_new();
Segura_map_add(var_map_data, "variable1", "test1");
Segura_map_add(var_map_data, "variable2", "test");
Segura_map_add(variables, "map", var_map_data);
int status = Segura_dsm_application_register_variables(app, variables);
- Excluir autorização da aplicação: para excluir a autorização da aplicação, use
Segura_dsm_application_delete(). Ela recebe o objeto de acesso à aplicação DSM. Se o provisionamento dinâmico estiver habilitado para a aplicação, todos os segredos serão automaticamente desprovisionados. A função retorna0em caso de sucesso ou-1em caso de erro.
int status = Segura_dsm_application_delete(app);
Lembre-se de tratar possíveis erros verificando os valores de retorno e utilizando Segura_last_error() quando indicado.