Postgresql95に暗号化ツールのTDEを導入した
Postgresql用の暗号化ツールであるTDE(Transparent Data Encryption for PostgreSQL)を導入しました。
なんどかやリマ押しましたけど、Vagrantで環境作っといて良かったです!
導入手順
1)Vagrant + CentOS7.3 な環境にPostgresql95を導入します。
2)TDE(Transparent Data Encryption for PostgreSQL)をRPMで導入します。
3)暗号化の処理を行います。
作業詳細
1)postgresのパスワードを設定する(post95pas)
後で必要になるので、とっとと設定しておきます
# su – postgres
Last login: Mon Apr 3 16:50:27 UTC 2017 on pts/0
-bash-4.2$ psql
psql (9.5.6)
Type “help” for help.
postgres=# \du
List of roles
Role name | Attributes | Member of
———–+————————————————————+———–
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
postgres=# \password postgres
Enter new password:
Enter it again:
2)TDEインストールのため下記の環境変数で接続できるようにする必要がある
export PGHOST=”localhost”
export PGUSER=”postgres”
export PGPASSWORD=”post95pas”(お使いのパスワード)
export PGPORT=5432
export PGDATABASE=”postgres”
※PGHOST=”localhost”の”localhost”はIPv6
# vi /var/lib/pgsql/9.5/data/pg_hba.conf
# “local” is for Unix domain socket connections only
#local all all peer
local all all md5
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5
※環境変数の削除方法(オマケ)
unset PGHOST
unset PGUSER
unset PGPASSWORD
unset PGPORT
unset PGDATABASE
・Postgresql95を再起動します。
# systemctl restart postgresql-9.5.service
・アクセスを確認
$ psql -w -c “select 1”;
?column?
———-
1
(1 row)
3)TDE for PostgreSQL Free Editionのインストール
・環境変数の設定
.bash_profile
export PGHOME=/usr/pgsql-9.5/
export TDEHOME=/opt/nec/tdeforpg95-fe/
$ source .bash_profile
・pgcryptoを有効にする
# su – postgres
Last login: Mon Apr 3 16:59:45 UTC 2017 on pts/0
Last failed login: Mon Apr 3 17:22:05 UTC 2017 on pts/0
There were 4 failed login attempts since the last successful login.
-bash-4.2$ psql
psql (9.5.6)
Type “help” for help.
postgres=# CREATE EXTENSION pgcrypto;
CREATE EXTENSION
postgres=# SELECT pg_available_extensions();
pg_available_extensions
——————————————————————————————
(pgcrypto,1.2,”cryptographic functions”)
(dict_int,1.0,”text search dictionary template for integers”)
(pg_prewarm,1.0,”prewarm relation data”)
・インストールする
$ wget https://github.com/nec-postgres/tdeforpg/releases/download/v1.1.2.0/tde_for_pg95-fe-1.1.2-0.el7.x86_64.rpm
$ sudo rpm -ivh tde_for_pg95-fe-1.1.2-0.el7.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:tde_for_pg95-fe-1.1.2-0.el7 ################################# [100%]
INFO: Transparent Data Encryption for PostgreSQL 9.5
was installed successfully.
HINT: To complete validation of transparent data encryption feature,
please refer to “/opt/nec/tdeforpg95-fe/INSTALL-NOTE.TXT”
$ sudo ln -s $PGHOME/lib/pgcrypto.so /usr/lib64/libpgcrypto.so
$ sudo ln -s $TDEHOME/SOURCES/data_encryption/95/data_encryption95.so.1.1.2.0 /usr/lib64/data_encryption.so
・/var/lib/pgsql/9.5/data/postgresql.confを修正し、起動時にライブラリを読み込むようにする
shared_preload_libraries = ‘/usr/lib64/data_encryption.so’
・Postgresql95を再起動します。
# systemctl restart postgresql-9.5.service
4)暗号化機能を設定する
・TDE機能をインストールします。
$ sudo sh bin/cipher_setup.sh $PGHOME
Transparent data encryption feature setup script
Please select from the setup menu below
Transparent data encryption feature setup menu
1: activate the transparent data encryption feature
2: inactivate the transparent data encryption feature
select menu [1 – 2] > 1
Please enter database server port to connect : 5432
Please enter database user name to connect : postgres
Please enter password for authentication :
Please enter database name to connect : postgres
CREATE LANGUAGE
INFO: Transparent data encryption feature has been activated
・暗号キーの登録をする kuma0admin
$ sudo sh bin/cipher_key_regist.sh ${PGHOME}
=== Database connection information ===
Please enter database server port to connect : 5432
Please enter database user name to connect : postgres
Please enter password for authentication :
Please enter database name to connect : postgres
=== Regist new cipher key ===
Please enter the new cipher key :
Please retype the new cipher key :
Please enter the algorithm for new cipher key : aes
Are you sure to register new cipher key(y/n) : y
$ psql -U postgres
psql (9.5.6)
Type “help” for help.
postgres=# \d
List of relations
Schema | Name | Type | Owner
——–+——————+——-+———-
public | cipher_key_table | table | postgres
(1 row)
postgres=# select * from cipher_key_table;
key
| algorithm
————————————————————————————————————————————————–
——–+———–
\xc30c0409010240a217c048108bd2d23b01dfaf4f8e7e4cd38cdbf9e7a74a995c29512789be69019f741b33d48180b45fe6bc911d2434b2830f8cbd6f6cd291c223275fde43c4ebb
1f037b8 | aes
(1 row)
処理の流れの概略
1.ログ出力の抑制
⇒ログに暗号キー情報が漏洩する可能性があるらしい
postgres=# select cipher_key_disable_log();
cipher_key_disable_log
————————
t
(1 row)
2.セッション開始
postgres=# SELECT pgtde_begin_session(‘kuma0admin’);
pgtde_begin_session
———————
t
(1 row)
*************** あれこれ処理 *********************
3.セッション終了
postgres=# SELECT pgtde_end_session();
pgtde_end_session
——————-
t
(1 row)
4.ログ出力開始
postgres=# select cipher_key_enable_log();
cipher_key_enable_log
———————–
t
(1 row)
あとはテストデータベースの設定をします。