「AppStream 2.0」でSAML 2.0を使ったIDフェデレーションを設定する (Azure AD編)

企業などでユーザー管理に「Azure Active Directory (Azure AD)」を利用しているのであれば、シングルサインオンでAWS AppStream 2.0を利用できるんです。
2021.07.27

みなさん、こんにちは!
福岡オフィスの青柳です。

Amazon AppStream 2.0では、アプリケーション利用者のユーザー認証方式として以下を用意しています。

  • AppStream 2.0ユーザープール (AppStream 2.0内に閉じたユーザー管理)
  • SAML 2.0を使った外部IDプロバイダーへのフェデレーション (いわゆるシングルサインオン(SSO))

今回は、後者のうち、マイクロソフトが提供するIDプロバイダーである「Azure Active Directory (Azure AD)」とのIDフェデレーションを試してみました。

~~~

なお、「Google Cloud Identity」を使ったAppStream 2.0のIDフェデレーションについてもブログ記事にしていますので、併せてご覧ください。

また、Oktaを使う方法のブログ記事もありますので、Oktaを利用される方はこちらを参照してください。

参考にした情報

AppStream 2.0におけるSAML 2.0を使ったIDフェデレーションの汎用的な手順については、AWSドキュメントの下記ページを参照しました。

また、Azure ADに関する設定手順については、AWSブログを参考にしました。

AWSブログの内容は一部画面などが古い箇所があるため、最新 (2021年7月現在) の手順は本ブログ記事を参考にしてください。

事前準備

IDフェデレーションの設定に入る前に、事前に以下の準備をしておきます。

  • AppStream 2.0でアプリケーションが利用できる状態にする
  • Azure ADが利用できる状態にする
  • Azure ADでユーザーを作成する

AppStream 2.0でアプリケーションが利用できる状態にする

Amazon AppStream 2.0: 入門ガイド に従って、AppStream 2.0でアプリケーションが利用できるように設定します。

下記のブログ記事に手順の解説や補足事項がありますので、併せて参照するとよいと思います。

Azure ADが利用できる状態にする

Azure ADは、無償版の「Azure AD Free」、有償版の「Azure AD Premium P1」「Azure AD Premium P2」のいずれであっても、SAML 2.0によるIDフェデレーション機能が利用できます。

今回は、Microsoft Azureのサブスクリプションに含まれていて追加費用不要で利用できる「Azure AD Free」を使って検証しました。

もし「Azure AD Premium P1」「Azure AD Premium P2」を利用する場合は、手順については別途ご確認ください。(有償プランを単独で契約して利用開始する手順等については今回説明を割愛します)

Azure ADでユーザーを作成する

具体的な手順は省略しますが、Azureポータルから「Azure Active Directory」→「(既定のディレクトリ)」→「ユーザー」→「新しいユーザー」でユーザーを作成しておきます。

やってみた

以下の流れで設定して行きます。

  1. [Azure AD] エンタープライズアプリケーション (SAMLシングルサインオン) を作成する
  2. [AWS] IAMコンソールでIDプロバイダの設定を行う
  3. [AWS] IDフェデレーション用のIAMロールを作成する
  4. [Azure AD] SAMLアプリケーションに「ユーザー属性とクレーム」の組を設定する
  5. [Azure AD] SAMLアプリケーションをユーザーに割り当てる
  6. 対象ユーザーでGoogleにログインして、AppStream 2.0アプリケーションを利用する

ステップ1: [Azure AD] エンタープライズアプリケーション (SAMLシングルサインオン) を作成する

Azureポータルで「Azure Active Directory」を開き、サイドメニューから「エンタープライズアプリケーション」を開きます。

「新しいアプリケーション」をクリックします。

「独自のアプリケーションの作成」をクリックします。

以下の通り入力します。

項目 設定値
お使いのアプリの名前は何ですか? SAML for AWS AppStream 2.0
アプリケーションでどのような操作を行いたいですか? 「ギャラリーに見つからないその他のアプリケーションを統合します (ギャラリー以外)」を選択

アプリケーションが作成されたことを確認します。

サイドメニューから「シングルサインオン」を選択します。

「シングルサインオン方式の選択」で「SAML」を選択します。

「基本的なSAML構成」の「編集」ボタンをクリックします。

