SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

小規模な受託開発におけるAWS活用の勘所

AWSでシングルサインオン(SSO)を実現する~SAML2.0ベースのAWSマネージメントコンソールへのフェデレーション

小規模な受託開発におけるAWS活用の勘所 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

フェデレーション用サーバ(IdP)の構築

 以下のパラメータで構築をする例をご紹介します。

ADFS関係

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関係
項目 内容 備考
AWSアカウントID 1111111111 -
IAMユーザサインインリンクのエイリアス testAccount -
AWS上のサービスプロバイダ名 test -
AWSにログイン時に適用するIAMポリシー AdministratorAccess -

構築方法(ADFS、ADDS)

 まず、ADDSのディレクトリ構成です。今回はaws-membersにユーザアカウントあり、AWSアカウント毎に作成するグループがaws-accountsにある構成を想定しています。

ディレクトリ構成
ディレクトリ構成

 IIS(Internet Information Services)はインストールされている想定ですが、「Windows認証」が役割サービスとして設定されていることを確認してください。

IIS役割サービス:Windows認証
IIS役割サービス: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ファイルをインポートします。

証明書のインポート1
証明書のインポート1
証明書のインポート2
証明書のインポート2

 次にサイトへバインドします。バインドするサイトを選択し、右メニューの操作の「バインド」をクリックします。

証明書のバインド1
証明書のバインド1

 証明書取得時のサイト名を入力し、先程インポートしたSSL証明書を選択し、サイトバインドを追加します。

証明書のバインド2
証明書のバインド2

 これでIISの設定は完了です。

ADFSのインストール

 次にADFSの初期設定を行います。ADFSがインストールされていない場合、「サーバーマネージャー > ダッシュボード > 役割と機能の追加」からインストール(役割:Active Directory Federation Services)を実施してください。

 まず、グループ管理アカウントを登録できるよう、事前にKDSルートキーの設定を行います。PowerShellで以下のコマンドを実行してください。

> Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))

ADFSの設定

 次にフェデレーションサービスを構成します。「Active Directory フェデレーションサービス構成ウィザード」から設定を実施します。

 ここでは、フェデレーションサーバーファームに最初のフェデレーションサーバーを追加します。

ADFSの構成
ADFSの構成

 「次へ」をクリックします。

ADDSへの接続
ADDSへの接続

 先程追加した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-"));

 ここでは、RoleSessionNameUser-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へアクセスしてみて下さい。以下の画面が表示されると思います。

SP選択
SP選択

AWSアカウント用グループの作成

 この段階では、AWSアカウントについての情報を持っていないため、まだシングルサインオンは実施できません。

 マネジメントコンソールにログインしたい対象のAWSアカウント(今回のアカウントIDは1111111111)用のグループを作成します。

 「Active Directoryユーザとコンピュータ」から新規グループを作成して下さい。

 下の例ではぼかしを入れていますが、グループ名がアカウントID-IAMロール名(ADFS-を除く)となるようにして下さい(例:1111111111-AdministratorAccess)。上述の発行変換規則により、ここでは、AWSアカウントID:1111111111に、IAMロール:ADFS-AdministraotrAccessに設定されたIAMポリシーにより認可されたユーザとして、AWSマネジメントコンソールにログインできるようになります。

グループ追加
グループ追加

 先程作成したグループに、そのAWSアカウントにログインさせたユーザを所属させて下さい。

 これで、ADの設定は完了です。

メンバー追加
メンバー追加

次のページ
構築方法(AWS)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
小規模な受託開発におけるAWS活用の勘所連載記事一覧

もっと読む

この記事の著者

塩飽 展弘(株式会社鈴木商店)(シワク ノブヒロ)

 株式会社鈴木商店 経営企画室室長。 大手通信事業者にて、SE、研究開発、経営企画等に従事後、2016年株式会社鈴木商店に入社。 営業、要件定義、開発(主にAWS関連インフラ)に従事後、現職。 AWS Certified Solutions Architect - Professional 鈴木商店HP Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11358 2019/03/11 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング