Hashicorp Vault

Vault 是以身分為基礎的密鑰和加密管理系統。 這項整合功能會收集 Vault 的稽核記錄。這項整合功能也會收集權杖、記憶體和儲存空間指標。

如要進一步瞭解 Vault,請參閱 Hashicorp Vault 說明文件

必要條件

如要收集 Vault 遙測資料,請安裝作業套件代理程式

  • 如要使用指標,請安裝 2.18.2 以上版本。
  • 如要查看記錄,請安裝 2.18.1 以上版本。

這項整合功能支援 Vault 1.6 以上版本。

設定 Vault 執行個體

如要從 Vault 執行個體收集遙測資料,您必須在 HCL 或 JSON Vault 設定檔中,將 prometheus_retention_time 欄位設為非零值。

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

此外,您必須是根使用者,才能啟用稽核記錄收集功能,以及建立 prometheus-metrics ACL 政策。根權杖可用於將具有讀取功能的政策新增至 /sys/metrics 端點。這項政策用於建立具備足夠權限的 Vault 權杖,以收集 Vault 指標。

如果您是第一次初始化 Vault,可以使用下列指令碼產生根憑證。如要瞭解如何產生根權杖,請參閱「使用解除封鎖金鑰產生根權杖」。

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

設定作業套件代理程式以監控 Vault

按照設定作業套件代理程式指南操作,新增必要元素,從 Vault 執行個體收集遙測資料,然後重新啟動代理程式

範例設定

下列指令會建立設定,以收集及擷取 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

如要讓這些變更生效,請重新啟動 Ops Agent:

Linux

  1. 如要重新啟動代理程式,請在執行個體上執行下列指令:
    sudo systemctl restart google-cloud-ops-agent
    
  2. 如要確定代理程式已重新啟動,請執行下列指令,並驗證「指標代理程式」和「Logging 代理程式」元件是否已啟動:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. 使用遠端桌面協定或類似工具連線至執行個體,並登入 Windows。
  2. 以滑鼠右鍵按一下 PowerShell 圖示,然後選取「以系統管理員身分執行」,以管理員權限開啟 PowerShell 終端機。
  3. 如要重新啟動代理程式,請執行下列 PowerShell 指令:
    Restart-Service google-cloud-ops-agent -Force
    
  4. 如要確定代理程式已重新啟動,請執行下列指令,並驗證「指標代理程式」和「Logging 代理程式」元件是否已啟動:
    Get-Service google-cloud-ops-agent*
    

設定記錄檔收集作業

如要從 Vault 擷取記錄,您必須為 Vault 產生的記錄建立接收器,然後為新的接收器建立管道。

如要設定 vault_audit 記錄的接收器,請指定下列欄位:

欄位 預設 說明
exclude_paths 要從 include_paths 比對的集合中排除的檔案系統路徑模式清單。
include_paths 要讀取的檔案系統路徑清單,方法是追蹤每個檔案。路徑中可以使用萬用字元 (*)。
record_log_file_path false 如果設為 true,輸出記錄項目中就會顯示路徑,指出記錄項目是從哪個特定檔案取得,並做為 agent.googleapis.com/log_file_path 標籤的值。使用萬用字元時,系統只會記錄取得記錄的檔案路徑。
type 此值必須是 vault_audit
wildcard_refresh_interval 60s include_paths 中萬用字元檔案路徑的重新整理間隔。以時間長度表示,例如 30s2m。在記錄吞吐量較高的情況下,記錄檔的輪替速度會比預設間隔更快,這時這個屬性就可能派上用場。

記錄內容

logName 是從設定中指定的接收器 ID 衍生而來。LogEntry 內的詳細欄位如下。

vault_audit 記錄包含 LogEntry 中的下列欄位:

