Hashicorp Vault

O Vault é um sistema de gestão de encriptação e segredos baseado na identidade. Esta integração recolhe os registos de auditoria do Vault. A integração também recolhe métricas de tokens, memória e armazenamento.

Para mais informações sobre o Vault, consulte a documentação do Hashicorp Vault.

Pré-requisitos

Para recolher telemetria do Vault, tem de instalar o agente de operações:

  • Para métricas, instale a versão 2.18.2 ou superior.
  • Para registos, instale a versão 2.18.1 ou superior.

Esta integração suporta o Vault versão 1.6 e superior.

Configure a sua instância do Vault

Para recolher telemetria da sua instância do Vault, tem de definir o campo prometheus_retention_time para um valor diferente de zero no seu ficheiro de configuração do Vault HCL ou JSON.

Full configuration options can be found at https://www.vaultproject.io/docs/configuration
telemetry {
  prometheus_retention_time = "10m"
  disable_hostname = false
}

Além disso, é necessário um utilizador raiz para ativar a recolha de registos de auditoria e para criar uma política de ACL de métricas do Prometheus. Um token de raiz é usado para adicionar uma política que tem capacidades de leitura ao ponto final /sys/metrics. Esta política é usada para criar um token do Vault com autorização suficiente para recolher métricas do Vault.

Se estiver a inicializar o Vault pela primeira vez, pode usar o seguinte script para gerar um token de raiz. Caso contrário, consulte o artigo Gerar tokens raiz com chaves de anulação da selagem para obter 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

Configure o agente de operações para o Vault

Seguindo o guia para configurar o Ops Agent, adicione os elementos necessários para recolher telemetria de instâncias do Vault e reinicie o agente.

Exemplo de configuração

Os seguintes comandos criam a configuração para recolher e carregar telemetria para o Vault:

# Configures Ops Agent to collect telemetry from the app. You must restart the agent for the configuration to take effect.

set -e

# Check if the file exists
if [ ! -f /etc/google-cloud-ops-agent/config.yaml ]; then
  # Create the file if it doesn't exist.
  sudo mkdir -p /etc/google-cloud-ops-agent
  sudo touch /etc/google-cloud-ops-agent/config.yaml
fi

# 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

Para que estas alterações entrem em vigor, tem de reiniciar o agente de operações:

Linux

  1. Para reiniciar o agente, execute o seguinte comando na sua instância:
    sudo systemctl restart google-cloud-ops-agent
    
  2. Para confirmar que o agente foi reiniciado, execute o seguinte comando e verifique se os componentes "Agente de métricas" e "Agente de registo" foram iniciados:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. Estabeleça ligação à sua instância através do RDP ou de uma ferramenta semelhante e inicie sessão no Windows.
  2. Abra um terminal do PowerShell com privilégios de administrador: clique com o botão direito do rato no ícone do PowerShell e selecione Executar como administrador
  3. Para reiniciar o agente, execute o seguinte comando do PowerShell:
    Restart-Service google-cloud-ops-agent -Force
    
  4. Para confirmar que o agente foi reiniciado, execute o seguinte comando e verifique se os componentes "Agente de métricas" e "Agente de registo" foram iniciados:
    Get-Service google-cloud-ops-agent*
    

Configure a recolha de registos

Para carregar registos do Vault, tem de criar um recetor para os registos produzidos pelo Vault e, em seguida, criar um pipeline para o novo recetor.

Para configurar um recetor para os seus registos vault_audit, especifique os seguintes campos:

Campo Predefinição Descrição
exclude_paths Uma lista de padrões de caminhos do sistema de ficheiros a excluir do conjunto correspondente a include_paths.
include_paths Uma lista de caminhos do sistema de ficheiros a ler através da análise detalhada de cada ficheiro. Pode usar um caráter universal (*) nos caminhos.
record_log_file_path false Se estiver definido como true, o caminho para o ficheiro específico a partir do qual o registo de registo foi obtido aparece na entrada de registo de saída como o valor da etiqueta agent.googleapis.com/log_file_path. Quando usa um caráter universal, apenas é registado o caminho do ficheiro a partir do qual o registo foi obtido.
type O valor tem de ser vault_audit.
wildcard_refresh_interval 60s O intervalo no qual os caminhos de ficheiros com carateres universais em include_paths são atualizados. Indicado como uma duração, por exemplo, 30s ou 2m. Esta propriedade pode ser útil em débitos de registo elevados, em que os ficheiros de registo são rodados mais rapidamente do que o intervalo predefinido.

O que é registado

O logName é derivado dos IDs dos recetores especificados na configuração. Os campos detalhados no interior de LogEntry são os seguintes.

Os registos vault_audit contêm os seguintes campos em LogEntry:

