HashiCorp Vault

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 de Como configurar o Agente de operações, adicione os elementos necessários para coletar a telemetria de instâncias do Vault e reinicie o agente.

Exemplo de configuração

O comando a seguir cria a configuração para coletar e ingerir a telemetria para o Vault e reinicia o Agente de operações.

# Configures Ops Agent to collect telemetry from the app and restart Ops Agent.

set -e

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Create a Vault token that has read capabilities to /sys/metrics policy.
# For more information see: https://developer.hashicorp.com/vault/tutorials/monitoring/monitor-telemetry-grafana-prometheus?in=vault%2Fmonitoring#define-prometheus-acl-policy
VAULT_TOKEN=$(cat prometheus-token)

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    vault:
      type: vault
      token: $VAULT_TOKEN
      endpoint: 127.0.0.1:8200
  service:
    pipelines:
      vault:
        receivers:
          - vault
logging:
  receivers:
    vault_audit:
      type: vault_audit
      include_paths: [/var/log/vault_audit.log]
  service:
    pipelines:
      vault:
        receivers:
          - vault_audit
EOF

sudo service google-cloud-ops-agent restart

Configurar a coleta de registros

Para ingerir registros do Vault, é preciso criar receptores para os registros produzidos pelo Vault e, em seguida, criar um pipeline para os novos receptores.

vault_auditPara 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
timestamp string (Timestamp) Hora em que a solicitação foi recebida

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 "hostname:port" usado 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 "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
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/vault.audit.response.failed
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/vault.core.leader.duration
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/vault.core.request.count
GAUGEINT64
gce_instance
cluster
workload.googleapis.com/vault.memory.usage
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/vault.storage.operation.delete.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.delete.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.get.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.list.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.storage.operation.put.count
CUMULATIVEINT64
gce_instance
storage
workload.googleapis.com/vault.storage.operation.put.time
CUMULATIVEDOUBLE
gce_instance
storage
workload.googleapis.com/vault.token.count
GAUGEINT64
gce_instance
namespace
cluster
workload.googleapis.com/vault.token.lease.count
GAUGEINT64
gce_instance
 
workload.googleapis.com/vault.token.renew.time
GAUGEINT64
gce_instance
 
workload.googleapis.com/vault.token.revoke.time
GAUGEINT64
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:

  1. No painel de navegação do console do Google Cloud, selecione Logging e, depois, Explorador de registros:

    Acessar o Explorador de registros

  2. 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:

  1. No painel de navegação do console do Google Cloud, selecione Monitoramento e  Metrics Explorer:

    Acesse o Metrics explorer

  2. Na barra de ferramentas do painel do criador de consultas, selecione o botão  MQL ou  PromQL.
  3. Verifique se MQL está selecionado na opção de ativar/desativar Idioma. A alternância de idiomas está na mesma barra de ferramentas que permite formatar sua consulta.
  4. 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:

  1. No painel de navegação do console do Google Cloud, selecione Monitoramento e  Painéis:

    Ir para Painéis

  2. Selecione a guia Lista de painéis e escolha a categoria Integrações.
  3. 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:

  1. No painel de navegação do console do Google Cloud, selecione Monitoramento e  Integrações:

    Acessar Integrações

  2. Clique no filtro de plataforma de implantação do Compute Engine.
  3. Localize a entrada do Vault e clique em Ver detalhes.
  4. 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:

  1. No painel de navegação do console do Google Cloud, selecione Monitoramento e  Integrações:

    Acessar Integrações

  2. Localize a entrada do Vault e clique em Ver detalhes.
  3. Selecione a guia Alertas. Essa guia apresenta descrições das políticas de alertas disponíveis e mostra uma interface para instalá-las.
  4. 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:
    1. Na lista de políticas de alertas disponíveis, selecione aquelas que você quer instalar.
    2. 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.

    3. 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.