欄位 類型 說明
jsonPayload.auth 結構體
jsonPayload.auth.accessor 字串 這是用戶端權杖存取子的 HMAC。
jsonPayload.auth.client_token 字串 這是用戶端權杖 ID 的 HMAC。
jsonPayload.auth.display_name 字串 這是由驗證方法角色設定的顯示名稱,或是在建立密鑰時明確設定的顯示名稱。
jsonPayload.auth.entity_id 字串 這是權杖實體 ID。
jsonPayload.auth.metadata 物件 其中會包含與 client_token 相關聯的中繼資料鍵/值組合清單。
jsonPayload.auth.policies 物件 其中會列出與 client_token 相關聯的政策。
jsonPayload.auth.token_type 字串
jsonPayload.error 字串 如果要求發生錯誤,這個欄位的值會包含錯誤訊息。
jsonPayload.request 結構體
jsonPayload.request.client_token 字串 這是用戶端權杖 ID 的 HMAC。
jsonPayload.request.client_token_accessor 字串 這是用戶端權杖存取子的 HMAC。
jsonPayload.request.data 物件 資料物件會以鍵/值組合的形式包含密鑰資料。
jsonPayload.request.headers 物件 用戶端在要求中指定的其他 HTTP 標頭。
jsonPayload.request.id 字串 這是要求的專屬 ID。
jsonPayload.request.namespace.id 字串
jsonPayload.request.operation 字串 這是與路徑功能對應的作業類型,預期會是 createreadupdatedeletelist
jsonPayload.request.path 字串 作業要求的 Vault 路徑。
jsonPayload.request.policy_override 布林值 這是 true,要求覆寫軟性強制政策時會用到。
jsonPayload.request.remote_address 字串 提出要求的用戶端 IP 位址。
jsonPayload.request.wrap_ttl 字串 如果權杖已包裝,系統會以數字字串顯示設定的包裝 TTL 值。
jsonPayload.response 結構體
jsonPayload.response.data.accessor 字串 這是用戶端權杖存取子的 HMAC。
jsonPayload.response.data.creation_time 字串 權杖建立時間的時間戳記,格式為 RFC 3339。
jsonPayload.response.data.creation_ttl 字串 權杖建立存留時間 (秒)。
jsonPayload.response.data.display_name 字串 這是由驗證方法角色設定的顯示名稱,或是在建立密鑰時明確設定的顯示名稱。
jsonPayload.response.data.entity_id 字串 這是權杖實體 ID。
jsonPayload.response.data.expire_time 字串 RFC 3339 格式的時間戳記,代表這個權杖的到期時間。
jsonPayload.response.data.explicit_max_ttl 字串 以秒為單位的明確權杖存留時間上限值 (未設定時為「0」)。
jsonPayload.response.data.id 字串 這是專屬的回覆 ID。
jsonPayload.response.data.issue_time 字串 RFC 3339 格式的時間戳記。
jsonPayload.response.data.num_uses 數字 如果權杖的使用次數有限,這裡會顯示該值。
jsonPayload.response.data.orphan 布林值 代表權杖是否為孤立權杖的布林值。
jsonPayload.response.data.path 字串 作業要求的 Vault 路徑。
jsonPayload.response.data.policies 物件 其中會列出與 client_token 相關聯的政策。
jsonPayload.response.data.renewable 布林值 代表權杖是否為孤立權杖的布林值。
jsonPayload.type 字串 稽核記錄類型。
severity 字串 (LogSeverity) 記錄項目層級 (已翻譯)。

設定指標收集

如要從 Vault 擷取指標,請為 Vault 產生的指標建立接收器,然後為新接收器建立管線。

這個接收器不支援在設定中使用多個執行個體,例如監控多個端點。所有這類執行個體都會寫入相同的時間序列,而 Cloud Monitoring 無法區分這些執行個體。

如要為 vault 指標設定接收器,請指定下列欄位:

欄位 預設 說明
ca_file CA 憑證的路徑。做為用戶端,這會驗證伺服器憑證。如果為空白,接收器會使用系統根 CA。
cert_file 用於 mTLS 必要連線的 TLS 憑證路徑。
collection_interval 60s 時間長度值,例如 30s5m
endpoint localhost:8200 保管箱使用的「主機名稱:通訊埠」。
insecure true 設定是否使用安全的 TLS 連線。如果設為 false,系統會啟用 TLS。
insecure_skip_verify false 設定是否要略過驗證憑證。如果 insecure 設為 true,系統就不會使用 insecure_skip_verify 值。
key_file 用於 mTLS 必要連線的 TLS 金鑰路徑。
metrics_path /v1/sys/metrics 指標收集路徑。
token localhost:8200 用於驗證的權杖。
type 這個值必須是 vault

監控的內容

