Azure ADユーザーでAzure Database for PostgreSQLの認証をやってみた

Azure ADユーザーで、Azure Database for PostgreSQLへログインする事が可能です。

PostgreSQL での認証に Azure Active Directory を使用する(MS社公式)

マイクロソフト社サイトの記載にもメリットが色々記載されていますが、PostgreSQLのユーザー管理をAzure ADで出来る事はメリットがあります。

    • メリット抜粋
      • Azure Active Directory の認証形式を使う為、2段階認証と言った事が出来る。
      • トークンによるアクセスを使えるのでパスワードを格納する必要がなくなる。
      • Azure ADグループを割り当てられる事が出来るのでAzure ADのグループを利用してデータベースのアクセス許可を管理できる。

今回はAzure Database for PostgreSQLでのAzure ADユーザーの管理者設定、Azure ADユーザーを使ったPostgreSQLへのログイン確認、PostgreSQL上でのAzure ADユーザー作成までを実施してみました。

今回の作業にあたっては、マイクロソフト社が公開している手順を参考に実施しています。

PostgreSQL での認証に Azure Active Directory を使用する

スポンサーリンク

Azure Database for PostgreSQLのAzure AD管理者設定

今回利用した環境

今回はこちらの環境(Azure ADユーザー、Azure Database for PostgreSQL)を事前に準備して作業を行いました。

      • AADユーザー(PostgreSQLの管理者設定したユーザー)
        • ユーザー名:pg-backup-user@XXXXXX.XXXXXX.XXXXXX
      • AADユーザー(PostgreSQLで追加したAADユーザー)
        • ユーザー名:pg-read-only-user@XXXXXX.XXXXXX.XXXXXX
      • Azure Database for PostgreSQL
          • サーバ名:backup-test-01.postgres.database.azure.com
          • リージョン:東日本
          • バージョン:11
          • パフォーマンス構成:Basic、1 個の仮想コア、5 GB

Azure Database for PostgreSQLでAD管理者設定を行う

公式サイトを参考にAzure PortalでAzure Database for PostgreSQLにAD管理者設定を行います。

Azure Database for PostgreSQLでAAD管理者設定

Azure Database for PostgreSQLのメニューでActive Directory 管理者を選択します。管理者の設定をクリックします。

Active Directoryの管理者設定になりますので、AADユーザーを設定します。今回はpg-backup-userを指定し選択をクリックします。

※グループの設定も可能です。

AAD管理者の設定がされている事を確認したら保存をクリックします。

【補足】Azure Database for PostgreSQLで接続のセキュリティ設定

デフォルト状態ではPostgreSQLへ接続出来ない状態になっています。自身のIPからAzure Database for PostgreSQLへの接続許可設定をします。

※IPが変わった事忘れてて、再設定しないまま検証してて繋がらないと悩んでしまいました。

接続許可設定

クライアントIPの追加を選択します。

自身のIPを許可するファイアウォール規則が追加されますので、保存を選択します。

※環境に応じて許可するIPは指定して下さい。(開始IPと終了IPに同じIPを指定すると/32で指定可能です。)

Azure Database for PostgreSQLへAADユーザーを使ってアクセスする

Azure CLIでログインしトークンを取得する

引き続き公式サイトの情報を参考に作業を進めます。Azure ADユーザーでPostgreSQLにログインする場合はパスワードにトークンを利用します。

トークン発行

Azure CLI(az loginコマンド)を使ってログインします。

az loginコマンドを実行するとブラウザが開かれて、Azureへのログイン画面が表示されるのでログインします。

完了するとメッセージが表示されます。

PS C:\>az login
The default web browser has been opened at (中略)  which you have access…
[
{
“cloudName": “AzureCloud",
“homeTenantId": “テナントID",
“id": “id",
“isDefault": true,
“managedByTenants": [],
“name": “サブスクリプション名,
“state": “Enabled",
“tenantId": “テナントID",
“user": {
“name": “pg-backup-user@XXXXX.XXXXXX.XXXXX",
“type": “user"
}
}
]

Azure CLIを使ってトークンを発行します。コマンドは公式サイトのものをそのまま使います。

トークンの有効時間は1時間になります。

