データベース通信セキュリティ¶
本章はデータベースとのネットワーク通信に関連する問題を取り扱います。これには、IP アドレスのバインドや TLS を用いた暗号化ネットワーク通信を含みます。
データベースサーバーの IP アドレスバインド¶
サービスとデータベース間の機微なデータベース通信を隔離するために、データベースサーバーが隔離された管理ネットワーク経由のみでデータベースと通信できるように設定することを強く推奨します。データベースサーバーがクライアントからの通信用のネットワークソケットをバインドするインターフェースまたは IP アドレスを制限することにより、これを実現できます。
MySQL のバインドアドレスの制限¶
my.cnf
の場合:
[mysqld]
...
bind-address <ip address or hostname of management network interface>
PostgreSQL のバインドアドレスの制限¶
postgresql.conf
の場合:
listen_addresses = <ip address or hostname of management network interface>
データベース通信¶
データベース通信を管理ネットワークに制限することに加えて、クラウド管理者がそれらのデータベースのバックエンドに TLS を要求するように設定することを強く推奨します。データベースのクライアント接続に TLS を使用することにより、改ざんや盗聴から通信を保護できます。次のセクションで議論するように、TLS を使用することにより、データベースのユーザー認証に X.509 証明書 (一般的に PKI として参照されます) を使用するフレームワークも提供できます。以下は、2 つの有名なデータベースバックエンド MySQL と PostgreSQL に TLS を典型的に設定する方法について示します。
注釈
証明書と鍵ファイルをインストールするとき、ファイルのパーミッションが制限されていることを確認します。たとえば、chmod 0600
を実行すると、データベースサーバー上の他のプロセスやユーザーによる権限のないアクセスを防ぐために、所有者がデータベースデーモンのユーザーに制限されます。
MySQL SSL 設定¶
以下の行をシステム全体の MySQL 設定ファイルに追加する必要があります。
my.cnf
の場合:
[[mysqld]]
...
ssl-ca = /path/to/ssl/cacert.pem
ssl-cert = /path/to/ssl/server-cert.pem
ssl-key = /path/to/ssl/server-key.pem
Optionally, if you wish to restrict the set of SSL ciphers used for the encrypted connection. See ciphers for a list of ciphers and the syntax for specifying the cipher string:
ssl-cipher = 'cipher:list'
PostgreSQL SSL 設定¶
以下の行をシステム全体の PostgreSQL 設定ファイル postgresql.conf
に追加する必要があります。
ssl = true
Optionally, if you wish to restrict the set of SSL ciphers used for the encrypted connection. See ciphers for a list of ciphers and the syntax for specifying the cipher string:
ssl-ciphers = 'cipher:list'
サーバー証明書、鍵、認証局 (CA) のファイルを $PGDATA ディレクトリの以下のファイルに置く必要があります。
$PGDATA/server.crt
- サーバー証明書$PGDATA/server.key
-server.crt
に対応する秘密鍵$PGDATA/root.crt
- 信頼された認証局$PGDATA/root.crl
- 証明書失効リスト