Campo Tipo Descrição
jsonPayload.auth struct
jsonPayload.auth.accessor de string Este é um HMAC do acessor do token do cliente.
jsonPayload.auth.client_token de string Este é um HMAC do ID do token do cliente.
jsonPayload.auth.display_name de string Este é o nome a apresentar definido pela função do método de autenticação ou explicitamente no momento da criação do segredo.
jsonPayload.auth.entity_id de string Este é um identificador de entidade de token.
jsonPayload.auth.metadata objeto Esta variável contém uma lista de pares de chave/valor de metadados associados ao client_token.
jsonPayload.auth.policies objeto Esta resposta contém uma lista de políticas associadas ao client_token.
jsonPayload.auth.token_type de string
jsonPayload.error de string Se ocorreu um erro com o pedido, a mensagem de erro é incluída no valor deste campo.
jsonPayload.request struct
jsonPayload.request.client_token de string Este é um HMAC do ID do token do cliente.
jsonPayload.request.client_token_accessor de string Este é um HMAC do acessor do token do cliente.
jsonPayload.request.data objeto O objeto de dados vai conter dados secretos em pares de chave/valor.
jsonPayload.request.headers objeto Cabeçalhos HTTP adicionais especificados pelo cliente como parte do pedido.
jsonPayload.request.id de string Este é o identificador exclusivo do pedido.
jsonPayload.request.namespace.id de string
jsonPayload.request.operation de string Este é o tipo de operação que corresponde às capacidades do caminho e deve ser um dos seguintes: create, read, update, delete ou list.
jsonPayload.request.path de string O caminho do Vault pedido para a operação.
jsonPayload.request.policy_override booleano Isto acontece true quando foi pedida uma substituição de política obrigatória flexível.
jsonPayload.request.remote_address de string O endereço IP do cliente que está a fazer o pedido.
jsonPayload.request.wrap_ttl de string Se o token estiver envolvido, apresenta o valor de TTL envolvido configurado como uma string numérica.
jsonPayload.response struct
jsonPayload.response.data.accessor de string Este é um HMAC do acessor do token do cliente.
jsonPayload.response.data.creation_time de string Data/hora no formato RFC 3339 da criação do token.
jsonPayload.response.data.creation_ttl de string TTL de criação de tokens em segundos.
jsonPayload.response.data.display_name de string Este é o nome a apresentar definido pela função do método de autenticação ou explicitamente no momento da criação do segredo.
jsonPayload.response.data.entity_id de string Este é um identificador de entidade de token.
jsonPayload.response.data.expire_time de string Data/hora no formato RFC 3339 que representa o momento em que este token vai expirar.
jsonPayload.response.data.explicit_max_ttl de string Valor de TTL máximo do token explícito em segundos ("0" quando não definido).
jsonPayload.response.data.id de string Este é o identificador exclusivo da resposta.
jsonPayload.response.data.issue_time de string Data/hora no formato RFC 3339.
jsonPayload.response.data.num_uses número Se o token estiver limitado a um número de utilizações, esse valor é representado aqui.
jsonPayload.response.data.orphan booleano Valor booleano que representa se o token é órfão.
jsonPayload.response.data.path de string O caminho do Vault pedido para a operação.
jsonPayload.response.data.policies objeto Esta resposta contém uma lista de políticas associadas ao client_token.
jsonPayload.response.data.renewable booleano Valor booleano que representa se o token é órfão.
jsonPayload.type de string O tipo de registo de auditoria.
severity string (LogSeverity) Nível de entrada de registo (traduzido).

Configure a recolha de métricas

Para carregar métricas do Vault, tem de criar um recetor para as métricas produzidas pelo Vault e, em seguida, criar um pipeline para o novo recetor.

Este recetor não suporta a utilização de várias instâncias na configuração, por exemplo, para monitorizar vários pontos finais. Todas essas instâncias escrevem na mesma série cronológica e o Cloud Monitoring não tem forma de as distinguir.

Para configurar um destinatário para as suas métricas vault, especifique os seguintes campos:

Campo Predefinição Descrição
ca_file Caminho para o certificado da AC. Como cliente, isto valida o certificado do servidor. Se estiver vazio, o destinatário usa a AC de raiz do sistema.
cert_file Caminho para o certificado TLS a usar para ligações que requerem mTLS.
collection_interval 60s Um valor de duração, como 30s ou 5m.
endpoint localhost:8200 O "hostname:port" usado pelo Vault.
insecure true Define se deve ou não usar uma ligação TLS segura. Se estiver definida como false, o TLS está ativado.
insecure_skip_verify false Define se a validação do certificado deve ou não ser ignorada. Se insecure estiver definido como true, o valor insecure_skip_verify não é usado.
key_file Caminho para a chave TLS a usar para ligações que requerem mTLS.
metrics_path /v1/sys/metrics O caminho para a recolha de métricas.
token localhost:8200 Token usado para autenticação.
type Este valor tem de ser vault.

