Nutanix Database Service(NDB)でプロビジョニングする PostgreSQL DB で、Peer 認証を有効化してみます。
今回の内容です。
Peer 認証について
Peer 認証は、OS ユーザと DB ユーザの名前が一致していれば、パスワード入力なしで DB に接続できるようになります。以前の投稿 では Post Script で Peer 認証を有効化しましたが、NDB の機能でも、DB プロビジョニングの際に有効化できます。
ドキュメントでは、下記のあたりが参考になります。
- Peer Authentication for PostgreSQL Instances
https://portal.nutanix.com/page/documents/details?targetId=Nutanix-NDB-PostgreSQL-Database-Management-Guide-v2_5:top-peer-authentication-postgres.html
NDB の DB プロビジョニングでは、デフォルトでは Peer 認証が無効になっています。
postges ユーザで接続すると、パスワード入力が必要です。
[postgres@pgsql15-vm-01 ~]$ psql Password for user postgres: ★パスワード入力 psql (15.6) Type "help" for help. postgres=#
初期 DB も同様です。
[postgres@pgsql15-vm-01 ~]$ psql --dbname=testdb Password for user postgres: ★パスワード入力 psql (15.6) Type "help" for help. testdb=#
今回の環境
NDB と PostgreSQL 15 のソフトウェア プロファイルは、下記のように用意してあります。
1. JSON ファイルの用意
NDB で PostgreSQL DB の Peer 認証を有効化して DB をプロビジョニングするには、REST API を使用する必要があります。
API に渡すパラメータを記載する JSON ファイルは、NDB Server の Web UI で DB のプロビジョニングを実施する際に表示される「同等の API」ボタンから取得できます。
JSON データは、「コピー」または「ダウンロード」ボタンで、テキスト ファイルとして保存しておきます。
保存した JSON ファイルは、下記のように編集しておきます。
pgsql-03_peer-auth.json
- L70: enable_peer_auth を、false → true に変更
2. DB のプロビジョニング(curl)
curl で、さきほど作成した JSON ファイルを読み込ませて DB を作成します。
NDB Server の接続情報は、変数に格納しておきます。
NDBADDR=192.168.12.156 NDBUSER=admin NDBPASS='パスワード'
DB を作成します。API メソッドは、POST /databases/provision です。
curl -k -X POST \ https://$NDBADDR/era/v0.9/databases/provision \ -H 'Content-Type: application/json' \ -u "$NDBUSER:$NDBPASS" \ -d @pgsql-03_peer-auth.json
しばらく待つと DB サーバー VM と DB がプロビジョニングされるので、NDB Server の Web UI などから、IP アドレスを確認します。
ちなみに、REST API でも下記のように IP アドレスを確認できます。DB 名は pgsql-03 です。
$ curl -ks -X GET "https://192.168.12.156/era/v0.9/databases?value-type=name&value=pgsql-03" -u "$NDBUSER:$NDBPASS" | jq -r '.[].properties[] | select(.name=="vm_ip") | .value' 192.168.12.176
3. Peer 認証での DB ログイン確認
プロビジョニングされた DB サーバー VM に、NDB Drive ユーザ(postgres)で SSH ログインしておきます。
psql で postgres DB に接続すると、Peer 認証によりパスワードなしでログインできます。
[postgres@pgsql15-vm-03 ~]$ psql psql (15.6) Type "help" for help. postgres=#
初期 DB として作成した testdb DB も、パスワードなしでログインできます。
[postgres@pgsql15-vm-03 ~]$ psql -d testdb psql (15.6) Type "help" for help. testdb=#
pg_hba.conf ファイルには、「local all postgres peer」が自動追記されています。
[postgres@pgsql15-vm-03 ~]$ ls -l $PGDATA/pg_hba.conf -rw-------. 1 postgres postgres 4570 5月 10 13:43 /pgsql/pgsql-03/data/pg_hba.conf [postgres@pgsql15-vm-03 ~]$ grep -E -v '^$|^#' $PGDATA/pg_hba.conf local all postgres peer host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256 local replication all peer host replication all 127.0.0.1/32 scram-sha-256 host replication all ::1/128 scram-sha-256 host all all 0.0.0.0/0 scram-sha-256
以上。