O Vault é um sistema de gerenciamento de secrets e criptografia baseado em identidade. Essa integração coleta os registros de auditoria do Vault. A integração também coleta métricas de token, memória e armazenamento.
Para mais informações sobre o Vault, consulte a documentação do Hashicorp Vault.
Prerequisites
Para coletar a telemetria do Vault, instale o Agente de operações:
- Para métricas, instale a versão 2.18.2 ou mais recente.
- Para registros, instale a versão 2.18.1 ou mais recente.
Essa integração é compatível com o Vault versão 1.6+.
Configurar a instância do Vault
Para coletar telemetria da instância do Vault, defina o campo prometheus_retention_time
como um valor diferente de zero no arquivo de configuração do HCL ou do JSON Vault.
Full configuration options can be found at https://www.vaultproject.io/docs/configuration telemetry { prometheus_retention_time = "10m" disable_hostname = false }
Além disso, é preciso que um usuário raiz ative a coleta de registros de auditoria e crie uma política de ACL do prometheus.
Um token raiz é usado para adicionar uma política que tenha recursos de leitura ao endpoint /sys/metrics
.
Esta política é usada para criar um token do Vault com permissão suficiente para coletar métricas do Vault.
Se você estiver inicializando o Vault pela primeira vez, poderá usar o script a seguir para gerar um token raiz. Caso contrário, consulte Gerar tokens raiz usando chaves de desbloqueio para ver informações sobre como gerar um token raiz.
export VAULT_ADDR=http://localhost:8200
# Create simple Vault initialization with 1 key share and a key threshold of 1.
vault operator init -key-shares=1 -key-threshold=1 | head -n3 | cat > .vault-init
VAULT_KEY=$(grep 'Unseal Key 1' .vault-init | awk '{print $NF}')
VAULT_TOKEN=$(grep 'Initial Root Token:' .vault-init | awk '{print $NF}')
export VAULT_TOKEN
vault operator unseal $VAULT_KEY
# Enable audit logs.
vault audit enable file file_path=/var/log/vault_audit.log
# Create Prometheus ACL policy to access metrics endpoint.
vault policy write prometheus-metrics - << EOF
path "/sys/metrics" {
capabilities = ["read"]
}
EOF
# Create an example token with the prometheus-metrics policy to access Vault metrics.
# This token is used as `$VAULT_TOKEN` in your Ops Agent configuration for Vault.
vault token create -field=token -policy prometheus-metrics > prometheus-token
Configurar o agente de operações do Vault
Seguindo o guia para Configurar o Agente de Agente, adicione os elementos necessários para coletar telemetria de instâncias do Vault reinicie o agente.
Exemplo de configuração
Os comandos a seguir criam a configuração para coletar e ingerir a telemetria para o Vault e reiniciam o Agente de operações.
Configurar a coleta de registros
Para ingerir registros do Vault, você precisa criar um receptor para os registros produzida pelo Vault e, em seguida, criar um pipeline para o novo receptor.
vault_audit
Para configurar um receptor para os registros , especifique os seguintes campos:
Campo | Padrão | Descrição |
---|---|---|
exclude_paths |
Uma lista de padrões de caminho do sistema de arquivos a serem excluídos do conjunto correspondente a include_paths . |
|
include_paths |
Uma lista de caminhos do sistema de arquivos a serem lidos acompanhando cada
arquivo. Um caractere curinga (* ) pode ser usado nos caminhos. |
|
record_log_file_path |
false |
Se definido como true , o caminho para o arquivo específico de que a gravação de registro foi recebida aparecerá na entrada de registro de saída como o valor do identificador agent.googleapis.com/log_file_path . Ao usar um caractere curinga, apenas o caminho do arquivo de que o registro foi recebido é gravado. |
type |
O valor precisa ser vault_audit . |
|
wildcard_refresh_interval |
60s |
O intervalo em que os caminhos de arquivos curinga no include_paths são atualizados. Dado como uma duração de tempo, por exemplo, 30s ou 2m . Essa propriedade pode ser útil com capacidades de registro altas em que os arquivos de registro são alternados mais rapidamente do que o intervalo padrão. |
O que é registrado
O logName
é derivado dos
IDs do receptor especificados na configuração. Os campos
detalhados dentro de LogEntry
são os seguintes.
Os registros vault_audit
contêm os seguintes campos no LogEntry
:
Campo | Tipo | Descrição |
---|---|---|
jsonPayload.auth |
struct | |
jsonPayload.auth.accessor |
string | Este é um HMAC do acessador do token do cliente. |
jsonPayload.auth.client_token |
string | Este é um HMAC do ID do token do cliente. |
jsonPayload.auth.display_name |
string | Este é o nome de exibição definido pelo papel de método de autenticação ou explicitamente no momento da criação do secret. |
jsonPayload.auth.entity_id |
string | Este é um identificador de entidade de token. |
jsonPayload.auth.metadata |
objeto | Ele conterá uma lista de pares de chave-valor de metadados associados ao client_token. |
jsonPayload.auth.policies |
objeto | Ele conterá uma lista das políticas associadas ao client_token. |
jsonPayload.auth.token_type |
string | |
jsonPayload.error |
string | Se ocorrer um erro com a solicitação, a mensagem de erro será incluída no valor deste campo. |
jsonPayload.request |
struct | |
jsonPayload.request.client_token |
string | Este é um HMAC do ID do token do cliente. |
jsonPayload.request.client_token_accessor |
string | Este é um HMAC do acessador do token do cliente. |
jsonPayload.request.data |
objeto | O objeto de dados conterá dados secretos em pares de chave-valor. |
jsonPayload.request.headers |
objeto | Outros cabeçalhos HTTP especificados pelo cliente como parte da solicitação. |
jsonPayload.request.id |
string | Este é o identificador exclusivo da solicitação. |
jsonPayload.request.namespace.id |
string | |
jsonPayload.request.operation |
string | Esse é o tipo de operação que corresponde aos recursos de caminho e precisa ser create , read , update , delete ou list . |
jsonPayload.request.path |
string | O caminho do Vault solicitado para a operação. |
jsonPayload.request.policy_override |
booleano | true quando uma substituição de política obrigatória foi solicitada. |
jsonPayload.request.remote_address |
string | O endereço IP do cliente que está fazendo a solicitação. |
jsonPayload.request.wrap_ttl |
string | Se o token estiver encapsulado, o valor TTL configurado configurado será exibido como uma string numérica. |
jsonPayload.response |
struct | |
jsonPayload.response.data.accessor |
string | Este é um HMAC do acessador do token do cliente. |
jsonPayload.response.data.creation_time |
string | Carimbo de data/hora da criação do token no formato RFC 3339. |
jsonPayload.response.data.creation_ttl |
string | TTL de criação do token em segundos. |
jsonPayload.response.data.display_name |
string | Este é o nome de exibição definido pelo papel de método de autenticação ou explicitamente no momento da criação do secret. |
jsonPayload.response.data.entity_id |
string | Este é um identificador de entidade de token. |
jsonPayload.response.data.expire_time |
string | Carimbo de data/hora do formato RFC 3339 que representa o momento em que esse token expira. |
jsonPayload.response.data.explicit_max_ttl |
string | Valor máximo de TTL do token explícito como segundos ("0" quando não definido). |
jsonPayload.response.data.id |
string | Esse é o identificador de resposta exclusivo. |
jsonPayload.response.data.issue_time |
string | Carimbo de data/hora do formato RFC 3339. |
jsonPayload.response.data.num_uses |
number | Se o token for limitado a vários usos, esse valor será representado aqui. |
jsonPayload.response.data.orphan |
boolean | Valor booleano que representa se o token é órfão. |
jsonPayload.response.data.path |
string | O caminho do Vault solicitado para a operação. |
jsonPayload.response.data.policies |
objeto | Ele conterá uma lista das políticas associadas ao client_token. |
jsonPayload.response.data.renewable |
booleano | Valor booleano que representa se o token é órfão. |
jsonPayload.type |
string | O tipo de registro de auditoria. |
severity |
string (LogSeverity ) |
Nível de entrada de registro (traduzido). |
Configurar a coleta de métricas
Para ingerir métricas do Vault, crie um receptor para as métricas produzidas pelo Vault e, em seguida, crie um pipeline para o novo receptor.
Esse receptor não aceita o uso de várias instâncias na configuração, por exemplo, para monitorar vários endpoints. Todas essas instâncias gravam na mesma série temporal, e o Cloud Monitoring não tem como diferenciá-las.
Para configurar um receptor para suas
métricas do vault
, especifique os campos
a seguir:
Campo | Padrão | Descrição |
---|---|---|
ca_file |
Caminho para o certificado de CA. Como cliente, isso verifica o certificado do servidor. Se estiver vazio, o receptor usará a CA raiz do sistema. | |
cert_file |
Caminho para o certificado TLS a ser usado para conexões exigidas por mTLS. | |
collection_interval |
60s |
Um valor de time.Duration, como 30s ou 5m . |
endpoint |
localhost:8200 |
O campo "hostname:port" usados pelo Vault. |
insecure |
true |
Define se uma conexão TLS segura será ou não usada. Se definido como false , o TLS será ativado. |
insecure_skip_verify |
false |
Define se é necessário pular a verificação do certificado. Se insecure for definido como true , o valor de insecure_skip_verify não será usado. |
key_file |
Caminho para a chave TLS a ser usada para conexões exigidas por mTLS. | |
metrics_path |
/v1/sys/metrics |
O caminho para a coleta de métricas. |
token |
localhost:8200 |
Token usado para autenticação. |
type |
Este valor precisa ser vault . |
O que é monitorado?
A tabela a seguir fornece a lista de métricas que o agente de operações coleta da instância do Vault.
Tipo de métrica | |
---|---|
Tipo, tipo Recursos monitorados |
Rótulos |
workload.googleapis.com/vault.audit.request.failed
|
|
CUMULATIVE , INT64 gce_instance |
|
workload.googleapis.com/vault.audit.response.failed
|
|
CUMULATIVE , INT64 gce_instance |
|
workload.googleapis.com/vault.core.leader.duration
|
|
GAUGE , DOUBLE gce_instance |
|
workload.googleapis.com/vault.core.request.count
|
|
GAUGE , INT64 gce_instance |
cluster
|
workload.googleapis.com/vault.memory.usage
|
|
GAUGE , DOUBLE gce_instance |
|
workload.googleapis.com/vault.storage.operation.delete.count
|
|
CUMULATIVE , INT64 gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.delete.time
|
|
CUMULATIVE , DOUBLE gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.get.count
|
|
CUMULATIVE , INT64 gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.get.time
|
|
CUMULATIVE , DOUBLE gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.list.count
|
|
CUMULATIVE , INT64 gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.list.time
|
|
CUMULATIVE , DOUBLE gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.put.count
|
|
CUMULATIVE , INT64 gce_instance |
storage
|
workload.googleapis.com/vault.storage.operation.put.time
|
|
CUMULATIVE , DOUBLE gce_instance |
storage
|
workload.googleapis.com/vault.token.count
|
|
GAUGE , INT64 gce_instance |
cluster namespace
|
workload.googleapis.com/vault.token.lease.count
|
|
GAUGE , INT64 gce_instance |
|
workload.googleapis.com/vault.token.renew.time
|
|
GAUGE , INT64 gce_instance |
|
workload.googleapis.com/vault.token.revoke.time
|
|
GAUGE , INT64 gce_instance |
Verificar a configuração
Nesta seção, descrevemos como verificar se você configurou corretamente o receptor do Vault. Pode levar um ou dois minutos para que o agente de operações comece a coletar telemetria.
Para verificar se os registros do Vault estão sendo enviados para o Cloud Logging, faça o seguinte:
-
No console do Google Cloud, acesse a página do Análise de registros.
Acessar a Análise de registros
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Geração de registros.
- Digite a consulta a seguir no Editor e clique em Executar consulta:
resource.type="gce_instance" log_id("vault_audit")
Para verificar se as métricas do Vault estão sendo enviadas para o Cloud Monitoring, faça o seguinte:
-
No Console do Google Cloud, acesse a página do leaderboard Metrics Explorer:
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.
- Na barra de ferramentas do painel do criador de consultas, selecione o botão code MQL ou code PromQL.
- Verifique se MQL está selecionado na opção de ativar/desativar MQL. A alternância de idiomas está na mesma barra de ferramentas que permite formatar sua consulta.
- Digite a consulta a seguir no Editor e clique em Executar consulta:
fetch gce_instance | metric 'workload.googleapis.com/vault.memory.usage' | every 1m
Ver painel
Para visualizar as métricas do Vault, é necessário ter um gráfico ou um painel configurado. A integração do Vault inclui um ou mais painéis para você. Todos os painéis são instalados automaticamente depois que você configura a integração e o Agente de operações começa a coletar dados de métricas.
Também é possível ver visualizações estáticas de painéis sem instalar a integração.
Para ver um painel instalado, faça o seguinte:
-
No console do Google Cloud, acesse a página Painéis:
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.
- Selecione a guia Lista de painéis e escolha a categoria Integrações.
- Clique no nome do painel que você quer visualizar.
Se você configurou uma integração, mas o painel não foi instalado, verifique se o agente de operações está em execução. Quando não há dados de métricas para um gráfico no painel, a instalação do painel falha. Depois que o Agente de operações começar a coletar métricas, o painel será instalado para você.
Para acessar uma visualização estática do painel, faça o seguinte:
-
No console do Google Cloud, acesse a página Integrações:
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.
- Clique no filtro de plataforma de implantação do Compute Engine.
- Localize a entrada para Abóbada e clique em Ver detalhes.
- Selecione a guia Painéis para uma visualização estática. Se o painel estiver instalado, navegue até ele clicando em Ver painel.
Para mais informações sobre painéis no Cloud Monitoring, consulte Painéis e gráficos.
Para mais informações sobre como usar a página Integrações, consulte Gerenciar integrações.
Instalar políticas de alertas
As políticas de alertas orientam o Cloud Monitoring a notificar você quando ocorrerem condições especificadas. A integração do Vault inclui uma ou mais políticas de alertas para você usar. É possível ver e instalar essas políticas de alertas na página Integrações no Monitoring.
Para visualizar e descrever as descrições de políticas de alertas disponíveis, faça o seguinte:
-
No console do Google Cloud, acesse a página Integrações:
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoramento.
- Localize a entrada do Vault e clique em Ver detalhes.
- Selecione a guia Alertas. Essa guia apresenta descrições das políticas de alertas disponíveis e mostra uma interface para instalá-las.
- Instalar políticas de alertas. As políticas de alertas precisam
saber para onde enviar as notificações de que o alerta foi
acionado. Portanto, elas exigem informações para instalação.
Para instalar políticas de alertas, faça o seguinte:
- Na lista de políticas de alertas disponíveis, selecione aquelas que você quer instalar.
Na seção Configurar notificações, selecione um ou mais canais de notificação. Você pode desativar o uso dos canais de notificação, mas, se isso acontecer, as políticas de alertas vão ser disparadas silenciosamente. É possível verificar o status no Monitoring, mas não receber notificações.
Para saber mais sobre canais de notificação, consulte Gerenciar canais de notificação.
- Clique em Criar políticas.
Para mais informações sobre políticas de alertas no Cloud Monitoring, consulte Introdução a alertas.
Para mais informações sobre como usar a página Integrações, consulte Gerenciar integrações.
A seguir
Para ver um tutorial sobre como usar o Ansible para instalar o agente de operações, configurar um aplicativo de terceiros e instalar um painel de amostra, consulte o vídeo Instalação do agente de operações para resolver problemas de aplicativos de terceiros.