Spring Security + Kerberos認証+SPNEGOでSSO(2)<ActiveDirectory側の設定>

ユーザ管理、認証を行うActiveDirectory(以下、AD)側の設定について、以下の作業を行います(既にActiveDirectoryインストール済ならユーザ追加から)。

  • ADサーバの用意
  • ActiveDirectoryのインストール
  • クライアント、SSOで認証させたいアプリが稼働しているサーバ(以下、APサーバ)用のADユーザを追加
  • APサーバ用のSPN(サービスプリンシパル名)を登録
  • APサーバ用のキータブファイルの作成
  • (それ以外にDNSの逆引き登録もあるようですが、なくてもSSOはできるようなので省略)

注:ActiveDirectoryで検索すると、「Azure Active Directory」やAWSが提供しているActiveDirectory管理サービスなどがヒットすることがありますが、この記事では素のActiveDirectoryを使う場合について書いていきます。

ADサーバの用意

私はADサーバもクライアントもAPサーバもAWS上に構築しました。

ADサーバは、MarketPlaceからWindows Server 2019 Baseを選択し、インスタンスはt2.large、ストレージはデフォルトのままで作成しました。
(勿論、本番で運用するにはもっと高スペックにする必要があると思います)

セキュリティグループの設定

以下、ADクライアントも含めた「全部のせ」のセキュリティグループ設定(インバウンドのみ)を挙げます。実際の本番運用では各サーバの役割に応じて、アウトバウンドも含めて適切な設定をそれぞれ行う必要があります。

※設定しなくてもいい項目が含まれているかもしれませんが、ご了承ください。

許可項目 プロトコル ポート番号 許可対象
NTP UDP 123

同サブネット

RPC UDP 135

同サブネット

RPC TCP 135

同サブネット

ICMP(ping) ICMP すべて

同サブネット

LDAP TCP 389

同サブネット

LDAP UDP 389

同サブネット

LDAPS TCP 636

同サブネット

DNS UDP 53

同サブネット

DNS TCP 53

同サブネット

Kerberos-kdc-admin TCP 749

APサーバ

Kerberos-kdc TCP 88

APサーバ

Kerberos認証 TCP 464

同サブネット

RDP(内部) TCP 3389

同サブネット

RDP(作業PC) TCP 3389

作業環境のグローバルIP

rpc動的ポート TCP 1024~65535

同サブネット

Netlogon UDP 137-138

同サブネット

Netlogon TCP 139

同サブネット

グローバルカタログ TCP 3268-3269

同サブネット

smb TCP 445

同サブネット

smb UDP 445

同サブネット

RSync TCP 873

同サブネット

ActiveDirectoryのインストール

インストール手順は色々なところで紹介されていますので、「ActiveDirectory インストール」と検索すれば、わかりやすい手順が紹介されているはず。

私は以下のブログを参考にさせていただきました。

REMSYSTEM:Windows Server 2019でActive Directoryをインストールする手順

 

ここでドメイン名を決めておく必要があります。

この記事では、検証用のドメイン名として、「KK.EXAMPLE.COM」というドメイン名をつけています。

APサーバ(以下、サーバ)用のADユーザを追加

起動したWindows Serverにリモートデスクトップでログインし、「Windows管理ツール」から「ActiveDirectory ユーザとコンピュータ」を選択。

f:id:koyak:20211113212935p:plain

「Users」下に新しいユーザを追加(ここではkrb5-testと命名)。

f:id:koyak:20211113213321p:plain

ADユーザの追加

あくまでAPサーバが使うユーザなのでリモートデスクトップ接続の権限設定は不要です。

次にKerberos認証にでSSOを行う際に必須となる、SPNの登録とkeytabの発行を行います。

SPNの登録手順は以下の通りです。

  • コマンドプロンプトをたちあげ(多分PowerShellでも可)、カレントディレクトリはどこでもいいので以下のコマンドを実行。
  • setspn -a HTTP/XXXXX.XXX.XXX krb5-test
  • XXXXX.XXX.XXXはAPサーバのDNS名が入ります。AWSで構築している場合、「プライベートIP v4 DNS」と書かれている名前などがそのまま使えます。

f:id:koyak:20211113215044p:plain

DNS名の例
  • 以下のコマンドで登録内容を確認できます。
  • setspn -l account name
  • "krb5-test"は↑で追加したADユーザに読み替えてください。

続いてkeytabファイルの発行

  • 同じくコマンドプロンプトを立ち上げ、以下のコマンドを実行。
  • ktpass /princ HTTP/XXXXX.XXX.XXX@KK.EXAMPLE.COM /mapuser krb5-test@KK.EXAMPLE.COM /pass ******** /out krb5.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set
  • XXXXX.XXX.XXX部分にはsetspnしたときと同じ名前が入ります。
  • /mapuser、/passには追加したADユーザのログオン名(ドメイン名部分は大文字)、パスワードを入力してください。
  • 特にパスを指定しなければkeytabファイルはカレントディレクトリに出力されるため、別のところに出力したい場合は/outの内容を任意のパスに書き換えます。

出力したkeytabをAPサーバにアップロードしておきます。

テスト時のADクライアント用のADユーザを追加

先ほどのAPサーバ用のADユーザと同様の手順でADユーザを追加します。

このままでは、この作成したADユーザでADクライアントPCにリモートデスクトップ接続できないため、以下の設定を行ってリモートデスクトップ接続を許可します。

  • Windows管理ツール>ActiveDirectoryユーザとコンピュータ
  • 左側のペイン上に表示されている、作成したドメイン名下の「Build In」というフォルダをクリック
  • グループ名が表示されるので、その中の「Remote Desktop Users」を選択
  • 「メンバー」タブを選択し、「追加」ボタンを押下
  • 「選択するオブジェクト名を入力してください」と書かれているテキストエリアに、作成したADユーザを入力し、OKボタンを押下
  • これでADユーザにリモートデスクトップ権限が割り当てられます。