下表列出作業套件代理程式從 Vault 執行個體收集的指標。

指標類型
類型
受監控資源
標籤
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
 

驗證設定

本節說明如何確認您已正確設定 Vault 接收器。作業套件代理程式可能需要一到兩分鐘,才會開始收集遙測資料。

如要確認系統是否已將 Vault 記錄傳送至 Cloud Logging,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果

  2. 在編輯器中輸入下列查詢,然後按一下「執行查詢」
    resource.type="gce_instance"
    log_id("vault_audit")
    

如要確認 Vault 指標是否已傳送至 Cloud Monitoring,請執行下列操作:

  1. 前往 Google Cloud 控制台的 「Metrics Explorer」頁面:

    前往 Metrics Explorer

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 在查詢建構工具窗格的工具列中,選取名稱為  MQL PromQL 的按鈕。
  3. 確認已在「Language」(語言) 切換按鈕中選取「PromQL」。語言切換按鈕位於同一工具列,可供你設定查詢格式。
  4. 在編輯器中輸入下列查詢,然後按一下「執行查詢」
    {"workload.googleapis.com/vault.memory.usage", monitored_resource="gce_instance"}
    

查看資訊主頁

如要查看保管箱指標,您必須先設定圖表或資訊主頁。 Vault 整合功能包含一或多個資訊主頁。 設定整合功能後,Ops Agent 就會開始收集指標資料,並自動安裝所有資訊主頁。

您也可以查看資訊主頁的靜態預覽畫面,不必安裝整合服務。

如要查看已安裝的資訊主頁,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Dashboards」(資訊主頁) 頁面:

    前往「Dashboards」(資訊主頁)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 選取「資訊主頁清單」分頁,然後選擇「整合」類別。
  3. 按一下要查看的資訊主頁名稱。

如果您已設定整合功能,但尚未安裝資訊主頁,請檢查作業套件代理程式是否正在執行。如果資訊主頁中的圖表沒有指標資料,資訊主頁安裝作業就會失敗。作業套件代理程式開始收集指標後,系統就會為您安裝資訊主頁。

如要查看資訊主頁的靜態預覽畫面,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 「Integrations」(整合) 頁面

    前往「整合」

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 按一下「Compute Engine」部署平台篩選器。
  3. 找出「保管箱」項目,然後按一下「查看詳細資料」
  4. 選取「資訊主頁」分頁標籤,即可查看靜態預覽畫面。如果已安裝資訊主頁,請點選「查看資訊主頁」前往。

如要進一步瞭解 Cloud Monitoring 中的資訊主頁,請參閱「資訊主頁和圖表」。

如要進一步瞭解如何使用「整合」頁面,請參閱「管理整合」一文。

安裝快訊政策

快訊政策會指示 Cloud Monitoring 在發生指定情況時通知您。 Vault 整合功能包含一或多項快訊政策,供您使用。您可以在 Monitoring 的「Integrations」(整合) 頁面中查看及安裝這些快訊政策。

如要查看可用快訊政策的說明並安裝,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 「Integrations」(整合) 頁面

    前往「整合」

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 找出「保管箱」的項目,然後按一下「查看詳細資料」
  3. 選取「快訊」分頁標籤。這個分頁會說明可用的快訊政策,並提供安裝介面。
  4. 安裝快訊政策。快訊政策需要知道在觸發快訊時,要將通知傳送至何處,因此需要您提供安裝資訊。如要安裝快訊政策,請按照下列步驟操作:
    1. 從可用的警報政策清單中,選取要安裝的政策。
    2. 在「設定通知」部分,選取一或多個通知管道。您可以選擇停用通知管道,但這麼做的話,快訊政策會以無聲方式觸發。您可以在「監控」中查看狀態,但不會收到任何通知。

      如要進一步瞭解通知管道,請參閱「管理通知管道」。

    3. 按一下「建立政策」

如要進一步瞭解 Cloud Monitoring 中的快訊政策,請參閱快訊簡介

如要進一步瞭解如何使用「整合」頁面,請參閱「管理整合」一文。

後續步驟

如要逐步瞭解如何使用 Ansible 安裝作業套件代理程式、設定第三方應用程式,以及安裝範例資訊主頁,請觀看「 安裝 Ops Agent 以排解第三方應用程式的問題」影片。