O que é monitorizado

A tabela seguinte apresenta a lista de métricas que o agente de operações recolhe da instância do Vault.

Tipo de métrica
Tipo, Tipo
Recursos monitorizados
Etiquetas
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
cluster
namespace
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
 

Valide a configuração

Esta secção descreve como verificar se configurou corretamente o recetor do Vault. O agente de operações pode demorar um ou dois minutos a começar a recolher telemetria.

Para verificar se os registos do Vault estão a ser enviados para o Cloud Logging, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.

  2. Introduza a seguinte consulta no editor e, de seguida, clique em Executar consulta:
    resource.type="gce_instance"
    log_id("vault_audit")
    

Para verificar se as métricas do Vault estão a ser enviadas para o Cloud Monitoring, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Explorador de métricas:

    Aceda ao Metrics Explorer

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Na barra de ferramentas do painel do criador de consultas, selecione o botão cujo nome é  MQL ou  PromQL.
  3. Verifique se a opção PromQL está selecionada no botão Idioma. O botão para alternar o idioma encontra-se na mesma barra de ferramentas que lhe permite formatar a consulta.
  4. Introduza a seguinte consulta no editor e, de seguida, clique em Executar consulta:
    {"workload.googleapis.com/vault.memory.usage", monitored_resource="gce_instance"}
    

Ver o painel de controlo

Para ver as métricas do Vault, tem de ter um gráfico ou um painel de controlo configurado. A integração do Vault inclui um ou mais painéis de controlo para si. Todos os painéis de controlo são instalados automaticamente depois de configurar a integração e o agente de operações começar a recolher dados de métricas.

Também pode ver pré-visualizações estáticas de painéis de controlo sem instalar a integração.

Para ver um painel de controlo instalado, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Painéis de controlo:

    Aceda a Painéis de controlo

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Selecione o separador Lista de painéis de controlo e, de seguida, escolha a categoria Integrações.
  3. Clique no nome do painel de controlo que quer ver.

Se configurou uma integração, mas o painel de controlo não foi instalado, verifique se o agente de operações está em execução. Quando não existem dados de métricas para um gráfico no painel de controlo, a instalação do painel de controlo falha. Depois de o agente de operações começar a recolher métricas, o painel de controlo é instalado para si.

Para ver uma pré-visualização estática do painel de controlo, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Integrações:

    Aceda a Integrações

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Clique no filtro da plataforma de implementação Compute Engine.
  3. Localize a entrada para Vault e clique em Ver detalhes.
  4. Selecione o separador Painéis de controlo para ver uma pré-visualização estática. Se o painel de controlo estiver instalado, pode navegar até ele clicando em Ver painel de controlo.

Para mais informações acerca dos painéis de controlo no Cloud Monitoring, consulte o artigo Painéis de controlo e gráficos.

Para mais informações sobre como usar a página Integrações, consulte o artigo Gerir integrações.

Instale políticas de alerta

As políticas de alerta indicam ao Cloud Monitoring que lhe envie uma notificação quando ocorrerem condições especificadas. A integração do Vault inclui uma ou mais políticas de alerta para sua utilização. Pode ver e instalar estas políticas de alerta na página Integrações em Monitorização.

Para ver as descrições das políticas de alerta disponíveis e instalá-las, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Integrações:

    Aceda a Integrações

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Localize a entrada para Vault e clique em Ver detalhes.
  3. Selecione o separador Alertas. Este separador apresenta descrições das políticas de alerta disponíveis e uma interface para as instalar.
  4. Instale políticas de alerta. As políticas de alerta precisam de saber para onde enviar notificações de que o alerta foi acionado, pelo que requerem informações suas para a instalação. Para instalar políticas de alerta, faça o seguinte:
    1. Na lista de políticas de alerta disponíveis, selecione as que quer instalar.
    2. Na secção Configurar notificações, selecione um ou mais canais de notificação. Tem a opção de desativar a utilização de canais de notificação, mas, se o fizer, as suas políticas de alerta são acionadas silenciosamente. Pode verificar o respetivo estado em Monitorização, mas não recebe notificações.

      Para mais informações sobre os canais de notificação, consulte o artigo Faça a gestão dos canais de notificação.

    3. Clique em Criar políticas.

Para mais informações sobre as políticas de alerta no Cloud Monitoring, consulte o artigo Introdução aos alertas.

Para mais informações sobre como usar a página Integrações, consulte o artigo Gerir integrações.

O que se segue?

Para ver um passo a passo sobre como usar o Ansible para instalar o agente de operações, configurar uma aplicação de terceiros e instalar um painel de controlo de exemplo, consulte o vídeo Instale o agente de operações para resolver problemas de aplicações de terceiros.