Sentry 企業級資料安全解決方案 - Relay 入門

為少 發表於 2022-01-05

Sentry 企業級資料安全解決方案 - Relay 入門

內容整理自官方開發文件

Sentry Relay 通過提供作為應用程式和 sentry.io 之間中間層的獨立服務來提供企業級資料安全性。

Relay 專門設計用於:

  • 在將個人身份資訊 (PII) 傳送給 Sentry 之前,在中心位置對其進行清理
  • 在低頻寬或連線受限的地區提高事件響應時間
  • 充當將所有 HTTP 通訊限制為自定義域名的組織的不透明代理

託管模式(managed mode) 下的 Relay 僅適用於商業和企業計劃https://sentry.io/pricing/

Relay 用例

Relay 旨在支援對個人身份資訊 (PII) 的資料清理、響應時間和企業域管理具有特定企業安全要求的組織。

PII 資料清理

Sentry 已經在兩個地方清除了 PII

  1. 在傳送事件之前在 SDK
  2. 抵達 Sentry 的基礎設施後

Relay 新增了第三個選項,可以在將資料傳送到 Sentry 之前在一箇中心位置清理資料。

要選擇正確的資料清理位置,請考慮:

響應時間

Relay 對請求的響應非常快。在您的基礎設施附近安裝 Relay 將進一步縮短髮送事件時的響應時間。這種安裝方法可以特別減少偏遠地區的往返時間。

企業域管理

預設情況下,SDK 需要使用指向 sentry.io 的資料來源名稱 (DSN) 進行配置。如果您需要將所有 HTTP 通訊限制為自定義域名,Relay 可以充當不透明代理,將事件可靠地轉發到 Sentry

入門

開始使用 Relay 就像使用預設設定一樣簡單。您還可以配置 Relay 以滿足您組織的需求。檢視配置選項頁面以獲取有關操作場景的詳細討論。

Relay server 稱為 relay。從 GitHub Releases 下載二進位制檔案。DockerHub 上提供了一個 Docker 映象。

初始化配置

要建立初始配置,請使用 Relayrelay config init 命令,
該命令將配置檔案放在當前工作目錄下的 .relay 資料夾中。

Docker 中,使用 Docker 提供的標準機制提供配置目錄,通過掛載 Docker volumes 或構建新容器並複製檔案。

# 調整配置目錄的許可權
docker run --rm -it                \
  -v $(pwd)/config/:/work/.relay/  \
  --entrypoint bash                \
  getsentry/relay                  \
  -c 'chown -R relay:relay /work/.relay'

# 生成配置
docker run --rm -it                \
  -v $(pwd)/config/:/work/.relay/  \
  getsentry/relay                  \
  config init

選擇預設配置以建立最小配置檔案。
您可以通過選擇 "create custom config" 並自定義這些引數來選擇覆蓋預設設定:

  • mode 設定,用於配置 Relay 執行的主要模式。有關可用 Relay 模式的更多資訊,請參閱 Relay 模式

目前,只有 proxystatic 模式可供所有組織使用。managed 模式下的 Relay 僅適用於商業和企業計劃https://docs.sentry.io/product/relay/modes/

  • upstream 設定配置 Relay 將事件轉發到的伺服器(預設為主要的 sentry.io URL)。

  • porthost 設定配置 Relay 將偵聽的 TCP 埠。這是 SDK 傳送事件的地址。

  • tls 設定配置 TLS 支援(HTTPS 支援),當需要保護 SDKRelay 之間的通訊時使用。

設定記錄在 .relay/config.yml 中。請注意,所有配置值都是可選的,並且預設為以下設定:

relay:
  mode: managed
  upstream: "https://sentry.io/"
  host: 0.0.0.0
  port: 3000
  tls_port: ~
  tls_identity_path: ~
  tls_identity_password: ~

配置在配置選項中有完整記錄。

建立憑證

不適用於 proxystatic 模式。