まず、最初の2項目に対して以下の通り入力します。

項目 設定値
識別子 (エンティティID) urn:amazon:webservices
応答URL https://signin.aws.amazon.com/saml

「識別子 (エンティティID)」欄は、最初から入力されている値を削除して、上表の設定値を入力します。 また、「規定」にチェックを入れます。

「応答URL」欄は、設定値を入力した後、「規定」にチェックを入れます。

続けて、残りの項目に対して以下の通り入力します。

項目 設定値
サインオンURL (空欄のまま)
リレー状態 AppStream 2.0スタックの「リレーステートURL」を入力 (欄外参照)
ログアウトURL (空欄のまま)

「リレーステートURL」は以下のように指定します。
<リレーステートエンドポイント>?stack=<スタック名>&accountId=<AWSアカウントID>

「リレーステートエンドポイント」はリージョン毎に用意されています。 該当するリージョンのリレーステートエンドポイントは下記リンク先で確認してください。
SAML のセットアップ - フェデレーションのリレーステートを設定する

例えば、AppStream 2.0のリージョンが「東京」、スタック名が「DemoStack」、AWSアカウントIDが「123456789012」である場合、リレーステートURLは以下のようになります。
https://appstream2.ap-northeast-1.aws.amazon.com/saml?stack=DemoStack&accountId=123456789012

全て入力し終わったら「保存」をクリックして設定を保存します。

「SAML署名証明書」の「フェデレーションメタデータXML」の行にある「ダウンロード」をクリックします。

ファイル「SAML for AWS AppStream 2.0.xml」をローカルディスクに保存します。

ステップ2: [AWS] IAMコンソールでIDプロバイダの設定を行う

AWSマネジメントコンソールで、「IAM」→「IDプロバイダ」を開き、「プロバイダの追加」をクリックします。

以下の通り情報を入力します。

項目 設定値
プロバイダのタイプ 「SAML」を選択
プロバイダ名 AzureAD-IdP

入力後、「メタデータドキュメント」の「ファイルを選択」をクリックして、ステップ1でダウンロードしたAzure ADのメタデータファイル (SAML for AWS AppStream 2.0.xml) を指定します。

ファイルのアップロードに成功し、以下のように緑色のチェックマークが表示されることを確認します。

確認後、「プロバイダを追加」をクリックします。

IDプロバイダが追加されたことを確認します。

ステップ3: [AWS] IDフェデレーション用のIAMロールを作成する

AWSマネジメントコンソールで、「IAM」→「ロール」を開き、「ロールを作成」をクリックします。

以下の通り情報を入力します。

項目 設定値
信頼されたエンティティの種類を選択 「SAML 2.0フェデレーション」を選択
SAMLプロバイダー 前ステップで作成したプロバイダ「AzureAD-IdP」を選択
アクセスの種類 「プログラムによるアクセスのみを許可する」「プログラムによるアクセスと AWS マネジメントコンソールによるアクセスを許可する」のいずれも選択しないでください
(選択してしまった場合は、一旦キャンセルしてやり直してください)
属性 「SAML:sub_type」を選択
「persistent」と入力
条件 設定しない

アクセス権限ポリシーは何もアタッチせず、次へ進みます。

必要に応じてタグを追加します。

ロール名およびロールの説明 (任意) を入力します。

項目 設定値
ロール名 AppStream_AzureAD-IdP
ロールの説明 必要に応じて設定

「ロールの作成」をクリックして、ロールの作成を完了します。

作成したロールの「信頼関係」タブを開き、「信頼されたエンティティ」と「条件」が下図の通りに設定されていることを確認します。

「アクセス権限」タブを選択し、「インラインポリシーの追加」をクリックします。

以下のようにポリシードキュメントを入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "appstream:Stream",
            "Resource": "arn:aws:appstream:ap-northeast-1:123456789012:stack/DemoStack",
            "Condition": {
                "StringEquals": {
                    "appstream:userId": "${saml:sub}"
                }
            }
        }
    ]
}

「Resource」に記述するAppStream 2.0スタックのARNは、「リージョン」「AWSアカウントID」「スタック名」を適宜指定してください。

ポリシー名を「AppStream」と入力して、インラインポリシーの作成を完了します。

