masking フィルタによるデータ保護
Posted on 2月 26, 2019 by MariaDB
MariaDB MaxScale 2.1 で導入された masking フィルタではマイナンバー,クレジットカード情報などの機密度の高い情報を簡単にマスキングすることができます。今回はこのマスキングフィルターに関して解説いたします。
制限事項
以下のタイプのカラムに対してのみマスキングは有効となります。
- BINARY
- VARBINARY
- CHAR
- VARCHAR
- BLOB
- TINYBLOB
- MEDIUMBLOB
- LONGBLOB
- TEXT
- TINYTEXT
- MEDIUMTEXT
- LONGTEXT
- ENUM
- SET
テスト環境
以下の環境でテストを実施しました。
- MariaDB MaxScale 2.3.3
- MariaDB Server 10.3.12
- CentOS 7.6.1810
MaxScale Masking filter設定
下記の例のように,filter設定において,module=masking
を指定,service設定においてfilters=Masking
というようにfiltersパラメータにてfilterのオブジェクト名を参照します。
[maxscale] threads=auto [Masking] type=filter module=masking rules=/etc/maxscale.modules.d/masking_rules.json warn_type_mismatch=always large_payload=ignore [Splitter-Service] type=service router=readwritesplit servers=server1,server2,server3 user=maxuser password=maxpwd # masking filter filters=Masking [Splitter-Listener] type=listener service=Splitter-Service protocol=mariadbclient port=3306 [MariaDB-Monitor] type=monitor module=mariadbmon servers=server1,server2,server3 user=maxuser password=maxpwd auto_failover=true auto_rejoin=true #----------------------- [server1] type=server address=192.168.2.101 port=3306 protocol=mariadbbackend [server2] type=server address=192.168.2.102 port=3306 protocol=mariadbbackend [server3] type=server address=192.168.2.103 port=3306 protocol=mariadbbackend
マスキングルール
マスキングのルールは以下の例のように,JSON形式で指定します。
{ "rules": [ { "replace": { "column": "card_number1" }, "with": { "fill": "*" } }, { "replace": { "column": "card_number2", "match": "^\\d{4}-\\d{4}-\\d{4}" }, "with": { "fill": "*" } }, { "obfuscate": { "column": "card_number3" } } ] }
このルールの場合,以下のようなマスキング/難読化を行います。
- カラム名が card_number1 の場合は,すべて * でマスキング
- カラム名が card_number2 の場合は,最後の4桁以外すべて * でマスキング
- カラム名が card_number3 の場合は,難読化(obfuscation)
マスキング設定検証
サンプル・テーブル
use test; create table masking1 (card_number1 char(20)); create table masking2 (card_number2 char(20)); create table masking3 (card_number3 char(20));
サンプル・データ
以下のようなクレジットカード番号相当のものをINSERTします。
insert into masking1 values ('1234-5678-9012-3456'); insert into masking2 values ('1234-5678-9012-3456'); insert into masking3 values ('1234-5678-9012-3456');
SELECT実行結果
MaxScaleノード上に MariaDB-client をインストールし,検証クエリを実行してみます。
maxscale$ mysql -h127.0.0.1 -umaxuser -pmaxpwd test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 10.3.12-MariaDB-log MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. MariaDB [test]> select * from masking1; +---------------------+ | card_number1 | +---------------------+ | ******************* | +---------------------+ MariaDB [test]> select * from masking2; +---------------------+ | card_number2 | +---------------------+ | **************-3456 | +---------------------+ MariaDB [test]> select * from masking3; +---------------------+ | card_number3 | +---------------------+ | ~BQpI~B3~oMl3f~~@?& | +---------------------+
意図した通りのマスキングが行われていることが確認できました。なお,バックエンドのデータベースに直接接続した場合は当然のことながらマスキングは行われませんので,留意願います。
まとめ
毎日のように大規模なデータ漏洩の報道がされている昨今,データベースProxyであるMaxScaleを介したマスキング,難読化により,アプリケーションコードの変更なく高度なデータ保護を行うことが可能であることが確認できました。