Looker 會使用 AES-256 Galois/計數器模式 (GCM) 加密機制,加密內部儲存的機密資料,包括:
- Looker 內部資料庫的備份
- 資料庫和服務連線資訊
- 使用者驗證資訊
- 使用者屬性值
- 已快取或準備好供傳送的客戶資料
如需 Looker 加密資料的詳細清單,請提出支援要求。
系統會使用專屬的資料金鑰加密資料,並包含已簽署且有版本號碼的加密信封,以確保驗證。這個模式需要使用外部客戶主金鑰 (CMK)。CMK 用於擷取、加密及解密金鑰加密金鑰 (KEK),而 KEK 則用於擷取、加密及解密資料金鑰。
加密功能僅用於 Looker 的內部資料庫和快取。客戶資料庫不會受到 Looker 加密功能的任何影響。此外,只有靜態資料 (儲存在磁碟上的資料) 會以這種方式加密。
客戶代管安裝作業可以使用自己的 AWS KMS 帳戶或自訂金鑰管理系統。所有資料金鑰和 KEK 都會加密,並在客戶代管的 Looker 安裝作業中內部使用。如果未使用 AWS KMS,請妥善保管外部 CMK。
現有的客戶代管安裝項目如要使用 GCM 加密功能,就必須從舊版加密功能遷移至新版 GCM 加密功能。新的客戶代管安裝作業需要額外設定 GCM 加密功能。
請依序按照下列各節中的程序操作。
停止 Looker 並建立完整備份
如果您要從現有的 Looker 執行個體遷移至 GCM 加密,請務必建立完整備份,以防加密遷移作業發生問題。如果您要安裝新的 Looker 執行個體,請略過本節。
如果您使用的是 Looker 內部資料庫:
cd looker
./looker stop
tar -zcvf /tmp/looker-pre-encrypt.tar.gz /home/lookerops/looker --exclude=.cache --exclude=log --exclude=.tmp --exclude=.snapshots --exclude=looker.jar --exclude=authorized_keys --exclude=dr-log --exclude=core
如果您執行外部 MySQL 資料庫來儲存 Looker 應用程式資料,請另外備份資料庫。如果資料庫是 MySQL 執行個體,請建立快照。資料庫相對較小,因此只需幾分鐘即可完成。然後停止 Looker。
如果 Looker 是叢集,請務必先停止每個節點再繼續操作:
cd looker
./looker stop
如果您日後發出遷移指令時,仍有節點正在執行,指令就會失敗,並顯示「有其他正在執行的節點已連線至這個後端 Looker 資料庫。如果 Looker 在過去一分鐘內關閉,請稍後再試一次,否則請確認叢集中的所有節點都已關閉。」
產生 CMK
如果您使用 AWS KMS,請使用 AWS 管理主控台或 API 建立 CMK。
如果您未使用 AWS KMS,請產生 32 位元組的 Base64 CMK。您可以將 CMK 儲存在環境變數或檔案中。
如要產生 CMK 並儲存在環境變數中,您可以使用下列指令產生 CMK:
openssl rand -base64 32
產生 CMK 後,請複製該 CMK,然後使用下列指令將 CMK 儲存在
LKR_MASTER_KEY_ENV
環境變數中 (其中<CMK_value>
是您使用上一個指令產生的 CMK):export LKR_MASTER_KEY_ENV=<CMK_value>
如果 Looker 是叢集,請在叢集中的每個節點上執行上述指令。
如要產生 CMK 並儲存在檔案中,您可以使用下列指令 (其中
<path_to_CMK_file>
是儲存 CMK 的路徑和檔案名稱):openssl rand -base64 32 > <path_to_key_file>
產生 CMK 檔案後,請將金鑰檔案權限設為目前使用者的唯讀權限:
chmod 0400 <path_to_key_file>
產生 CMK 後,請務必先將其儲存在安全且永久的位置,再繼續操作!在內部資料庫加密後遺失 CMK,可能會導致執行個體遺失。
建立 AWS 身分與存取權管理角色
如果您未使用 AWS KMS,請略過本節。
如果您使用 AWS KMS,Looker 建議您建立新的 IAM 角色,並將該角色附加至 Looker 執行個體。
以下是 IAM 角色範例,其中包含 CMK 所需的基本權限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "kms:GenerateRandom",
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:Generate*",
],
"Resource": "arn:aws:kms:*:*:key/*"
}
]
}
設定環境變數
如果您使用 AWS KMS,請將 AWS_REGION
環境變數設為 AWS 區域,並將 LKR_AWS_CMK
環境變數設為 CMK 別名:
export AWS_REGION=<AWS_region>
export LKR_AWS_CMK=alias/<CMK_alias>
您也可以選擇設定 LKR_AWS_CMK_EC
環境變數,以設定自訂的 AWS 加密內容。如果您未設定這個環境變數,Looker 會使用預設的加密內容,即字串 Looker_Encryption_Context
。
export LKR_AWS_CMK_EC=<My_Encryption_Context>
如果您未使用 AWS KMS,且將 CMK 儲存在檔案中,請將 LKR_MASTER_KEY_FILE
環境變數設為 CMK 檔案的路徑:
export LKR_MASTER_KEY_FILE=<path_to_key_file>
如果您未使用 AWS KMS,且將 CMK 儲存在環境變數中,請將 LKR_MASTER_KEY_ENV
環境變數設為 CMK 的值:
export LKR_MASTER_KEY_ENV=<CMK_value>
如果 Looker 是叢集,請在叢集中的每個節點上執行上述指令。
加密內部資料庫
如果您要將現有的 Looker 執行個體遷移至 GCM 加密,請遷移 Looker 的內部資料庫,然後啟動 Looker:
java -jar looker.jar migrate_encryption
./looker start
如果 Looker 執行個體以
-d <db.yaml>
或--internal-db-creds=<db.yaml>
啟動選項開頭,這些選項會提供含有資料庫憑證的 YAML 檔案路徑,您就必須在java -jar looker.jar migrate_encryption
指令中加入相同的選項。例如
java -jar looker.jar migrate_encryption -d /path/file
。
如果您要安裝新的 Looker 例項,請在啟動新的 Looker 例項時開始加密程序。
加密程序通常不到一分鐘即可完成。Looker 啟動後,您可以在 Looker 記錄中搜尋 GCM
,驗證新的加密方式:
grep GCM log/looker.log
2018-10-29 22:42:20.279 +0000 [INFO|007d0|crypt] :: Starting migration from AES-128-CBC Legacy to AES-GCM-256
2018-10-29 22:42:20.468 +0000 [INFO|007d0|db:looker] :: (0.000152s) INSERT INTO "SETTING" ("KEY", "VALUE") VALUES
疑難排解
本節列出一些常見錯誤及其解決方法:
找不到「migrate_encryption」工作:請將 Looker 執行個體更新至 Looker 6.4。
Looker 無法啟動,因為缺少備援金鑰庫:Looker 找不到 CMK。檢查
LKR_MASTER_KEY_FILE
環境變數中的 CMK 路徑是否正確。Looker 無法啟動,因為主金鑰的大小無效,必須是 32 個位元組,但實際上是 X:CMK 長度必須是 32 個位元組。
Looker 無法啟動,因為:備用金鑰檔案的權限
必須為 0400,但實際上是 XXX :CMK 檔案必須為唯讀,且chmod
值為0400
。