フェデレーション用サーバ(IdP)の構築
以下のパラメータで構築をする例をご紹介します。
ADFS関係
項目 | 内容 | 備考 |
---|---|---|
フェデレーション用サーバのFQDN(Fully Qualified Domain Name) | sso.test.com | 自己証明書作成、DNS設定(本説明外)に必要 |
ADドメイン名 | test.com | - |
フェデレーションサービスの表示名 | SSO Service | ADFSにWebからログインする際に表示される |
グループ管理サービスアカウント | ADFSADMIN | - |
SP(Service Provider)選択時の表示名 | signin.aws.amazon.com | デフォルト |
AWS関係
項目 | 内容 | 備考 |
---|---|---|
AWSアカウントID | 1111111111 | - |
IAMユーザサインインリンクのエイリアス | testAccount | - |
AWS上のサービスプロバイダ名 | test | - |
AWSにログイン時に適用するIAMポリシー | AdministratorAccess | - |
構築方法(ADFS、ADDS)
まず、ADDSのディレクトリ構成です。今回はaws-membersにユーザアカウントあり、AWSアカウント毎に作成するグループがaws-accountsにある構成を想定しています。
![ディレクトリ構成](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_3.png)
IIS(Internet Information Services)はインストールされている想定ですが、「Windows認証」が役割サービスとして設定されていることを確認してください。
![IIS役割サービス:Windows認証](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_4.png)
自己証明書の作成
ADFSでSSOを実施する場合、HTTPSでの接続が必須です。事前に証明書をバインドしておく必要があります。ここでは、内部の信頼できる環境からのアクセスを想定し、有効期間が10年の事故証明書を別途作成し、IISにバインドさせます。
注意
この構成ではブラウザでHTTPS接続の警告が発生します。上述のようにAWSにて構築する場合、内部ELBを使用して、ブラウザとの接続にはACMの証明書を利用するなど、対策を実施してください(ここでは説明しません)。
OpenSSLがインストールされているPCで以下のコマンドを実行し、証明書を作成します(FQDNはフェデレーション用サーバのFQDNを入力して下さい)。
$ openssl genrsa 2048 > sso.test.com.key Generating RSA private key, 2048 bit long modulus ...省略... ----- Country Name (2 letter code) []:JP State or Province Name (full name) []:Osaka Locality Name (eg, city) []:Osaka Organization Name (eg, company) []:Test Ltd. Organizational Unit Name (eg, section) []:Test Common Name (eg, fully qualified host name) []:sso.test.com Email Address []:test@sso.test.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:Enter # ここで有効期間を10年(3650日)にしておく $ openssl x509 -days 3650 -req -signkey sso.test.com.key < sso.test.com.csr > sso.test.com.com.crt ...省略... $ openssl pkcs12 -export -inkey sso.test.com.key -in sso.test.com.crt -out sso.test.com.pfx Enter Export Password:Enter Verifying - Enter Export Password $ ls sso.test.com.crt sso.test.com.csr sso.test.com.key sso.test.com.pfx
IISへの証明書のインポート、サイトへのバインド
「インターネットインフォメーションサービス(IIS)マネージャー」から、コンピューター名を選択し、「サーバー証明書」をクリックします。
![サーバー証明書](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_5.png)
「インポート」をクリックし、先程作成したpfxファイルをインポートします。
![証明書のインポート1](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_6.png)
![証明書のインポート2](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_7.png)
次にサイトへバインドします。バインドするサイトを選択し、右メニューの操作の「バインド」をクリックします。
![証明書のバインド1](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_8.png)
証明書取得時のサイト名を入力し、先程インポートしたSSL証明書を選択し、サイトバインドを追加します。
![証明書のバインド2](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_9.png)
これでIISの設定は完了です。
ADFSのインストール
次にADFSの初期設定を行います。ADFSがインストールされていない場合、「サーバーマネージャー > ダッシュボード > 役割と機能の追加」からインストール(役割:Active Directory Federation Services)を実施してください。
まず、グループ管理アカウントを登録できるよう、事前にKDSルートキーの設定を行います。PowerShellで以下のコマンドを実行してください。
> Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
ADFSの設定
次にフェデレーションサービスを構成します。「Active Directory フェデレーションサービス構成ウィザード」から設定を実施します。
ここでは、フェデレーションサーバーファームに最初のフェデレーションサーバーを追加します。
![ADFSの構成](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_10.png)
「次へ」をクリックします。
![ADDSへの接続](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_11.png)
先程追加したSSL証明書を選択します。
また、フェデレーションサービスの表示名はここでは「SSO Service」としていますが、IdPでどのSPにログインするか選択する際の画面表示に使用される文字列です。入力後、「次へ」をクリックします。
![サービスのプロパティの指定](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_12.png)
ここではグループ管理サービスアカウントを新規作成します。
ADFSADMINを入力し、「次へ」をクリックします。
![サービスアカウントの指定](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_13.png)
ここではWindows Internal Databaseを使用しますが、環境により選択して下さい。
「次へ」をクリックします。
![構成データベースの指定](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_14.png)
「次へ」をクリックします。
![オプションの確認](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_15.png)
「構成」をクリックします。
![前提条件の確認](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_16.png)
以上でフェデレーションサービスが構成されます。
次に、AWSマネージメントコンソールへログインする際に必要な設定を実施します。「ADFSの管理」を起動し、「証明書利用者信頼の追加」をクリックします。
![証明書利用者信頼の追加](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_17.png)
証明書利用者信頼の追加ウィザードが開始されますので、「要求に対応する」を選択して「開始」をクリックします。
![証明書利用者信頼の追加ウィザード](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_18.png)
データソースとして、https://signin.aws.amazon.com/static/saml-metadata.xml
を入力し、「次へ」をクリックします。
![データソースの選択](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_19.png)
表示名は、SP選択時に選択できる文字列(下図)ですが、ここではデフォルトのままsignin.aws.amazon.com
とします。「次へ」をクリックします。
![表示名の指定](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_20.png)
![表示名が表示される場所](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_21.png)
ここでは、「フェデレーションは内部の信頼できる環境からのみアクセスされること」を想定していますので、「すべてのユーザーを許可」を選択していますが、要件により選択して下さい。「次へ」をクリックします。
![アクセス制御ポリシーの選択](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_22.png)
内容を確認し、「次へ」をクリックします。
![信頼の追加の準備完了](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_23.png)
「閉じる」をクリックします。
![完了](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_24.png)
次に、要求発行ポリシーを設定していきます。AWSマネジメントコンソールにログインするため、保持している情報の変換ルールを設定します。
「規則の追加」をクリックすることで、変換ルールを追加します。
![要求発行ポリシーの編集](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_25.png)
変換ルールは、以下の4つを設定して下さい。
NameId
- 入力方向の要求を変換
- 要求規則名:Nameid
- 入力方向の要求の種類:Windows アカウント名
- 出力方向の要求の種類:名前 ID
- 出力方向の名前 IDの形式:永続 ID
- すべての要求値をパス:「スルーする」にチェック
RoleSessionName
- LDAP属性を要求として送信
- 要求規則名:RoleSessionName
- 属性ストア:Active Directory
-
LDAP 属性の出力方向の要求の種類への関連付け
- LDAP属性:User-Principal-Name
-
出力方向の要求の種類:
https://aws.amazon.com/SAML/Attributes/RoleSessionName
Roles
- カスタム規則を使用して要求を送信
- 要求規則名:Roles
- カスタム規則:以下を参照
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value);
Get AD Groups
- カスタム規則を使用して要求を送信
- 入力方向の要求を変換
- 要求規則名:Get AD Groups
- カスタム規則:以下を参照
c:[Type == "http://temp/variable", Value =~ "(?i)([^d]{12})"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "([^d]{12})-", "arn:aws:iam::$1:saml-provider/test,arn:aws:iam::$1:role/ADFS-"));
ここでは、RoleSessionName
でUser-Principal-Name
を使用していますが、設定されている場合、E-Mail-Addresses
を使用する方がいい場合もあると思いますので、ドメイン名や他のシステムの運用方法に応じて検討して下さい。
また、Get AD Groups
のカスタム規則で、ADのグループとの関連付け規則を定義していること、また、あとで作成するIDプロバイダーのARN(Amazonリソースネーム)を指定していることに注意して下さい。
結果として、発行変換規則は以下のようになったと思います。
![要求発行ポリシー(入力後)](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_26.png)
次の手順は、ADDSを本用途のみで使用される場合向けの設定です。
画面(Web)上からパスワード変更ができるようにする場合には、以下の設定を実施して下さい。
「ADFSの管理」からエンドポイントを選択し、/adfs/portal/updatepassword/
を有効にします。本設定によって、https://sso.test.com/adfs/portal/updatepassword/
から各ユーザが自身でパスワードを変更することができるようになります。
![パスワード変更用エンドポイントの有効化](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_27.png)
最後にSSO用ページを有効化します。PowerShellを開き、以下のコマンドを実行して下さい。
> Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
ここまでの設定でIdPにアクセスできるようになります。
https://sso.test.com/adfs/ls/IdpInitiatedSignOn.aspx
へアクセスしてみて下さい。以下の画面が表示されると思います。
![SP選択](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_28.png)
AWSアカウント用グループの作成
この段階では、AWSアカウントについての情報を持っていないため、まだシングルサインオンは実施できません。
マネジメントコンソールにログインしたい対象のAWSアカウント(今回のアカウントIDは1111111111
)用のグループを作成します。
「Active Directoryユーザとコンピュータ」から新規グループを作成して下さい。
下の例ではぼかしを入れていますが、グループ名がアカウントID-IAMロール名(ADFS-を除く)
となるようにして下さい(例:1111111111-AdministratorAccess)。上述の発行変換規則により、ここでは、AWSアカウントID:1111111111に、IAMロール:ADFS-AdministraotrAccessに設定されたIAMポリシーにより認可されたユーザとして、AWSマネジメントコンソールにログインできるようになります。
![グループ追加](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_29.png)
先程作成したグループに、そのAWSアカウントにログインさせたユーザを所属させて下さい。
これで、ADの設定は完了です。
![メンバー追加](http://cz-cdn.shoeisha.jp/static/images/article/11358/11358_30.png)