このトピックでは、Elastic Compute Service (ECS) インスタンスに Active Directory (AD) ドメインコントローラーを設定し、Kerberos 認証を使用して PolarDB for MySQL クラスターを AD ドメインと統合する方法について説明します。
背景情報
Active Directory (AD) は、Microsoft が提供するディレクトリサービスです。ディレクトリは、LAN (ローカルエリアネットワーク) 上のオブジェクトに関する情報を格納する階層構造です。組織は、コンピューターアカウント、ユーザーアカウント、グループなどの項目をディレクトリに格納することで、セキュリティを強化し、管理を簡素化できます。
PolarDB for MySQL は、AD ドメインとの統合をサポートしています。AD ドメインサービス情報を設定することで、クラスターを Active Directory に関連付け、Kerberos 認証を有効にできます。
バージョン要件
ご利用の PolarDB for MySQL クラスターは、次の要件を満たす必要があります。
-
データベースエンジンバージョン:8.0.1
-
マイナーバージョン:8.0.1.1.44.2 以降。クラスターがこの要件を満たしていない場合は、マイナーバージョンをアップグレードする必要があります。
-
製品エディション:Enterprise Edition
-
シリーズ:Cluster Edition
注意事項
この機能は現在カナリアリリース中です。トライアルを申請できます。
前提条件
すでに AD ドメインと PolarDB for MySQL にアクセスするためのクライアント環境がある場合は、ECS インスタンスを作成する必要はありません。AD ドメインサーバー情報の設定に直接進むことができます。
-
ECS インスタンスを作成済みであること。PolarDB for MySQL をカスタムドメインに接続するには、内部ネットワークを使用する必要があり、ECS インスタンスは次の条件を満たす必要があります。
-
システムイメージは Windows Server 2016 以降のバージョンで、言語は英語に設定されていること。
-
-
クライアント認証用にECS インスタンスを作成済みであること。PolarDB for MySQL クライアントをホストする ECS インスタンスは、次の条件を満たす必要があります。
-
PolarDB for MySQL クライアントをホストする ECS インスタンスは、ターゲットの PolarDB for MySQL クラスターと同じ Virtual Private Cloud (VPC) 内にある必要があります。
-
PolarDB for MySQL クライアントをホストする ECS インスタンスは、AD ドメインコントローラーをホストする ECS インスタンスと同じ VPC 内にある必要があります。
-
-
プライマリ Alibaba Cloud アカウントでログインしていること。
操作手順
ステップ 1 (任意): AD ドメインコントローラーの設定
-
Windows Server 2022 を実行している ECS インスタンスにリモートでログインします。
説明AD ドメインコントローラーには Windows Server オペレーティングシステムが必要です。Windows Server 2016 以降の使用を推奨します。このトピックでは、Windows Server 2022 を例として使用します。
-
[サーバー マネージャー] を検索して開きます。
-
[役割と機能の追加] をクリックし、パラメーターを次のように設定します。
ページ
説明
[インストールの種類]
デフォルト設定を維持します。
[サーバーの選択]
デフォルト設定を維持します。
[サーバーの役割]
-
[Active Directory ドメイン サービス] を選択し、ポップアップダイアログボックスで [機能の追加] をクリックします。
-
[DNS サーバー] を選択し、ポップアップダイアログボックスで [機能の追加] をクリックします。コンピューターに静的 IP アドレスがないというプロンプトが表示された場合は、IP アドレスが自動的に変更されて DNS サーバーが利用できなくなるのを防ぐために、静的 IP アドレスを設定することを推奨します。
[機能]
デフォルト設定を維持します。
AD DS
デフォルト設定を維持します。
DNS サーバー
デフォルト設定を維持します。
[確認]
[インストール] をクリックします。
-
-
インストールが完了したら、[閉じる] をクリックします。
-
左側のナビゲーションウィンドウで [AD DS] をクリックし、右上隅の [その他] をクリックします。
-
[このサーバーをドメイン コントローラーに昇格させる] をクリックし、パラメーターを次のように設定します。
このオプションは、[サーバー マネージャー] の [すべてのサーバー タスクの詳細と通知] ページにあります。[展開後の構成] タスクの [操作] 列にあります。
ページ
説明
[展開の構成]
[新しいフォレストを追加する] を選択し、ドメイン名を設定します。
[ルート ドメイン名] ボックスに、
polardb.domainと入力します。[ドメイン コントローラー オプション]
ディレクトリサービス復元モード (DSRM) のパスワードを設定します。
[ドメイン コントローラー オプション] ページで、[フォレストの機能レベル] と [ドメインの機能レベル] の両方を [Windows Server 2016] に設定します。[ドメイン ネーム システム (DNS) サーバー] と [グローバル カタログ (GC)] チェックボックスを選択します。
[DNS オプション]
[DNS 委任の作成] チェックボックスをオフにします。
[追加オプション]
デフォルト設定を維持します。
[パス]
デフォルト設定を維持します。
[オプションの確認]
デフォルト設定を維持します。
[前提条件のチェック]
[インストール] をクリックします。
説明インストールが完了すると、システムが再起動します。
-
システムが再起動するのを待ってから、再度 [サーバー マネージャー] を検索して開きます。
-
左側のナビゲーションウィンドウで [AD DS] をクリックします。次に、右側のターゲットドメインコントローラーサーバーを右クリックし、[Active Directory ユーザーとコンピューター] を選択して AD ユーザー管理モジュールを開きます。
-
[polardb.domain] > [ユーザー] を右クリックし、[新規] > [ユーザー] を選択します。
-
ログインユーザーを設定し、[次へ] をクリックします。
[フルネーム] と [ユーザー ログオン名] に
polardbmtestuserと入力します。ドメインサフィックスとして@polardb.domainを選択し、[次へ] をクリックします。 -
ログインパスワードを設定し、[パスワードを無期限にする] オプションを選択してから、[次へ] > [完了] をクリックします。
-
新しく作成したユーザーをダブルクリックします。
[アカウント オプション]セクションで、Kerberos AES暗号化をサポートするオプションを選択します。[このアカウントは Kerberos AES 128 ビット暗号化をサポートします] と [このアカウントは Kerberos AES 256 ビット暗号化をサポートします] のチェックボックスを選択します。
-
同じ手順で、
polardbmという名前の別のユーザーを作成します。このユーザーは PolarDB for MySQL のサーバー側認証用であり、polardbmtestuserはクライアントアクセス用です。
ステップ 2 (任意): セキュリティグループルールの設定
-
ECS コンソールにログインします。
-
左側のナビゲーションウィンドウで、[インスタンスとイメージ] > Instance を選択します。
-
コンソールの左上隅で、リージョン を選択します。
-
[インスタンス] ページで、ターゲット ECS インスタンスの ID をクリックします。
-
セキュリティグループ タブをクリックします。次に、ターゲットのセキュリティグループを見つけ、操作 列の [ルールの管理] をクリックします。
説明ドメインコントローラーには多くのオープンポートが必要です。ドメインコントローラー専用のセキュリティグループを作成し、他の ECS インスタンスと共有しないことを推奨します。
-
[インバウンド] タブで、[クイック追加] をクリックして、次のポートを介した ECS インスタンスへのアクセスを許可します。
タイプ
ポート範囲
説明
TCP
88
Kerberos 認証プロトコルポート。
TCP
135
リモートプロシージャコール (RPC) ポート。
TCP/UDP
389
Lightweight Directory Access Protocol (LDAP) ポート。
TCP
445
共通インターネットファイルシステム (CIFS) プロトコルポート。
TCP
3268
グローバルカタログポート。
TCP/UDP
53
DNS ポート。
TCP
49152-65535
接続用のデフォルトの動的ポート範囲。
49152/65535の形式で入力します。
ステップ 3: PolarDB for MySQL の AD ドメインサーバー情報の設定
-
PolarDB クラスターリストに移動し、上部でリージョンを選択してから、ターゲットクラスターの ID をクリックします。
-
左側のナビゲーションウィンドウで アカウント管理 をクリックし、AD ドメインサービス情報 タブを選択します。初めて [AD ドメインサービス] タブを開くと、[AD ドメインのサーバー情報を設定] とクライアント情報の設定 の 2 つの設定セクションが表示されます。
-
AD ドメインサーバーの設定 をクリックします。
サーバーサービス ID:PolarDB for MySQL にリクエストされるサービスの種類を識別します。値は
polardbmに固定されています。サーバー側アクセスアドレス識別子:サービスのホスト名を識別します。値はクラスター ID に固定されています。
ドメイン名:セルフマネージド AD ドメインのルートドメイン名 (例:
POLARDB.DOMAIN)。説明-
企業独自の AD ドメイン (例:
Azure Active Directory(現 Microsoft Entra ID)) を使用する場合は、対応するドメイン名を入力する必要があります。 -
サーバーサービス名、サーバーホスト名、ドメイン名は、Kerberos サービスプリンシパル名 (SPN) を形成し、ネットワーク上のサービスインスタンスを一意に識別します。SPN は、クライアントが正しいサービスと安全に通信できるようにするための
Kerberos認証プロトコルの中心的な概念です。SPN の形式は通常、ServiceType/HostName@REALMです。
AD ドメインサーバーユーザー:サーバー側のサービス認証のために、AD ドメインにユーザーアカウントを作成する必要があります。サーバーホスト名とドメイン名を入力すると、
keytab ファイルを生成するための推奨コマンドが表示されます。ktpass -out xxx.keytab -princ polardbm/poxxx@POLARDB.DOMAIN -mapUser polardbm -pass yourPassword xxx xxx説明Kerberos キータブファイル (または
keytab) は、Kerberos レルム内でサービスプリンシパル名 (SPN) と対応する暗号鍵とのマッピングを格納するバイナリファイルです。このファイルは、Kerberos 認証プロセスにとって不可欠です。AD ドメインを Kerberos KDC として使用する場合、ktpassコマンドを使用してkeytab ファイルを生成することを推奨します。-out xxx.keytab を生成される keytab ファイルの実際の名前で置き換え、-pass yourPassword を AD ドメインで作成したpolardbmユーザーのパスワードで置き換える必要があります。 -
-
keytab ファイルを生成します。ECS インスタンス上の AD ドメイン環境で、
Windows PowerShellを開いてkeytab ファイルを生成します。コマンドを実行して
keytabファイルを生成します。Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows PS C:\Users\Administrator> ktpass -out polardbmtest.keytab -princ polardbm/xxx xxx @POLARDB.DOMAIN -mapuser polardbm -pass xxx -crypto all -ptype KRB5_NT_PRINCIPAL Targeting domain controller: xxx.xxx.polardb.domain Using legacy password setting method Successfully mapped polardbm/xxx xxx to polardbm. Key created. Key created. Key created. Key created. Key created. Output keytab to polardbmtest.keytab: Keytab version: 0x502 keysize 71 polardbm/xxx xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x1 (DES-CBC-CRC) keylength 8 (0xda2ab510c84fce73) keysize 71 polardbm/xxx xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x3 (DES-CBC-MD5) keylength 8 (0xda2ab510c84fce73) keysize 79 polardbm/xxx xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0x6017cf909fc53f720f1020652db561e6) keysize 95 polardbm/xxx xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x12 (AES256-SHA1) keylength 32 (0x7b780ab91260f36c06c153c02f357bc79c90256644db6523b33d0673219b07ea3) keysize 79 polardbm/xxx xxx r8@POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x11 (AES128-SHA1) keylength 16 (0x3da47d2f33d0827f0a56efcbbf0bfd06)出力にエラーがないことを確認し、
setspnコマンドを使用して、SPN がpolardbmユーザーに正常にマッピングされていることを確認します。 -
ファイルの選択 をクリックして
keytab ファイルをアップロードし、AD ドメインサーバーの設定を完了します。keytab ファイルを AD ドメインからローカルマシンにコピーします。次に、ファイルの選択 をクリックしてアップロードします。[AD ドメインのサーバー情報を設定] ダイアログボックスで、[サーバーサービス名] はデフォルトで
polardbmになります。[サーバーホスト名] (クラスターエンドポイント) を入力し、[ドメイン名] をPOLARDB.DOMAINに、[AD ドメインのサーバーユーザー] をpolardbmに設定します。ダイアログボックスには、keytab ファイルを生成するための参照 ktpass コマンドも表示されます。OK をクリックします。
説明設定を送信すると、クラスターのステータスが [インスタンスをメンテナンス中] に変わります。
ステップ 4: PolarDB for MySQL のクライアント情報の設定
-
左側のナビゲーションウィンドウで アカウント管理 をクリックし、AD ドメインサービス情報 タブを選択してから、クライアント情報の設定 をクリックします。
-
[AD ドメインにクライアントユーザーを作成] ダイアログボックスで、クライアントユーザー と ドメイン名 を入力します。
クライアントユーザー:PolarDB for MySQL クラスターに
Kerberos認証のアクセスユーザーを作成します。このユーザーは、ECS インスタンス上のセルフマネージド AD ドメインで作成されたクライアントユーザー (例:polardbmtestuser) に対応します。ドメイン名:これは、ECS インスタンス上のセルフマネージド AD ドメインのルートドメイン名 (例:
POLARDB.DOMAIN) に対応します。OK をクリックします。
説明設定を送信すると、クラスターのステータスが [インスタンスをメンテナンス中] に変わります。
-
左側のナビゲーションウィンドウで アカウント管理 をクリックし、ユーザーアカウント タブを選択します。
-
前のステップで作成したユーザーが表示されます。ユーザーの 権限の変更 はできますが、パスワードの変更 や 削除 はできません。
-
ユーザーを削除する必要がある場合は、AD ドメインサービス情報 タブのクライアント情報で、削除 するユーザーを指定する必要があります。
-
ステップ 5 (任意): クライアント認証の設定
PolarDB for MySQL にアクセスする前に、MySQL クライアントを認証するために Kerberos を使用する必要があります。PolarDB for MySQL にアクセスするクライアント ECS インスタンスで、次の操作を実行する必要があります。
-
ECS インスタンス上のセルフマネージド AD ドメインにアクセスするために、
/etc/krb5.confファイルを設定します。# システムの crypto-policies 設定による krb5 の設定を無効にするには、 # /etc/krb5.conf.d/crypto-policies にあるシンボリックリンクを削除します。このファイルは再作成されません。 includedir /etc/krb5.conf.d/ [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log # libdefaults 設定 # [libdefaults] セクションの default_realm を、ECS インスタンス上のセルフマネージド AD のルートドメイン (例: POLARDB.DOMAIN) に設定します。 [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt spake_preauth_groups = edwards25519 default_realm = POLARDB.DOMAIN default_ccache_name = KEYRING:persistent:%{uid} # realms 設定 # [realms] セクションの kdc と admin_server を、ECS インスタンス上のセルフマネージド AD のドメインコントローラーサービスに設定します。 [realms] POLARDB.DOMAIN = { # ad.polardb.domain は /etc/hosts で設定され、ECS インスタンス上のセルフマネージド AD の IP アドレスにマッピングされます。デフォルトポートは 88 です。 kdc = ad.polardb.domain:88 admin_server = ad.polardb.domain:88 } # domain_realm 設定 # [domain_realm] セクションも、ECS インスタンス上のセルフマネージド AD のルートドメインで設定する必要があります。 [domain_realm] .polardb.domain = POLARDB.DOMAIN polardb.domain = POLARDB.DOMAINkinit usernameusernameを AD ドメインで作成したクライアントユーザー (例:polardbmtestuser) に置き換えます。プロンプトが表示されたら、ユーザーの AD ドメインパスワードを入力します。 -
次の MySQL コマンドを使用して、AD ドメインと統合された PolarDB for MySQL データベースクラスターにログインします。プライマリアドレスを使用します。
説明MySQL クライアントのバージョンが 8.0.26 以降であり、
authentication_kerberos_clientプラグインをサポートしていることを確認してください。--plugin-dirパラメーターは、authentication_kerberos_client.soとその依存関係であるauthentication_oci_client.soを含むディレクトリを指定します。./mysql -h [primary address] -P 3306 --default-auth=authentication_kerberos_client --plugin-dir=/root/mysql-client/plugin --user=polardbmtestuser[root@iZ2zee0l2f5hdwxs75m0urZ mysql-client]# ./mysql -h xxx rds.aliyuncs.com -P 3306 --default-auth=authentication_kerberos_client --plugin-dir=/root/mysql-client/plugin --user=polardbmtestuser Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4374 Server version: 8.0.13 Source distribution Copyright (c) 2000, 2024, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>