NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

NDB で PostgreSQL 15 をプロビジョニングしてみる。(Peer 認証)

Nutanix Database Service(NDB)でプロビジョニングする PostgreSQL DB で、Peer 認証を有効化してみます。

今回の内容です。

Peer 認証について

Peer 認証は、OS ユーザと DB ユーザの名前が一致していれば、パスワード入力なしで DB に接続できるようになります。以前の投稿 では Post Script で Peer 認証を有効化しましたが、NDB の機能でも、DB プロビジョニングの際に有効化できます。

ドキュメントでは、下記のあたりが参考になります。

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 に変更

gist.github.com

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

以上。

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。