Active Directory (AD) 認証を使用すると、エンタープライズユーザーは別のデータベースパスワードを必要とせずに、AD 認証情報を使用して ApsaraDB RDS for PostgreSQL インスタンスにログインできます。このガイドでは、Elastic Compute Service (ECS) インスタンスに AD ドメインコントローラーを設定し、Lightweight Directory Access Protocol (LDAP) を使用して RDS インスタンスをその自己管理 AD ドメインに接続する手順を説明します。
仕組み
ユーザーが RDS インスタンスに接続すると、インスタンスは LDAP を介して認証リクエストを AD ドメインコントローラーに転送します。ドメインコントローラーはユーザーの認証情報を検証し、結果を返します。接続に対して AD 認証が有効になっている場合、AD ドメインコントローラーがパスワード検証を管理します。特定の接続で AD が使用されていない場合、ApsaraDB RDS は独自のパスワード検証にフォールバックします。
RDS インスタンスと AD ドメインコントローラーは、プライベートネットワーク経由でのみ通信します。両方とも同じ Virtual Private Cloud (VPC) 内に存在する必要があります。
前提条件
開始する前に、以下が準備できていることを確認してください。
-
PostgreSQL 10 以降、マイナーエンジンバージョン 20210228 以降を実行し、クラウドディスクを使用している ApsaraDB RDS for PostgreSQL インスタンス。マイナーエンジンバージョンを更新するには、「ApsaraDB RDS for PostgreSQL インスタンスのマイナーエンジンバージョンを更新する」をご参照ください。
-
RDS インスタンスと同じ VPC 内にあり、Windows Server 2016 以降を実行している ECS インスタンス
-
ECS セキュリティグループで、RDS インスタンスのプライベート IP アドレスからのインバウンドトラフィックを許可するように設定します。 詳細については、「セキュリティグループルールを追加する」をご参照ください。 ECS ファイアウォールが有効になっている場合は、同じトラフィックを許可するように設定します (デフォルトでは、ファイアウォールは無効になっています)。
-
Domain Admins グループに属するドメインアカウント
-
ApsaraDB RDS コンソールへのアクセス
ステップ 1:ECS 上での AD ドメインコントローラーのセットアップ
AD ドメインコントローラーは Windows Server を実行する必要があります。このガイドでは、Windows Server 2016 を例として使用します。
-
ECS インスタンスにログインし、[サーバーマネージャー] を開きます。
-
左側のナビゲーションウィンドウで [ダッシュボード] をクリックし、次に [役割と機能の追加] をクリックします。

-
[役割と機能の追加ウィザード] で、各タブを次のように設定します。
ECS インスタンスには静的 IP アドレスが必要です。動的 IP アドレスを使用すると、DNS サーバーが利用できなくなります。
タブ 設定 開始する前に デフォルト設定を使用します。 インストールの種類 デフォルト設定を使用します。 サーバーの選択 デフォルト設定を使用します。 サーバーの役割 [Active Directory ドメインサービス] を選択し、ダイアログボックスで [機能の追加] をクリックします。[DNS サーバー] を選択し、[機能の追加] をクリックします。 機能 デフォルト設定を使用します。 AD DS デフォルト設定を使用します。 DNS サーバー デフォルト設定を使用します。 インストール [インストール] をクリックします。 -
インストールが完了したら、[閉じる] をクリックします。
-
左側のナビゲーションウィンドウで [AD DS] をクリックします。右上隅の [その他] をクリックします。

-
[すべてのサーバータスクの詳細と通知] パネルで、[このサーバーをドメインコントローラーに昇格させる] をクリックします。

