【Amazon AppStream】ADFSでフェデレーション認証する方法(前編)

記事タイトルとURLをコピーする

AppStreamの認証を社内のドメインで行いたいという要望もあると思います。
今回は、ADFSを利用して社内のドメインで認証する方法を説明します。

長くなったので、前編後編に分けました。

概要

ADFS認証は端末を起点にして処理が進んでいきます。
*1
今回はADFSとADをEC2で構築します。

構築手順

ネットワークの作成

VPC、ルートテーブル、セキュリティグループを作成します。
以下の通信ができるようにルートテーブルを設定します。

  • AD(EC2) ⇔ ADFS(EC2)
  • AppStream ⇔ AD(EC2)
  • AppStream ⇔ 端末
  • EC2(ADFS) ⇔ 端末


詳しくは後述しますが、AppStreamでADFSを利用する場合はAWSのDNSとAD(EC2)のDNSの両方での名前解決が必要なので、DHCPオプションセットを利用します。
DHCPオプションセットを作成し、VPCにアタッチします。
※[Domain name server]にAD(EC2)のIPを設定(AD構築後に設定)

補足-ADFSのアクセス制限

ADFS(EC2)の通信を制限する場合は、以下の通信をセキュリティグループで許可してください。

  • HTTPS通信(HTTPS)
  • ドメイン参加に必要な通信(※)
  • ドメイン認証に必要な通信(※)


※Microsoftのサイトにポートの記載があります。

jpwinsup.github.io

AD(EC2)の作成

Windows Server 2022 BaseのEC2でADを構築します。
検証用であれば、無料枠のEC2で十分動きました。

Server Manager のTOP画面の右上にある[Add Roles and Features]から[Active Directory Domain Services]と[DNS Server]をインストールします。
※管理用のアプリケーションも同時にインストールします。

インストール後、Server ManagerのNotifications(旗のアイコン)にドメインのセットアップ通知が出るので、画面に従ってセットアップを行います。

ADFS(EC2)の作成

Windows Server 2022 BaseのEC2でADFSを構築します。
こちらは無料枠では動きがあまりにも遅かったので、作成後にt2.mediumに変更しています。

ADFSの要件についてはMicrosoftのサイトを参考にしてください。
learn.microsoft.com
始めに、ドメイン参加と証明書のインストールを行います。
ADFSはHTTPSでクライアントと通信するので、クライアント証明書が必要になります。
証明書は[Certificates (Local Computer)]-[Personal]にインポートしてください。

次に、Server Manager のTOP画面の右上にある[Add Roles and Features]から[Active Directory Federation Services]をインストールします。

インストール後、ADFSのセットアップを行います。

最初のセットアップ画面では、1台目と2台目以降で選ぶものが異なります。
ADFSは構成データを連携できるので、2台目以降の場合は2つ目の選択肢を選択してください。

参加しているドメインが表示されるので、変更せずに次に進んでください。
Domain Admins権限を持ったアカウントの認証が求められるので、事前に用意しておく必要があります。
※ドメインを変更することも可能です。

証明書を選択します。
ADFSへのリダイレクトURLにADFSのホスト名以外を使用したい場合は、証明書のサブジェク代替名(SAN)を設定しておいてください。
Federation Service Name(ADFSへのリダイレクトURLに使用される)はサブジェク代替名(SAN)に設定した値だけが選択できるようになっています。

ADFSのサービス起動アカウントを設定します。
gmsa(サービス起動アカウント専用のADアカウント)をセットアップ中に作成する場合はADにKDSルートキーが必要なので、事前にAD側でKDSルートキーの有無を確認しておく必要があります。
AD側でgmsaを事前に作成することもできます。
データベースを選択します。
要件によってはSQLを利用することになりますが、その場合は事前にSQL Serverをセットアップします。

セットアップが完了したら、Powershellにて以下のコマンドを実行します。
不思議なことに、ADFSは管理コンソールから設定するものとコマンドで設定するものがはっきり分かれています。

Set-ADFSProperties -EnableIdpInitiatedSignonPage $true
Set-AdfsProperties -EnableRelayStateForIdpInitiatedSignOn $true


1つ目のコマンドでIDPとしてリダイレクトされた際にサインインページが表示できるようにしています。
2つ目のコマンドでサインインページのURLを短縮することができるようにしています。

設定内容を確認したい場合は、以下のコマンドを実行すると設定値の一覧が表示されます。

Get-AdfsProperties


設定が完了したら、ADFSサービスを再起動します。

net stop adfssrv
net start adfssrv


設定が反映されたら、以下のURLにアクセスし、メタデータファイルをダウンロードします。
AWSでADFSをIDPとして登録する際に使用します。

https://[FQDN_ADFS_SERVER]/FederationMetadata/2007-06/FederationMetadata.xml
補足-証明書について

フェデレーションで使用する証明書をADFSサーバで作成する場合は以下のいずれかの方法で作成できます。
エンタープライズCAから証明書を発行すると、証明書更新とドメイン参加している端末への証明書の配布が自動で行われるので、運用ではこの方法が一番負荷が低くなるのではないかと思います。

  • IISをインストールして自己署名証明書を作成する
  • CA局を立てて証明書を作成する
  • Powershellで証明書を作成する


証明書にはサブジェクト代替名(SAN)を設定します。
SANを設定する場合は、名前解決できるようにしておいてください。

補足-gmsaの作成

gmsaを作成する場合はADで以下のPowershellコマンドを実行します。

New-ADServiceAccount -Name "[gmsa_name]" -DNSHostName "[adfs_service_name]" -ServicePrincipalNames "HOST/[adfs_service_name]"

ADFSをIDPとして登録

ADとADFSができたので、AWSにADFSを登録します。

IAM画面からIdentity providerを追加します。

  • Provider type:SAML
  • Provider name:任意の名称
  • Metadata document:ADFSからダウンロードしたメタデータファイル


後半に続きます! 後編はこちらからご覧ください。