Redash 中的密鑰
快速導覽
背景
Redash 使用兩個密鑰加密機密資訊:Cookie 密鑰和應用程式密鑰。
Cookie 密鑰
Cookie 密鑰取自 REDASH_COOKIE_SECRET
環境變數。它用於 Web 伺服器的各種加密功能,例如驗證使用者、簽署 Cookie 和儲存使用者工作階段資訊。啟動應用程式時必須有此密鑰。
如果您嘗試在沒有此密鑰的情況下啟動 Redash,Web 伺服器將不會初始化,您會在日誌中找到以下訊息
Exception: You must set the REDASH_COOKIE_SECRET environment variable. Visit https://redash.dev.org.tw/help/open-source/admin-guide/secrets for more information.
要修正此訊息:建立一個名為 REDASH_COOKIE_SECRET
的環境變數並賦予其值。
應用程式密鑰
應用程式密鑰取自 REDASH_SECRET_KEY
環境變數。它用於加密「設定」>「資料來源」畫面和「設定」>「警示目的地」畫面上的所有設定。
啟動應用程式時必須有此密鑰。但是,如果您沒有明確設定一個密鑰,Redash 將改為使用 Cookie 密鑰。這對開發很有幫助。但為了達到最大的安全性,我們建議您為這兩個變數設定唯一的值。
選擇密鑰
我們建議您遵循 官方 Flask 指南 來選擇密鑰。在開發期間使用簡單的密鑰是可以的,但是...
在生產環境中,應該將此密鑰更改為一些隨機位元組。否則,攻擊者可能會使用公開的「dev」密鑰來修改工作階段 Cookie 或任何其他使用密鑰的東西。
強密鑰會是隨機且無法猜測的。請勿在 Redash 的不同實例之間重複使用密鑰,或將它們提交到版本控制。
Flask 建議使用內建的 Python 模組 secrets
$ python -c 'import secrets; print(secrets.token_hex())'
'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
我們的雲端映像使用 CLI 工具 pwgen
$ pwgen -1s 64
QinPGTd7Ulec03lar0vkI9ojqmXsuw4VOyirnC5NuvEdJSCwLwesmknNygXITunT
compose.yaml
相鄰的 .env
檔案,並在那裡設定您的環境變數。變更密鑰
在正常情況下,您會在部署 Redash 時設定密鑰,並且不會再碰它們。但是,如果密鑰遭到洩露(例如,將其提交到版本控制系統),您應該立即變更它。
變更 Cookie 密鑰
假設您已經明確設定了 REDASH_SECRET_KEY
,您可以隨時安全地變更 REDASH_COOKIE_SECRET
。這將立即重設所有使用者的活動工作階段,但不會產生其他副作用。
如果您尚未明確設定 REDASH_SECRET_KEY
,則您應該使用下一節中的說明來重新加密您的機密欄位,然後再修改 REDASH_COOKIE_SECRET
。否則,您現有的資料來源將無法被 Redash 存取。
變更應用程式密鑰
由於 Redash 會在其內部資料庫中靜態加密機密欄位,如果您變更 REDASH_SECRET_KEY
,您也必須重新加密這些欄位。否則,您將無法執行查詢、修改您的資料來源,甚至無法存取資料來源設定畫面。
REDASH_SECRET_KEY
。沒有它,您的資料來源將無法使用。
重新加密機密欄位
Redash CLI 包含 database reencrypt
命令,方便您重新加密 Redash 儲存的機密欄位。它接受兩個位置引數:舊密鑰和新密鑰。當您執行該命令時,Redash 內部資料庫中的機密欄位會使用舊密鑰解密,然後使用新密鑰再次加密。這包括資料來源定義和警示目的地。
如果您使用 docker-compose (例如,從我們的雲端映像之一) 部署 Redash,您可以使用此命令在您的 Docker 主機上調用此 CLI
$ docker-compose run --rm server manage database reencrypt ${old_secret} ${new_secret}