Active Directory (AD) 認証により、エンタープライズユーザーはデータベース専用のパスワードを設定せずに、AD の認証情報を使用して ApsaraDB RDS for PostgreSQL インスタンスにログインできます。本ガイドでは、Elastic Compute Service (ECS) インスタンス上に AD ドメインコントローラーを構成し、LDAP を使用して ApsaraDB RDS for PostgreSQL インスタンスをその自己管理型 AD ドメインに接続する手順を説明します。
仕組み
ユーザーが ApsaraDB RDS for PostgreSQL インスタンスに接続すると、インスタンスは Lightweight Directory Access Protocol (LDAP) を介して認証リクエストを AD ドメインコントローラーに転送します。ドメインコントローラーはユーザーの認証情報を検証し、結果を返します。接続時に AD 認証が有効になっている場合、AD ドメインコントローラーがパスワード検証を担当します。一方、特定の接続で AD を使用していない場合は、ApsaraDB RDS が独自のパスワード検証にフォールバックします。
ApsaraDB RDS for PostgreSQL インスタンスと AD ドメインコントローラー間の通信は、プライベートネットワーク上でのみ行われます。両者は同一の仮想プライベートクラウド (VPC) 内に配置されている必要があります。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
PostgreSQL 10 以降 を実行中の ApsaraDB RDS for PostgreSQL インスタンス(マイナーエンジンバージョンは 20210228 以降)、および クラウドディスク を使用していること。マイナーエンジンバージョンを更新するには、「ApsaraDB RDS for PostgreSQL インスタンスのマイナーエンジンバージョンを更新する」をご参照ください。
ApsaraDB RDS for PostgreSQL インスタンスと同じ VPC 内にあり、Windows Server 2016 以降 を実行中の ECS インスタンス。
RDS インスタンスのプライベート IP アドレスからのインバウンドトラフィックを許可するように設定された ECS セキュリティグループ。詳細については、「セキュリティグループルールの追加」をご参照ください。ECS ファイアウォールが有効になっている場合は、同じトラフィックを許可するように設定してください(ファイアウォールはデフォルトで無効です)。
Domain Admins グループに所属するドメインアカウント。
ApsaraDB RDS コンソール へのアクセス権限。
ステップ 1:ECS 上に AD ドメインコントローラーをセットアップする
AD ドメインコントローラーは Windows Server 上で実行する必要があります。本ガイドでは、例として Windows Server 2016 を使用します。
ECS インスタンスにログインし、Server Manager を開きます。
左側のナビゲーションウィンドウで Dashboard をクリックし、その後 Add roles and features をクリックします。

Add Roles and Features Wizard の各タブを以下のように構成します。
ECS インスタンスには静的 IP アドレスを設定する必要があります。動的 IP アドレスでは DNS サーバーが利用不可になります。
タブ 設定 Before You Begin デフォルト設定を使用します。 Installation Type デフォルト設定を使用します。 Server Selection デフォルト設定を使用します。 Server Roles Active Directory Domain Services を選択し、ダイアログボックスで Add Features をクリックします。DNS Server を選択し、その後 Add Features をクリックします。 Features デフォルト設定を使用します。 AD DS デフォルト設定を使用します。 DNS Server デフォルト設定を使用します。 Install Install をクリックします。 インストールが完了したら、Close をクリックします。
左側のナビゲーションウィンドウで AD DS をクリックし、右上隅の More をクリックします。

All Servers Task Details and Notifications パネルで、Promote this server to a domain controller をクリックします。

Active Directory Domain Services Configuration Wizard で、以下の項目を構成します。
タブ 設定 Deployment Configuration Add a new forest を選択し、Root domain name を設定します。本例では pgsqldomain.net(pgsqldomainがプレフィックス、netがサフィックス)を使用します。構成全体で、このルートドメイン名を一貫して使用してください。
Domain Controller Options Directory Services Restore Mode (DSRM) password を設定します。 
Server Selection Create DNS delegation のチェックを解除します。 
Additional Options、Paths、Review Options デフォルト設定を使用します。 Prerequisites Check Install をクリックします。 ECS インスタンスが AD ドメインコントローラーとして再起動された後、次のステップに進む前に再度ログインします。
ステップ 2:AD ドメインコントローラーにユーザーを追加する
AD ユーザーは、以下の 2 種類が必要です:LDAP によるディレクトリへのバインドに使用される管理者ユーザー、および ApsaraDB RDS for PostgreSQL インスタンスへのログインに使用される標準ユーザー。
管理者ユーザーの追加
Server Manager の左側ナビゲーションウィンドウで AD DS をクリックします。ドメインコントローラーを右クリックし、Active Directory Users and Computers を選択します。