除了 config.ymlinit 命令還建立了一個憑證檔案 credentials.json,它位於同一個 .relay 目錄中。此檔案包含 Relay 用於與上游伺服器進行身份驗證的公鑰和私鑰。

因此,必須保護此檔案不被未經授權的實體修改或檢視。

典型的憑據檔案類似於此示例:

{
  "secret_key": "5gkTAfwOrJ0lMy9aOAOmHKO1k6gd8ApYkAInmg5VfWk",
  "public_key": "nDJI79SbEYH9-8NEJAI7ezrgYfoIPW3Bnkg00k1z0fA",
  "id": "cde0d72e-0c4e-4550-a934-c1867d8a177c"
}

managed 模式下執行時,使用 public_key 向上遊伺服器註冊您的 Relay

使用 Sentry 註冊 Relay

不適用於 proxystatic 模式。

為了在 managed 模式下執行,RelaySentry 中的組織和專案設定中提取 PII 剝離、過濾和速率限制的配置。
由於這些設定可能包含敏感資訊,因此它們的訪問受到 Sentry 的限制並需要授權。

Sentry 註冊 Relay

  1. 通過檢查 credentials.json 檔案或執行以下命令來複制公鑰的內容:

    docker run --rm -it                \
      -v $(pwd)/config/:/work/.relay/  \
      getsentry/relay                  \
      credentials show
    
  2. 單擊 Sentry 主導航中的 Settings,然後選擇 Relays

Sentry 企業級資料安全解決方案 - Relay 入門

  1. 點選 New Relay Key 新增金鑰並儲存:

Sentry 企業級資料安全解決方案 - Relay 入門

此過程向 Sentry 註冊 Relay,以便準備傳送訊息。請參閱配置選項以瞭解有關 Relay 配置選項的更多資訊。

執行 Relay

Sentry 註冊 Relay 後,它就可以執行了:

docker run --rm -it                \
  -v $(pwd)/config/:/work/.relay/  \
  -p 3000:3000                     \
  getsentry/relay                  \
  run

在預設配置下,Relay 發出類似於以下內容的日誌輸出:

 INFO  relay::setup > launching relay from config folder .relay
 INFO  relay::setup >   relay mode: managed
 INFO  relay::setup >   relay id: cde0d72e-0c4e-4550-a934-c1867d8a177c
 INFO  relay::setup >   public key: nDJI79SbEYH9-8NEJAI7ezrgYfoIPW3Bnkg00k1z0fA
 ...
 INFO  relay_server::actors::upstream > relay successfully registered with upstream

有關如何配置 Relay 的日誌記錄的更多資訊,請參閱 Logging 頁面。

如果您移動了 config 資料夾(例如,出於安全原因),請使用 --config 選項指定位置:

docker run --rm -it                \
  -v $(pwd)/config/:/etc/relay/    \
  -p 3000:3000                     \
  getsentry/relay                  \
  run --config /etc/relay/

傳送測試事件

一旦 Relay 執行並通過 Sentry 進行身份驗證,將測試事件傳送到您組織中的專案之一。

通過在 Settings > Projects > {YOUR_PROJECT_NAME} > Client Keys (DSN) 導航到您的專案設定來獲取您的專案的 DSN,然後選擇一個現有的 DSN,它看起來類似於:

https://[email protected]/2345

接下來,替換部分 DSN 以匹配 Relay 可訪問的地址。例如,如果 Relay 偵聽 http://localhost:3000,請將 DSNprotocolhost 更改為:

http ://[email protected] localhost:3000 /2345

在您的 SDK 配置中使用新的 DSN。要對此進行測試,您可以使用 sentry-cli安裝說明)傳送訊息:

export SENTRY_DSN='http://[email protected]:3000/2345'
sentry-cli send-event -m 'A test event'

幾秒鐘後,該事件應出現在您專案的問題流(issues stream)中。

系列

公眾號:黑客下午茶