-
[Active Directory ドメインサービス構成ウィザード] で、以下を設定します。
タブ 設定 展開の構成 [新しいフォレストを追加する] を選択し、[ルートドメイン名] を設定します。この例では pgsqldomain.netを使用します (pgsqldomainがプレフィックス、netがサフィックスです)。設定全体で同じルートドメイン名を使用してください。
ドメインコントローラーのオプション [ディレクトリサービス復元モード (DSRM) パスワード] を設定します。 
サーバーの選択 [DNS の委任を作成する] のチェックを外します。 
その他のオプション、パス、オプションの確認 デフォルト設定を使用します。 前提条件のチェック [インストール] をクリックします。 -
ECS インスタンスが AD ドメインコントローラーとして再起動した後、次のステップに進む前にもう一度ログインします。
ステップ 2:AD ドメインコントローラーへのユーザー追加
2種類の AD ユーザーが必要です。管理者ユーザー (LDAP がディレクトリにバインドするために使用) と標準ユーザー (RDS インスタンスへのログインに使用) です。
管理者ユーザーの追加
-
[サーバーマネージャー] で、左側のナビゲーションウィンドウにある [AD DS] をクリックします。ドメインコントローラーを右クリックし、[Active Directory ユーザーとコンピューター] を選択します。

-
pgsqldomain.net を展開し、[Users] を右クリックして [新規作成] > [ユーザー] を選択します。
pgsqldomain.netはステップ 1 で設定したルートドメイン名です。
-
ユーザー名を入力し、[次へ] をクリックします。

-
パスワードを入力し、[パスワードを無期限にする] を選択してから [次へ] をクリックし、[完了] をクリックします。

-
新しいユーザーをダブルクリックし、Domain Admins グループに追加します。