pgsqldomain.net を展開し、Users を右クリックして、New > User を選択します。
pgsqldomain.netは、ステップ 1 で設定したルートドメイン名です。
ユーザー名を入力し、Next をクリックします。

パスワードを入力し、Password never expires を選択した後、Next および Finish をクリックします。

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


標準ユーザーの追加
上記と同じ手順で標準ユーザーを作成しますが、Domain Admins グループへの追加はスキップします。
本例では、標準ユーザーとして ldapuser を使用します。このアカウントは ApsaraDB RDS for PostgreSQL インスタンスへのログインに使用されます。
ステップ 3:ECS のセキュリティグループルールを構成する
AD ドメインコントローラーでは、複数のポートを開く必要があります。他の ECS インスタンスと共有せず、ドメインコントローラー専用のセキュリティグループを使用することを推奨します。
ECS コンソール にログインし、「Instances & Images」>「Instances」に移動します。
上部のナビゲーションバーで、ECS インスタンスのリージョンを選択します。
ECS インスタンス ID をクリックし、左側のナビゲーションウィンドウから Security Groups をクリックします。
Actions 列の Add Rules をクリックします。
Inbound タブで、Add Rule をクリックし、以下のポートで ApsaraDB RDS for PostgreSQL インスタンスから 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:ApsaraDB RDS for PostgreSQL インスタンスを構成する
対応するデータベースアカウントの作成
ApsaraDB RDS コンソールで、RDS インスタンスを見つけ、そのIDをクリックします。
ldapuserという名前のアカウントを作成します。「アカウントの作成」をご参照ください。ApsaraDB RDS for PostgreSQL のアカウント名は、AD 標準ユーザー名と完全に一致する必要があります(本例では
ldapuser)。パスワードは異なっていても構いません。AD 認証が有効な場合、パスワード検証は AD ドメインコントローラーが行います。AD 認証が無効な場合は、コンソールで設定したアカウントパスワードが使用されます。
AD ドメインサービスの構成
左側のナビゲーションウィンドウで Accounts をクリックし、「AD Domain Services」タブを開きます。初めてこのタブを開くと、システムが以下の 2 つのデフォルトレコードを作成します:
host all all 0.0.0.0/0 md5 host replication all 0.0.0.0/0 md5これらのレコードは削除または変更可能です。
最初のレコードの Edit をクリックし、以下のパラメーターを構成します。OPTION フィールドには、以下の形式を使用します。
パラメーター 例の値 説明 Priority 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 ドメインサービスレコードの右側にある add をクリックし、以下の値を持つフォールバックレコードを追加します。
host all all 0.0.0.0/0 md5OK をクリックし、その後 Submit をクリックします。
Submit をクリックすると、ApsaraDB RDS for PostgreSQL インスタンスは約 1 分間「Maintaining Instance」状態になります。新しい構成は、新規接続に対してのみ有効になります。既存の接続を閉じて再接続することで、変更を適用できます。
ステップ 5:接続のテスト
psql コマンドラインツールを使用して ApsaraDB RDS for PostgreSQL インスタンスに接続します。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"レコードを Edit AD domain テキストボックスに入力し、インポートモードを選択して送信します。
AD ドメインサービス編集履歴の表示
RDS コンソールでインスタンス ID をクリックし、「Accounts」>「AD Domain Services Edit History」に移動します。
Actions 列の changedetails をクリックして変更詳細を表示します。変更が失敗した場合、ステータスに「Not Taking Effect」と表示されます。Change log をクリックすると、エラーメッセージを確認できます。
