keyring_aws
外掛程式是包含在 MySQL 企業版中的延伸功能,屬於商業產品。若要深入瞭解商業產品,請參閱 https://mysql.dev.org.tw/products/。
keyring_aws
金鑰環外掛程式會與 Amazon Web Services Key Management Service (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 Server 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
組態檔,其中應包含兩行。第 1 行:秘密存取金鑰 ID。
第 2 行:秘密存取金鑰。
例如,如果金鑰 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,“Keyring 系統變數”。
啟動 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 金鑰管理函式”。
在外掛程式啟動時,keyring_aws
外掛程式會從其組態檔讀取 AWS 秘密存取金鑰 ID 和金鑰。它也會將儲存檔中包含的任何加密金鑰讀取到其記憶體內快取中。
在操作期間,keyring_aws
會在記憶體內快取中維護加密金鑰,並使用儲存檔作為本機永久儲存空間。每個 keyring 操作都是交易性的:keyring_aws
要么成功變更記憶體內金鑰快取和 keyring 儲存檔,要么操作失敗且 keyring 狀態保持不變。
為了確保僅當正確的 keyring 儲存檔存在時才刷新金鑰,keyring_aws
會在檔案中儲存 keyring 的 SHA-256 總和檢查碼。在更新檔案之前,外掛程式會驗證它是否包含預期的總和檢查碼。
keyring_aws
外掛程式支援組成標準 MySQL Keyring 服務介面的函式。這些函式執行的 keyring 操作可在兩個層級存取:
SQL 介面:在 SQL 陳述式中,呼叫 章節 8.4.4.12,“通用 Keyring 金鑰管理函式” 中所述的函式。
C 介面:在 C 語言程式碼中,呼叫 章節 7.6.9.2,“Keyring 服務” 中所述的 keyring 服務函式。
範例(使用 SQL 介面)
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
此外,keyring_aws_rotate_cmk()
和 keyring_aws_rotate_keys()
函式「延伸」了 keyring 外掛程式介面,以提供標準 keyring 服務介面未涵蓋的 AWS 相關功能。這些功能只能透過使用 SQL 呼叫這些函式來存取。沒有對應的 C 語言金鑰服務函式。
關於 keyring_aws
允許的金鑰值特性的詳細資訊,請參閱 章節 8.4.4.10,“支援的 Keyring 金鑰類型和長度”。
假設 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
,以取消註冊外掛程式。