フェデレーション用サーバ(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にある構成を想定しています。
IIS(Internet Information Services)はインストールされている想定ですが、「Windows認証」が役割サービスとして設定されていることを確認してください。
自己証明書の作成
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)マネージャー」から、コンピューター名を選択し、「サーバー証明書」をクリックします。
「インポート」をクリックし、先程作成したpfxファイルをインポートします。
次にサイトへバインドします。バインドするサイトを選択し、右メニューの操作の「バインド」をクリックします。
証明書取得時のサイト名を入力し、先程インポートしたSSL証明書を選択し、サイトバインドを追加します。
これでIISの設定は完了です。
ADFSのインストール
次にADFSの初期設定を行います。ADFSがインストールされていない場合、「サーバーマネージャー > ダッシュボード > 役割と機能の追加」からインストール(役割:Active Directory Federation Services)を実施してください。
まず、グループ管理アカウントを登録できるよう、事前にKDSルートキーの設定を行います。PowerShellで以下のコマンドを実行してください。
> Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
ADFSの設定
次にフェデレーションサービスを構成します。「Active Directory フェデレーションサービス構成ウィザード」から設定を実施します。
ここでは、フェデレーションサーバーファームに最初のフェデレーションサーバーを追加します。
「次へ」をクリックします。
先程追加したSSL証明書を選択します。
また、フェデレーションサービスの表示名はここでは「SSO Service」としていますが、IdPでどのSPにログインするか選択する際の画面表示に使用される文字列です。入力後、「次へ」をクリックします。
ここではグループ管理サービスアカウントを新規作成します。
ADFSADMINを入力し、「次へ」をクリックします。
ここではWindows Internal Databaseを使用しますが、環境により選択して下さい。
「次へ」をクリックします。
「次へ」をクリックします。
「構成」をクリックします。
以上でフェデレーションサービスが構成されます。
次に、AWSマネージメントコンソールへログインする際に必要な設定を実施します。「ADFSの管理」を起動し、「証明書利用者信頼の追加」をクリックします。
証明書利用者信頼の追加ウィザードが開始されますので、「要求に対応する」を選択して「開始」をクリックします。
データソースとして、https://signin.aws.amazon.com/static/saml-metadata.xml
を入力し、「次へ」をクリックします。
表示名は、SP選択時に選択できる文字列(下図)ですが、ここではデフォルトのままsignin.aws.amazon.com
とします。「次へ」をクリックします。
ここでは、「フェデレーションは内部の信頼できる環境からのみアクセスされること」を想定していますので、「すべてのユーザーを許可」を選択していますが、要件により選択して下さい。「次へ」をクリックします。
内容を確認し、「次へ」をクリックします。
「閉じる」をクリックします。
次に、要求発行ポリシーを設定していきます。AWSマネジメントコンソールにログインするため、保持している情報の変換ルールを設定します。
「規則の追加」をクリックすることで、変換ルールを追加します。
変換ルールは、以下の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リソースネーム)を指定していることに注意して下さい。
結果として、発行変換規則は以下のようになったと思います。
次の手順は、ADDSを本用途のみで使用される場合向けの設定です。
画面(Web)上からパスワード変更ができるようにする場合には、以下の設定を実施して下さい。
「ADFSの管理」からエンドポイントを選択し、/adfs/portal/updatepassword/
を有効にします。本設定によって、https://sso.test.com/adfs/portal/updatepassword/
から各ユーザが自身でパスワードを変更することができるようになります。
最後にSSO用ページを有効化します。PowerShellを開き、以下のコマンドを実行して下さい。
> Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
ここまでの設定でIdPにアクセスできるようになります。
https://sso.test.com/adfs/ls/IdpInitiatedSignOn.aspx
へアクセスしてみて下さい。以下の画面が表示されると思います。
AWSアカウント用グループの作成
この段階では、AWSアカウントについての情報を持っていないため、まだシングルサインオンは実施できません。
マネジメントコンソールにログインしたい対象のAWSアカウント(今回のアカウントIDは1111111111
)用のグループを作成します。
「Active Directoryユーザとコンピュータ」から新規グループを作成して下さい。
下の例ではぼかしを入れていますが、グループ名がアカウントID-IAMロール名(ADFS-を除く)
となるようにして下さい(例:1111111111-AdministratorAccess)。上述の発行変換規則により、ここでは、AWSアカウントID:1111111111に、IAMロール:ADFS-AdministraotrAccessに設定されたIAMポリシーにより認可されたユーザとして、AWSマネジメントコンソールにログインできるようになります。
先程作成したグループに、そのAWSアカウントにログインさせたユーザを所属させて下さい。
これで、ADの設定は完了です。