1 MySQL/MariaDBのセキュリティ保護
概要
このセクションでは、MySQL/MariaDBデータベースを安全に保護するためのベストプラクティスを説明します。
基本的なセットアップについては、デフォルトのMySQL/MariaDBデータベース作成手順を参照してください。この手順には、Zabbixデータベースに対するすべての権限を持つ「zabbix」ユーザーの作成が含まれています。 このユーザーはデータベース所有者であり、Zabbixのアップグレード時にデータベース構造を変更するために必要な権限も持っています。
セキュリティを向上させるため、最小限の権限を持つ追加のデータベースロールおよびユーザーを作成することを推奨します。 これらのロールおよびユーザーは、最小権限の原則に基づいて設定する必要があります。 つまり、意図された機能を実行するために不可欠な権限のみを付与する必要があります。
ユーザーロールの作成
対応する権限を持つ以下のロールを作成します。
- zbx_srv - Zabbixサーバーおよびプロキシを実行するためのロール:
CREATE ROLE 'zbx_srv';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_srv';
FLUSH PRIVILEGES;
- zbx_web - Zabbix WebインターフェースおよびAPIを実行するためのロール:
CREATE ROLE 'zbx_web';
GRANT DELETE, INSERT, SELECT, UPDATE ON zabbix.* TO 'zbx_web';
FLUSH PRIVILEGES;
- zbx_bckp - テーブルのバックアップ用ロール:
CREATE ROLE 'zbx_bckp';
GRANT LOCK TABLES, TRIGGER, SELECT ON zabbix.* TO 'zbx_bckp';
GRANT process ON *.* TO 'zbx_bckp';
FLUSH PRIVILEGES;
テーブルの復元およびアップグレードは、データベース所有者が実行する必要があります。
- zbx_part - データベースパーティショニング用の、権限を制限したロール; このロールは特定のデータベーステーブルに対する権限を付与するため、データベース作成後にのみ作成できることに注意してください:
CREATE ROLE 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_uint TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_str TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_text TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.history_log TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.trends TO 'zbx_part';
GRANT SELECT, ALTER, DROP ON zabbix.trends_uint TO 'zbx_part';
-- MariaDBの場合: 次の行をスキップしてください (GRANT session_variables_admin ON *.* TO 'zbx_part';)
GRANT session_variables_admin ON *.* TO 'zbx_part';
GRANT SELECT ON zabbix.dbversion TO 'zbx_part';
GRANT SELECT, DELETE ON zabbix.housekeeper TO 'zbx_part';
FLUSH PRIVILEGES;
ロールを作成した後、それらをユーザーに割り当てることができます。
ユーザーロールの割り当て
作成したユーザーロールを割り当てるには、ユーザーを作成し、該当するロールをそのユーザーに割り当てます。
必要に応じて、<user>、<host>、<role>、<password> を置き換えてください。
CREATE USER '<user>'@'<host>' IDENTIFIED BY '<password>';
GRANT '<role>' TO '<user>'@'<host>';
SET DEFAULT ROLE '<role>' TO '<user>'@'<host>';
-- MariaDBの場合: SET DEFAULT ROLE '<role>' FOR '<user>'@'<host>'
FLUSH PRIVILEGES;
たとえば、Zabbixサーバーおよびプロキシを実行するためのロールを作成して割り当てるには、次のようにします。
CREATE USER 'usr_srv'@'localhost' IDENTIFIED BY 'password';
GRANT 'zbx_srv' TO 'usr_srv'@'localhost';
SET DEFAULT ROLE ALL TO 'usr_srv'@'localhost';
FLUSH PRIVILEGES;