Amazon Web Services ブログ
AWS Single Sign-On と Amazon AppStream 2.0 を使用してフェデレーションを有効にする
本ブログは “Enable federation with AWS Single Sign-On and Amazon AppStream 2.0 | Amazon Web Services” を翻訳したものです。
Amazon AppStream 2.0 は Security Assertion Markup Language 2.0(SAML 2.0)を使用した AppStream 2.0 スタックへの IDフェデレーションをサポートします。ADFS、Ping One Federation Server、Okta などのSAML 2.0 をサポートする IDプロバイダー(IdP)を利用する事で、ユーザーは既存の ID クレデンシャルを使用して AppStream 2.0 アプリケーションにワンステップでアクセスできるようになります。また IdP による ID 認証はセキュリティ上のメリットを提供します。 IdP を利用することで、特定の AppStream 2.0 スタック にアクセス可能なユーザーを制御することができます。
AWSシングルサインオン(AWS SSO)は、複数の AWS アカウントおよびビジネスアプリケーションへの SSO アクセスを一元管理できる AWS サービスです。 AWS SSO はユーザーポータルを提供しており、ユーザーは既存の企業クレデンシャルを使用して、割り当てられたすべてのアカウントとアプリケーションを1か所から検索しアクセスすることができます。 また、AWS SSO は AWS Organizations と統合されているため、組織内の AWS アカウントへのアクセスを管理できます。さらに、AWS SSO は SAML 2.0 をサポートしているため、AWS SSO アプリケーション構成ウィザードを利用し SSO アクセスを SAML 対応アプリケーションへ拡張することができます。 AWS SSO とその利点の詳細については、AWS SSO のユーザーガイドを参照してください。
AWS SSO を利用することで AppStream 2.0 スタックへの ID フェデレーションを設定できます。 AppStream 2.0 フリートが Active Directory ドメインに接続されている場合は、AWS SSO を同じドメインに接続し、スタックを Active Directory ユーザーまたはユーザーグループに割り当てることができます。AppStream 2.0 スタックがドメイン参加していない場合は、AWS SSO にビルトインされたユーザー管理機能(AWS SSO Directory)により、ユーザーおよびユーザーグループを作成し、AppStream 2.0 スタックへのアクセスを提供できます。本投稿では両方の設定方法について説明します。
1. AWS SSO のディレクトリオプションについて
2. AWS SSO を既存のディレクトリに接続する
3. AppStream 2.0 の AWS SSO アプリケーションを作成する (AWS SSO)
4. AppStream 2.0 の ID プロバイダを作成する (IAM)
5. ID フェデレーション用の IAM ロールを作成する (IAM)
6. インラインポリシーを IAM ロールにアタッチする (IAM)
7. AWS SSO の属性マッピングを作成する (AWS SSO)
8. ユーザーの割り当てと動作確認
9. AWS SSO Directory を利用して AppStream 2.0 へのアクセスを管理する
前提条件
本投稿は以下の前提条件を満たしていることを想定しています:
- AWS SSO の前提条件を満たしていること
- Active Directory フォレストまたは AWS Managed Microsoft Active Directory を作成済みであること
- AppStream 2.0 に関する知識
- AppStream 2.0 のスタックを作成済みであること
1) AWS SSO のディレクトリオプションについて
管理者は AWS SSO を以下のいづれかのディレクトリと接続することができます。
- AWS Managed Microsoft Active Directory
- オンプレミスの Active Directory (AWS Managed Microsoft Active Directory とオンプレミスの Active Directory の間で双方向信頼関係が設定済みであること)
- AD Connector
※ AWS SSO は SAMBA4 ベースの Simple AD ディレクトリでは機能しません。
本投稿では、東京リージョンにある AppStream 2.0 のスタック名として ExampleStack を使用します。必要に応じてスタック名を変更してください。
2) AWS SSO を既存のディレクトリに接続する
AWS SSO は Active Directory を必要とせずにユーザーとグループを作成可能な AWS SSO 専用のディレクトリを初回有効時にデフォルトで提供します。 既存のMicrosoft Active Directory に接続するには、AWS SSO のダッシュボードから ID ソースを選択 を選択します。
設定 の画面で アイデンティティソース セクション内の アクション から アイデンティティソースを変更 を選択し、アイデンティティソースを選択 の画面で Active Directory を選択し次に進みます。Existing Directories のディレクトリ一覧から既存の AWS Managed Microsoft Active Directory または AD Connectorの DirectoryID を選択し次に進みます。
重要:Active Directory を選択 でディレクトリを変更すると、既存のユーザーとグループの割り当てがすべて削除されます。ディレクトリを変更した際は、ユーザーまたはグループの割り当てを手動で再設定する必要があります。
確認および確定 の画面に記載の注意事項を読み、“承諾”と入力し、アイデンティティソースを変更 を選択します。
以上で Microsoft Active Directory と AWS SSO の設定は完了です。
AWS SSO を利用してユーザーとグループを管理する方法についての詳しい説明は How to create and manage users with AWS Single Sign-On を参照してください。
3) AppStream 2.0 の AWS SSO アプリケーションを作成する
続いて AppStream 2.0 の AWS SSO アプリケーションを作成し、メタデータをダウンロードします。
1. AWS SSO のダッシュボードで、ナビゲーションペインから アプリケーション を選択します。
2. 新規アプリケーションの追加 を選択します。
3. AWS SSO アプリケーションカタログ から Amazon AppStream 2.0 を選択し、続いて アプリケーションの追加 を選択します。
4. コンソール上でアプリケーションを識別する為の表示名、説明を入力します。本投稿での表示名は AppStream ExampleStack です。
5. AWS SSOメタデータ セクションから、AWS SSO SAMLメタデータファイル の右側にある ダウンロード を選択します。このメタデータファイルは、セットアップの後半で IAM ID プロバイダを作成する際に使用します。
6. アプリケーションのプロパティ セクションで、アプリケーションの開始 URL を空白のままにし、リレーステート に AppStream 2.0 の既存のスタック名(例では ExampleStack)を含む URL を入力します。
例:https://appstream2.ap-northeast-1.thinkwithwp.com/saml?stack=ExampleStack&accountId=012345678910
リレーステートの設定手順はこちらを参考にしてください
7. アプリケーションメタデータ セクションは以下の値をそのまま使用します。
アプリケーション ACS URL : https://signin.thinkwithwp.com/saml
アプリケーション SAML 対象者: urn:amazon:webservices
※ アプリケーションアサーションコンシューマサービス(ACS)URL は、サービスプロバイダーが SAML アサーションを受け入れる場所を識別するために使用します。
8. 変更の保存 を選択すると、以下の様な画面が表示されます。
4) AppStream 2.0 の ID プロバイダを作成する
次に、AWS Identity and Access Management (IAM) で IAM の ID プロバイダを作成します。
1. IAM ダッシュボードのナビゲーションペインから ID プロバイダ 選択します。
2. プロバイダを追加 を選択します。
3. プロバイダのタイプ で SAML を選択します。
4. プロバイダに名前を付けます。本ブログではプロバイダ名として AWS_SSO_ExampleStack を使用します。
5. メタデータドキュメント で ファイルの選択ファイルの選択 を選択し、先の手順(3) AppStream 2.0 の AWS SSO アプリケーションを作成する)で保存したメタデータドキュメントをアップロードします。
7. プロバイダを追加 を選択すると、SAML プロバイダの作成が完了したことを示す以下のメッセージが表示されます。
8. 作成した ID プロバイダ AWS_SSO_ExampleStack を選択し、プロバイダの ARN をメモします。
例: arn:aws:iam::012345678910:saml-provider/AWS_SSO_ExampleStack
5) ID フェデレーション用の IAM ロールを作成する
次に、 SAML 2.0 フェデレーション用の IAM ロールを作成し、IAM と IdP(AWS SSO)間の信頼関係を確立します。IAM ロールの作成手順はこちら、もしくは以下の手順に従ってください。
1. IAM コンソール のナビゲーションペインから ロール、ロールの作成 の順に選択します。
2. 信頼されたエンティティの種類 の画面で SAML 2.0 フェデレーション を選択します。
3. AppStream 2.0 の ID プロバイダを作成する のステップで作成した ID プロバイダを選択します。本投稿では ID プロバイダ名として AWS_SSO_ExampleStack を使用します。
SAML 2.0 アクセスメソッド (プログラムによるアクセスのみを許可する または プログラムによるアクセスと Amazon Web Services マネジメントコンソールによるアクセスを許可する) はいずれも選択しないでください。
4. 属性 で SAML:sub_type を選択します。
5. 値 に persistent と入力します。
6. 次のステップ:アクセス権限 を選択します。
7. Attach アクセス権限ポリシー の画面ではポリシーを選択せずに 次のステップ:タグ を選択します。
8. タグの追加(オプション)の画面では何も入力せずに 次のステップ:確認 を選択します。
9. ロール名を入力します。本ブログではロール名として ExampleStack を使用します。 オプションで ロールの説明 に新しいロールの説明を入力します。
10. ロールの作成 を選択します。
ExampleStack というロールが作成された旨のメッセージが表示されるのを確認します。
11. ロールの一覧から作成したロール(ExampleStack)を選択し、ARN をメモします。
例: arn:aws:iam::012345678910:role/ExampleStack
6) インラインポリシーを IAM ロールにアタッチする
次に、作成した AppStream 2.0 の IAM ロールにインラインポリシーをアタッチします。インラインポリシーの作成手順はこちら、もしくは以下の手順に従ってください。
1. IAM コンソール のナビゲーションペインから ロール を選択します。
2. SAML2.0 フェデレーション IAM ロールを作成する のステップで作成したロールを選択します。本投稿でのロール名は ExampleStack です。
3. アクセス権限 タブ内の Permission Policies セクションから インラインポリシーの追加 を選択します
4. JSON タブを選択し、テンプレートの内容を以下の内容で書き換えます。テンプレートはこちらからコピーしてJSON ウィンドウに貼り付けます。
5. 上記テンプレート内のREGION-CODE、ACCOUNT-ID-WITHOUT-HYPHENS、STACK-NAMEを変更します。
※ スタック名は大文字と小文字を区別するのでご注意ください。以下のスクリーンショットでは東京リージョンの ExampleStack という AppStream 2.0 スタックのポリシーを設定しています。
6. ポリシーの確認 を選択します。 以下のメッセージが表示されますが、そのまま進めてください
7. ポリシー名を入力します。本投稿でのポリシー名は ExampleStackAccess です。
8. ポリシーを生成 を選択します。
7) AWS SSO の属性マッピングを作成する
ID プロバイダ、IAM ロール、アクセス権限の設定が終わったら、一旦 AWS SSO ダッシュボードに戻り、属性マッピングの設定を行います。
1. AWS SSO ダッシュボードのナビゲーションペインから アプリケーション を選択します。
2. 先の手順( 3) AppStream 2.0 の AWS SSO アプリケーションを作成する) で作成したアプリケーションを選択します。本投稿では AppStream ExampleStack を選択します。
3. 属性マッピング タブを選択します。
AppStream 2.0 のフリートが Active Directory ドメインに参加していて、AWS SSO を IdP として使用する場合は、ユーザーの SAML_Subject NameID の値を UPN フォーマット(username@domain.com)で指定する必要があります。
次の表は AWS SSO のユーザー属性のMicrosoft Active Directoryへのデフォルトマッピングを表します。
4. 以下のユーザー属性を追加します
—————————————-
アプリケーションのユーザー属性 : Subject
この文字列値または AWS SSO のユーザー属性にマッピング : ${user:email}
形式 : persistent
—————————————-
アプリケーションのユーザー属性 : https://thinkwithwp.com/SAML/Attributes/RoleSessionName
この文字列値または AWS SSO のユーザー属性にマッピング : ${user:email}
形式 : unspecified
—————————————-
アプリケーションのユーザー属性 : https://thinkwithwp.com/SAML/Attributes/Role
この文字列値または AWS SSO のユーザー属性にマッピング : arn:aws:iam::012345678910:role/ExampleStack,arn:aws:iam:: 012345678910:saml-provider/AWS_SSO_ExampleStack
形式 : unspecified
この文字列値または AWS SSO のユーザー属性にマッピングには以下のフォーマットで入力します。
ロールARN,IDプロバイダARN
—————————————-
5. 変更の保存 を選択します
8) ユーザーの割り当てと動作確認
動作確認を行う際はディレクトリ内のユーザーをアプリケーションに割り当てます。
1. AWS SSO ダッシュボードで、ナビゲーションペインから アプリケーション を選択します。
2. 先の手順(3) AppStream 2.0 の AWS SSO アプリケーションを作成する) で作成したアプリケーションを選択します。本投稿でのアプリケーション名はAppStream ExampleStack です。
3. 割り当て済みユーザー タブから ユーザーの割り当て を選択します。
4. 接続されたディレクトリをグループまたはユーザーのどちらで検索するかを選択します。デフォルトはグループです。
5. 接続されたディレクトリを検索 を選択します。
6. ユーザー、ユーザーの割り当て の順に選択します。
7. AWS SSO ダッシュボードの ユーザーポータル セクション内の ユーザーポータル の URL に表示された URL を開き、ユーザー名、パスワードを入力しログインします。ユーザー名は UPN フォーマット(例えば testuser@domain.local)で入力します。
8. アプリケーションを選択します。
以下の手順により、AppStream 2.0 スタックへのアクセス管理を Active Directory から容易に行う事ができます。
1. Active Directory のセキュリティグループを作成します。本投稿でのグループ名は AWS-012345678910-ExampleStack です。
2. AWS SSO ダッシュボードで、ナビゲーションペインから アプリケーション を選択します。
3. Active Directory のセキュリティグループを割り当てるアプリケーションを選択します。ここではAppStream ExampleStack を選択します.
4. 割り当て済みユーザー タブを選択し、ユーザーの割り当て を選択します。
5. グループ が選択された状態で、ステップ1のセキュリティグループを検索します。
6. セキュリティグループが表示されたら、セキュリティグループ名の左のチェックボックスをチェックし、ユーザーの割り当て を選択します。
7. 次に、テストで使用するドメインユーザー(画面ショットの例ではTuser1@domain.local)を作成し、AWS-012345678910-ExampleStack のメンバーとして登録します。
8. 以上で、TUser1 およびセキュリティグループに追加したユーザーは AppStream 2.0 ExampleStack へのログオンが可能となります。この様にアプリケーションへのアクセス管理を Active Directory で容易に行う事ができます。
9) AWS SSO Directory を利用して AppStream 2.0 へのアクセスを管理する。
AWS SSO の初回有効時にはデフォルトで AWS SSO 専用のディレクトリ(AWS SSO Directory) が選択されます。ここでは、AWS SSO Directory を利用してAppStream 2.0 へのユーザーアクセスを管理する方法について説明します。
AWS SSO Directory を利用する事で、AppStream 2.0 ユーザーの作成と管理を行う事ができます。この方法ではドメイン参加した AppStream 2.0 フリートは使用できませんが、ユーザーは Active Directory を必要とせずに、SAML2.0 を利用して AppStream 2.0 リソースにアクセスすることができます。
AWS SSO Directory でユーザーを作成し、AppStream 2.0 Example Stack に割り当てる手順は以下の通りです。
1. AWS SSO ダッシュボードでナビゲーションペインから ユーザー を選択します。
2. ユーザーを追加 を選択し、ユーザー名とパスワードの設定方法(パスワードの設定手順が記載されたEメールをユーザーに送信するか、一時的なパスワードを生成する)を選択します。
3. 詳細の入力が完了したら 次:グループ を選択し、ユーザーを追加 を選択します。
4. ユーザーの画面に、「ユーザー「xxx」は正常に追加されました。」が表示されるのを確認します。
5. 複数のユーザーを追加する場合は、ユーザーを追加 を選択し、同じ手順でAppStream 2.0スタックへのアクセスが必要なユーザーを追加します。
6. ユーザーの追加が完了したら、次にユーザーをグループに追加します。ナビゲーションペインから グループ を選択します。
7. グループの作成 を選択し、グループ名および説明を入力したら作成を選択します。ここではグループ名は ExampleStack を使用します。
8. 次に ExampleStack のリンクを選択し、ユーザーを追加 を選択します。
9. AppStream 2.0 Example Stack へのアクセスが必要なユーザーを選択し、ユーザーの追加 を選択します。
10. AWS SSO ダッシュボードでナビゲーションペインから アプリケーション を選択します。
11. AppStream ExampleStack を選択し、割り当て済みユーザータブから ユーザーの割り当て を選択します。
12. グループ タブから ExampleStack を選択し、ユーザーの割り当て を選択します。
以上で、AWS SSO Directory を使ったユーザー作成およびAppStream 2.0 SAMLアプリケーションへのユーザー割り当ての設定は完了です。
ユーザーは登録時に送信されたEメールに記載の User Portal URL からAppStream 2.0セッションにアクセスできます。
まとめ
このブログ投稿では AWS SSO と Amazon AppStream 2.0 を使用してフェデレーションを有効にする方法を見てきました。AWS SSO のフェデレーションは全てのリージョンの AppStream 2.0 に対して構成する事ができますが、AWS SSO のメタデータはアプリケーション毎にユニークである必要があります。また、複数のアプリケーションを構成する場合はそれぞれに IAM Identity Provider が必要となります。AppStream 2.0 で SAML を使ったフェデレーションを設定する際の詳細情報についてはこちらを参照してください。
翻訳は Solution Architect の橋本が担当しました。原文はこちらです。