keyring_aws
外掛程式是 MySQL 企業版中包含的擴充功能,為商業產品。若要深入瞭解商業產品,請參閱 https://mysql.dev.org.tw/products/。
keyring_aws
金鑰環外掛程式會與 Amazon Web Services 金鑰管理服務 (AWS KMS) 通訊,作為金鑰產生的後端,並使用本機檔案儲存金鑰。所有金鑰環資料皆僅由 AWS 伺服器產生,而非由 keyring_aws
產生。
MySQL 企業版可在 Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Debian、Ubuntu、macOS 和 Windows 上與 keyring_aws
搭配使用。MySQL 企業版不支援在這些平台上使用 keyring_aws
EL6
一般 Linux (glibc2.12)
SLES 12 (搭配 MySQL 伺服器 5.7 之後的版本)
Solaris
此處的討論假設您已大致熟悉 AWS 和 KMS。一些相關的資訊來源
以下章節提供 keyring_aws
金鑰環外掛程式的設定和使用資訊
若要安裝 keyring_aws
,請使用 第 8.4.4.3 節「金鑰環外掛程式安裝」中的一般指示,以及此處找到的外掛程式特定設定資訊。
外掛程式程式庫檔案包含 keyring_aws
外掛程式和兩個可載入函數 keyring_aws_rotate_cmk()
和 keyring_aws_rotate_keys()
。
若要設定 keyring_aws
,您必須取得一個秘密存取金鑰,提供與 AWS KMS 通訊的認證,並將其寫入設定檔
建立 AWS KMS 帳戶。
使用 AWS KMS 建立秘密存取金鑰 ID 和秘密存取金鑰。存取金鑰用於驗證您的身分和您的應用程式身分。
使用 AWS KMS 帳戶建立 KMS 金鑰 ID。在 MySQL 啟動時,將
keyring_aws_cmk_id
系統變數設為 CMK ID 值。此變數為必要變數,且無預設值。(如果需要,可以使用SET GLOBAL
在執行階段變更其值。)如有必要,請建立組態檔所在的目錄。該目錄應具有限制模式,且僅供執行 MySQL 伺服器的帳戶存取。例如,在 Unix 和類 Unix 系統上,若要使用
/usr/local/mysql/mysql-keyring/keyring_aws_conf
作為檔名,則以下命令(以root
身分執行)會建立其父目錄並設定目錄模式和擁有權$> cd /usr/local/mysql $> mkdir mysql-keyring $> chmod 750 mysql-keyring $> chown mysql mysql-keyring $> chgrp mysql mysql-keyring
在 MySQL 啟動時,將
keyring_aws_conf_file
系統變數設定為/usr/local/mysql/mysql-keyring/keyring_aws_conf
,以向伺服器指示組態檔的位置。準備
keyring_aws
組態檔,其中應包含兩行第一行:秘密存取金鑰 ID
第二行:秘密存取金鑰
例如,如果金鑰 ID 是
wwwwwwwwwwwwwEXAMPLE
,而金鑰是xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
,則組態檔看起來會像這樣wwwwwwwwwwwwwEXAMPLE xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
為了在伺服器啟動過程中可以使用,必須使用 --early-plugin-load
選項載入 keyring_aws
。keyring_aws_cmk_id
系統變數是必要設定,並設定從 AWS KMS 伺服器取得的 KMS 金鑰 ID。keyring_aws_conf_file
和 keyring_aws_data_file
系統變數可選擇性地設定 keyring_aws
外掛程式用於組態資訊和資料儲存的檔案位置。檔案位置變數的預設值與平台相關。若要明確設定位置,請在啟動時設定變數值。例如,在伺服器 my.cnf
檔案中使用這些行,並根據您的平台調整 .so
字尾和檔案位置(如有必要)
[mysqld]
early-plugin-load=keyring_aws.so
keyring_aws_cmk_id='arn:aws:kms:us-west-2:111122223333:key/abcd1234-ef56-ab12-cd34-ef56abcd1234'
keyring_aws_conf_file=/usr/local/mysql/mysql-keyring/keyring_aws_conf
keyring_aws_data_file=/usr/local/mysql/mysql-keyring/keyring_aws_data
為了讓 keyring_aws
外掛程式成功啟動,組態檔必須存在,並且包含先前所述的有效秘密存取金鑰資訊。儲存檔不需要存在。如果不存在,keyring_aws
會嘗試建立它(以及它的父目錄,如有必要)。
如需有關用於設定 keyring_aws
外掛程式的系統變數的其他資訊,請參閱 第 8.4.4.16 節:「金鑰環系統變數」。
啟動 MySQL 伺服器,並安裝與 keyring_aws
外掛程式相關聯的函式。這是一次性操作,透過執行以下陳述式來執行,並根據您的平台調整 .so
字尾(如有必要)
CREATE FUNCTION keyring_aws_rotate_cmk RETURNS INTEGER
SONAME 'keyring_aws.so';
CREATE FUNCTION keyring_aws_rotate_keys RETURNS INTEGER
SONAME 'keyring_aws.so';
如需有關 keyring_aws
函式的其他資訊,請參閱 第 8.4.4.13 節:「外掛程式特定的金鑰環金鑰管理函式」。
在外掛程式啟動時,keyring_aws
外掛程式會從其組態檔中讀取 AWS 秘密存取金鑰 ID 和金鑰。它也會將儲存檔中包含的任何加密金鑰讀取到其記憶體內快取中。
在操作期間,keyring_aws
會將加密金鑰維護在記憶體內快取中,並使用儲存檔作為本機持久儲存。每個金鑰環操作都是交易性的:keyring_aws
要麼成功變更記憶體內金鑰快取和金鑰環儲存檔,要麼操作失敗且金鑰環狀態保持不變。
為了確保僅在存在正確的金鑰環儲存檔時才刷新金鑰,keyring_aws
會將金鑰環的 SHA-256 總和檢查碼儲存在檔案中。在更新檔案之前,外掛程式會驗證它是否包含預期的總和檢查碼。
keyring_aws
外掛程式支援構成標準 MySQL 金鑰環服務介面的函式。這些函式執行的金鑰環操作可在兩個層級存取
SQL 介面:在 SQL 陳述式中,呼叫 第 8.4.4.12 節:「一般用途的金鑰環金鑰管理函式」 中所述的函式。
C 介面:在 C 語言程式碼中,呼叫 第 7.6.9.2 節:「金鑰環服務」 中所述的金鑰環服務函式。
範例(使用 SQL 介面)
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
此外,keyring_aws_rotate_cmk()
和 keyring_aws_rotate_keys()
函式「擴展」金鑰環外掛程式介面,以提供標準金鑰環服務介面未涵蓋的 AWS 相關功能。這些功能僅能透過使用 SQL 呼叫這些函式來存取。沒有對應的 C 語言金鑰服務函式。
如需有關 keyring_aws
允許的金鑰值特性的資訊,請參閱 第 8.4.4.10 節:「支援的金鑰環金鑰類型和長度」。
假設 keyring_aws
外掛程式在伺服器啟動時已正確初始化,則可以變更用於與 AWS KMS 通訊的認證。
使用 AWS KMS 建立新的秘密存取金鑰 ID 和秘密存取金鑰。
將新的認證儲存在組態檔中(由
keyring_aws_conf_file
系統變數命名的檔案)。檔案格式如先前所述。重新初始化
keyring_aws
外掛程式,使其重新讀取組態檔。假設新的認證有效,則外掛程式應成功初始化。有兩種方法可以重新初始化外掛程式
重新啟動伺服器。這比較簡單且沒有副作用,但不適用於需要盡量減少伺服器停機時間和盡可能減少重新啟動次數的安裝。
透過執行以下陳述式來重新初始化外掛程式,而無需重新啟動伺服器,並根據您的平台調整
.so
字尾(如有必要)UNINSTALL PLUGIN keyring_aws; INSTALL PLUGIN keyring_aws SONAME 'keyring_aws.so';
注意除了在執行階段載入外掛程式之外,
INSTALL PLUGIN
還具有將外掛程式註冊到mysql.plugin
系統資料表的副作用。因此,如果您決定停止使用keyring_aws
,僅從用於啟動伺服器的選項組中移除--early-plugin-load
選項是不夠的。這樣會阻止外掛程式提前載入,但伺服器在啟動順序中到達載入mysql.plugin
中註冊的外掛程式時,仍會嘗試載入它。因此,如果您執行剛才所述的
UNINSTALL PLUGIN
加INSTALL PLUGIN
序列來變更 AWS KMS 認證,然後停止使用keyring_aws
,則除了移除--early-plugin-load
選項之外,還必須再次執行UNINSTALL PLUGIN
,以取消註冊外掛程式。