ステップ4: [Azure AD] SAMLアプリケーションに「ユーザー属性とクレーム」の組を設定する

Azureポータルで「Azure Active Directory」→「エンタープライズアプリケーション」を開きます。

「SAML for AWS AppStream 2.0」を選択します。

左側のメニューから「シングルサインオン」を選択します。

「ユーザー属性とクレーム」の「編集」ボタンをクリックします。

「必要な要求」のクレーム「一意のユーザー識別子 (名前ID)」を選択します。

「名前識別子の形式」欄の設定値を「電子メールアドレス」から「永続的」(Persistent) に変更します。

他の項目は変更せずに、「保存」をクリックして設定を保存します。

「追加の要求」に存在する既存のクレームを全て削除します。 (クレーム行の右端の「…」をクリックして「削除」を選択します)

「新しいクレームの追加」をクリックします。

以下の通り入力します。

項目 設定値
名前 Role
名前空間 https://aws.amazon.com/SAML/Attributes
ソース 「属性」を選択
ソース属性 フェデレーション先の「IdP定義」「ロール」を示す文字列を入力 (欄外参照)

「IdP定義」「ロール」を示す文字列は、以下のように2種類のARNをカンマで区切って指定します。
<AWS IAM Identity ProviderのARN>,<IAM RoleのARN>

各ARNは、AWSマネジメントコンソールの画面で確認してください。

「AWS IAM Identity Provider」のARN

「IAM Role」のARN

入力例は以下のようになります。
arn:aws:iam::123456789012:saml-provider/AzureAD-IdP,arn:aws:iam::123456789012:role/AppStream_AzureAD-IdP

入力後、「保存」をクリックして設定を保存します。

再び「新しいクレームの追加」をクリックして、以下の通り入力します。

項目 設定値
名前 RoleSessionName
名前空間 https://aws.amazon.com/SAML/Attributes
ソース 「属性」を選択
ソース属性 「user.userprincipalname」を選択

入力後、「保存」をクリックして設定を保存します。

再び「新しいクレームの追加」をクリックして、以下の通り入力します。

項目 設定値
名前 SessionDuration
名前空間 https://aws.amazon.com/SAML/Attributes
ソース 「属性」を選択
ソース属性 「3600」と入力

入力後、「保存」をクリックして設定を保存します。

「追加の要求」に3件が登録されたことを確認します。

ステップ5: [Azure AD] SAMLアプリケーションをユーザーに割り当てる

「SAML for AWS AppStream 2.0」の画面で、左側のメニューから「ユーザーとグループ」を選択します。

「ユーザーまたはグループの追加」をクリックします。

「ユーザー」欄に表示されている「選択されていません」をクリックします。

対象のユーザーを選択して、「選択」をクリックします。

「割り当て」をクリックして設定を保存します。

ステップ6: 対象ユーザーでGoogleにログインして、AppStream 2.0アプリケーションを利用する

これで全ての設定が終わりましたので、実際にAzure ADのユーザーでログインして、AppStream 2.0アプリケーションが利用できることを確認しましょう。

Webブラウザをプライベートモードやゲストモードで起動して、https://myapps.microsoft.com/ へアクセスします。

サインイン画面が表示されたら、Azure ADのユーザーを入力します。

パスワードを入力します。

「マイアプリ」画面が表示され、「SAML for AWS AppStream 2.0」というアイコンが表示されていると思います。

アイコンをクリックすると、SAML 2.0によるIDフェデレーションが行われ、AWS AppStream 2.0のカタログページへ遷移します。

アプリケーションのアイコンをクリックして、Webブラウザ内でAppStream 2.0アプリケーションが利用できることを確認します。

おわりに

SAML 2.0によるIDフェデレーションを利用する際には、IDプロバイダ (Azure AD)、SAMLアプリケーション (AWS AppStream 2.0) それぞれの画面を行ったり来たりして、複数個所で設定を行う必要があります。

設定を間違えたり飛ばしたりすると認証時に「403エラー」などが発生して接続に失敗しますので、1ステップ1ステップ確実に設定するのがポイントです。

もしエラーになった際は、前の手順に戻って設定内容を確認したり、どうしても上手く行かない時には最初からやり直したりするのが、結果的に早く解決する道だと思います。