PS C:\>az account get-access-token –resource-type oss-rdbms
{
“accessToken": “トークン値",
“expiresOn": “2021-07-17 19:29:38.427345",
“subscription": “サブスクリプションID",
“tenant": “テナントID",
“tokenType": “Bearer"
}
]

A5:SQL Mk-2でAzure Database for PostgreSQLへの接続設定をする

今回はA5:SQL Mk-2を利用してAzure Database for PostgreSQLに接続します。

    • 接続情報
      • ホスト名:backup-test-01.postgres.database.azure.com(サーバ名.postgres.database.azure.com)
      • データベース名:postgres(デフォルト)
      • ユーザーID:pg-backup-user@XXXXXX.XXXXXX.XXXXXX@backup-test-01(ユーザー名@サーバ名)
      • Port:5432
      • パスワード:発行したトークン値
      • SSLモード:優先
      • サーバ証明書を信用する:チェック

※ユーザー名には@が2つ入ります。

PostgreSQLへログイン

A5:SQL Mk-2でデータベース>データベースの追加と削除を選択し、データベースへの接続を作成します。

データベースの追加と削除が表示されるので、追加をクリックします。

追加するデータベースの接続タイプの選択になります。PostgreSQL(直接接続)を選択します。

 

※Azure Database for PostgreSQLの設定でSSLを必須にしているので、SSLを利用した接続を使います。

サーバ名等の設定を設定値の通り実施します。設定が完了したらOKをクリックします。

実際に接続をしてみてSQLを発行してみた所無事出来た事がわかりました。

※データベースの項目にあるすべてのデータベース情報の再読み込みを実行すると接続が更新されるため接続状況の確認が出来ます。

【補足】A5:SQL Mk-2でSSL接続を使えるようにする

A5:SQL Mk-2でSSL接続する場合にはOpenSSLのライブラリが必要になりますので、事前にインストールします。

Open SSLインストール

OPEN SSLダウンロード(英語)でSSL接続する場合は、OpenSSLのライブラリをインストールします。

※今回の場合はLightで問題ないです。

ライセンス確認画面が表示されますので、I accept the agreementにチェックを入れ次へ進みます。

インストールディレクトリの確認になります。変更しない場合はそのまま次へ進みます。

Open SSLのDLLをWindowsのsystem directoryにコピーするかの確認になります。Windowsのsystem directoryにコピーします。

メッセージを確認し問題が無ければ、インストールを実行します。

Azure Database for PostgreSQLへAADユーザーを追加する

PostgreSQLでAzure AD(AAD)ユーザーユーザーを追加します。

引き続き公式サイトの情報を参考に作業を進めます。AADユーザーをPostgreSQLに追加します。なおこのAADユーザーはAAD管理者登録のグループに属している必要はありません。AADグループやAAD側の権限は問いません。(実際の運用管理上は管理しやすいようAAD側で設定します。)

      • 実施する手順
        • PostgreSQL上でCREATE ROLEコマンドを実行し、追加するAADユーザーをazure_ad_userロールに割り当て
        • 追加したAADユーザーでAzure CLIを使ってAzureにログインし、トークンを発行する。
        • 追加したAADユーザーでPostgreSQLへログインする
PostgreSQLでAADユーザー追加

PostgreSQL側でCREATE ROLEコマンドを実行し、azure_ad_userロールにAADユーザーを追加します。

CREATE ROLE “pg-read-only-user@XXXXX.XXXXX.XXXXX" WITH LOGIN IN ROLE azure_ad_user ;

※azure_ad_userはAzure Database for PostgreSQLにあるビルトインロールです。AADユーザーはこのロールに追加する必要があります。

Azure CLIコマンドを実行し、追加したユーザーでログイン、トークンの発行を行います。

PS C:\>az login

PS C:\>az account get-access-token –resource-type oss-rdbms
{
“accessToken": “トークン値",
“expiresOn": “2021-07-17 19:45:28.227225",
“subscription": “サブスクリプションID",
“tenant": “テナントID",
“tokenType": “Bearer"
}
]

A5:SQL Mk-2で設定を行います。

ユーザーIDは追加したAADユーザー、パスワードはトークンを設定します。

テスト接続で接続を確認してみます。

問題が無ければ、接続に成功しましたメッセージが表示されます。