標準ユーザーの追加
上記と同じ手順に従って、標準ユーザーを作成します。ユーザーを Domain Admins グループに追加する手順はスキップします。
この例では、標準ユーザーとして ldapuser を使用します。このアカウントは RDS インスタンスへのログインに使用されます。
ステップ 3:ECS のセキュリティグループルールの設定
AD ドメインコントローラーは、いくつかのポートを開く必要があります。ドメインコントローラーには専用のセキュリティグループを使用し、他の ECS インスタンスと共有しないようにしてください。
-
ECS コンソールにログインし、[インスタンス & イメージ] > [インスタンス] に移動します。
-
上部のナビゲーションバーで、ECS インスタンスのリージョンを選択します。
-
ECS インスタンス ID をクリックし、左側のナビゲーションウィンドウで [セキュリティグループ] をクリックします。
-
[操作] 列の [ルールの追加] をクリックします。
-
[インバウンド] タブで [ルールの追加] をクリックして、RDS インスタンスが以下のポートで ECS インスタンスに到達できるようにします。
プロトコル ポート サービス TCP 88 Kerberos 認証 TCP 135 RPC TCP/UDP 389 LDAP TCP 445 CIFS TCP 3268 グローバルカタログ TCP/UDP 53 DNS TCP 49152–65535 デフォルトの動的ポート範囲 ( 49152/65535として入力)
ステップ 4:RDS インスタンスの設定
対応するデータベースアカウントの作成
-
ApsaraDB RDS コンソールで RDS インスタンスを見つけ、その ID をクリックします。
-
ldapuserという名前のアカウントを作成します。「アカウントの作成」をご参照ください。RDS のアカウント名は AD の標準ユーザー名と完全に一致させる必要があります (この例では
ldapuser)。パスワードは異なっていてもかまいません。AD 認証がアクティブな場合、AD ドメインコントローラーがパスワードを検証します。非アクティブな場合、ApsaraDB RDS はコンソールで設定されたアカウントパスワードを使用します。
AD ドメインサービスの設定
-
左側のナビゲーションウィンドウで [アカウント] をクリックし、[AD ドメインサービス] タブを開きます。このタブを初めて開くと、システムは 2 つのデフォルトレコードを作成します。
host all all 0.0.0.0/0 md5 host replication all 0.0.0.0/0 md5これらのレコードは削除または変更できます。
-
最初のレコードの [編集] をクリックし、以下のパラメーターを設定します。OPTION フィールドには、次のフォーマットを使用します。
パラメーター 値の例 説明 優先度 0レコードの優先度。 0が最も高い優先度で、最初のレコードに自動的に割り当てられます。TYPE host接続タイプ。 hostは SSL と非 SSL の両方の TCP/IP 接続に一致します。hostsslは SSL 接続のみに一致します (SSL 暗号化が有効である必要があります)。hostnosslは非 SSL 接続のみに一致します。DATABASE all指定されたユーザーがアクセスできるデータベース。 allを使用すると、すべてのデータベースへのアクセスが許可されます。複数のデータベースはカンマで区切ります。USER ldapuser接続を許可される AD 標準ユーザー。複数のユーザーはカンマで区切ります。Domain Admins アカウントはここでは使用できません。 ADDRESS 0.0.0.0/0許可されるソース IP アドレス。 0.0.0.0/0は任意の IP アドレスからの接続を許可します。MASK (空欄のまま) ADDRESS の IP アドレスのサブネットマスク。CIDR 表記を使用する場合は空欄のままにします。 METHOD ldap認証方式。小文字である必要があります。有効な値: trust、reject、scram-sha-256、md5、password、gss、sspi、ldap、radius、cert、pam。OPTION 下記参照 METHOD が ldapの場合に必須の LDAP オプション。ldapserver=<ECS インスタンスのプライベート IP アドレス> ldapbasedn="CN=Users,DC=<ドメインプレフィックス>,DC=<ドメインサフィックス>" ldapbinddn="CN=<AD 管理者ユーザー名>,CN=Users,DC=<ドメインプレフィックス>,DC=<ドメインサフィックス>" ldapbindpasswd="<AD 管理者パスワード>" ldapsearchattribute="sAMAccountName"ドメイン
pgsqldomain.netと管理者ユーザーadminuserの例:ldapserver=<ECS プライベート IP> ldapbasedn="CN=Users,DC=pgsqldomain,DC=net" ldapbinddn="CN=adminuser,CN=Users,DC=pgsqldomain,DC=net" ldapbindpasswd="<adminuser パスワード>" ldapsearchattribute="sAMAccountName"OPTION パラメーターの完全なリストについては、PostgreSQL 認証方式のドキュメントをご参照ください。
-
AD ドメインサービスレコードの右側にある [追加] をクリックして、以下の値を持つフォールバックレコードを追加します。
host all all 0.0.0.0/0 md5 -
[OK] をクリックし、次に [送信] をクリックします。
[送信] をクリックすると、RDS インスタンスは約 1 分間 [インスタンスのメンテナンス中] ステータスになります。新しい設定は新しい接続にのみ適用されます。変更を適用するには、既存の接続を閉じて再接続してください。
ステップ 5:接続のテスト
psql コマンドラインツールを使用して RDS インスタンスに接続します。RDS アカウントのパスワードではなく、AD 標準ユーザーの認証情報を使用します。
psql -h <RDS インスタンスのエンドポイント> -U ldapuser -p 5432 -d postgres
パスワードを求められたら、ldapuser の AD パスワード (RDS アカウントのパスワードではない) を入力します。
psql を使用する前に PostgreSQL クライアントをインストールしてください。その他の接続方法については、「ApsaraDB RDS for PostgreSQL インスタンスへの接続」をご参照ください。
AD ドメインサービスレコードの一括インポート (任意)
複数の AD ドメインサービスレコードを一度に設定するには、一括インポート機能を使用します。
インポートモード:
-
既存のサービス情報を上書きする — 現在のすべてのレコードを置き換えます。
-
追加のサービス情報 (最高優先度) — 新しいレコードを先頭に挿入し、既存のレコードよりも高い優先度を与えます。
-
追加のサービス情報 (最低優先度) — 新しいレコードを末尾に追加し、既存のレコードよりも低い優先度を与えます。
必須フォーマット:
TYPE|DATABASE|USER1|ADDRESS|MASK|METHOD|OPTION
サンプルレコード:
host|all|ldapuser|0.0.0.0/0||ldap|ldapserver=<ECS プライベート IP> ldapbasedn="CN=Users,DC=pgsqldomain,DC=net" ldapbinddn="CN=<AD 管理者ユーザー名>,CN=Users,DC=pgsqldomain,DC=net" ldapbindpasswd="<AD 管理者パスワード>" ldapsearchattribute="sAMAccountName"
[AD ドメインの編集] テキストボックスにレコードを入力し、インポートモードを選択して送信します。
AD ドメインサービス編集履歴の表示
-
RDS コンソールでインスタンス ID をクリックし、[アカウント] > [AD ドメインサービス編集履歴] に移動します。
-
[操作] 列の [変更詳細] をクリックして、変更の詳細を表示します。変更が失敗した場合、ステータスは [未適用] と表示されます。[変更ログ] をクリックしてエラーメッセージを確認します。
