SAML のセットアップ - Amazon AppStream 2.0

SAML のセットアップ

既存の認証情報を使用してユーザーが AppStream 2.0 にサインインしたり、アプリケーションのストリーミングを開始したりできるように、SAML 2.0. を使用して ID フェデレーションを設定します。このためには、IAM ロールとリレーステート URL を使用して SAML 2.0 準拠の ID プロバイダー (IdP) を設定します。さらに、AppStream 2.0 スタックへのアクセス許可をフェデレーティッドユーザーに対し付与できるように AWS を設定します。IAM ロールは、スタックへのアクセス許可をユーザーに付与します。リレーステートは、AWS による認証に成功した後にユーザーが転送されるスタックポータルです。

前提条件

SAML 2.0 接続を設定する前に、以下の前提条件を満たしていることを確認してください。

  1. AWS との信頼関係を確立するように SAML ベースの IdP を設定します。

    • 組織のネットワーク内で、ID ストアを SAML ベースの IdP で機能するように設定します。設定のリソースについては、AppStream 2.0 と SAML 2.0 の統合 を参照してください。

    • SAML ベースの IdP を使用して、組織を IdP として定義するフェデレーションメタデータドキュメントを生成し、ダウンロードします。署名されたこの XML ドキュメントは、証明書利用者の信頼を確立するために使用されます。後で IAM コンソールからアクセスできる場所にこのファイルを保存します。

  2. AppStream 2.0 管理コンソールを使用して AppStream 2.0 スタックを作成します。この章でこれから説明するように、IAM ポリシーを作成し、AppStream 2.0 で IdP 統合を設定するには、このスタック名が必要です。

    AppStream 2.0 スタックを作成するには、AppStream 2.0 マネジメントコンソール、AWS CLI、または AppStream 2.0 API を使用します。詳細については、AppStream 2.0 フリートとスタックを作成する を参照してください。

ステップ 1: AWS IAM で SAML ID プロバイダーを作成する

まず、AWS IAM で SAML IdP を作成します。この IdP は、組織の IdP ソフトウェアで生成するメタデータドキュメントを使用して、組織の IdP と AWS との間の信頼関係を定義します。詳細については、IAM ユーザーガイドCreating and Managing a SAML Identity Provider (Amazon Web Services Management Console) を参照してください。AWS GovCloud (米国西部) での SAML IdP の使用については、AWS GovCloud (US) ユーザーガイドの「AWS Identity and Access Management」を参照してください。

ステップ 2: SAML 2.0 フェデレーション IAM ロールを作成する

次に、SAML 2.0 フェデレーション IAM ロールを作成します。この手順では、IAM と組織の IdP 間に、IdP をフェデレーションの信頼されるエンティティと識別する信頼関係を確立します。

SAML IdP への IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles]、[Create role] の順に選択します。

  3. [ロールタイプ] で [SAML 2.0 フェデレーション] を選択します。

  4. [SAML プロバイダー] で、作成した SAML IdP を選択します。

    重要

    2 つの SAML 2.0 アクセスメソッド ([プログラムによるアクセスのみを許可する] または [プログラムによるアクセスと Amazon Web Services マネジメントコンソールによるアクセスを許可する]) のいずれも選択しないでください。

  5. [属性] で [SAML:aud] を選択します。

  6. [Value (値)] に「https://signin.aws.amazon.com/saml」と入力します。この値は、persistent の値の SAML サブジェクトタイプアサーションを含む SAML ユーザーストリーミングリクエストへのロールアクセスを制限します。SAML:sub_type が persistent の場合、IdP は特定のユーザーからのすべての SAML リクエストで同じ一意の値を NameID 要素に送信します。SAML:sub_type アサーションに関する詳細は、Using SAML-Based Federation for API Access to AWSUniquely Identifying Users in SAML-Based Federation を参照してください。

  7. 正しい信頼されたエンティティおよび条件を確認して SAML 2.0 の信頼情報を確かめたら、[Next: Permissions] (次: アクセス許可) を選択します。

  8. [アクセス権限ポリシーをアタッチする] ページで、[Next: Tags] を選択します。

  9. (オプション) 追加する各タグのキーと値を入力します。詳細については、Tagging IAM Users and Roles を参照してください。

  10. 終了したら、[Next: Review] を選択します。後でこのロールにインラインポリシーを作成して埋め込みます。

  11. [Role name] (ロール名) に、このロールの目的を識別できる名前を入力します。なぜなら複数エンティティがロールを参照している可能性があります。ロールが作成された後のロールの名前の編集はできません。

  12. (オプション) [Role description] (ロールの説明) に、新しいロールの説明を入力します。

  13. ロールの詳細を確認し、[ロールの作成] を選択します。

  14. (オプション) サードパーティー SAML 2.0 アイデンティティプロバイダーまたは証明書ベースの認証を使用して属性ベースのアプリケーションの使用権限を使用する場合は、新しい IAM ロールの信頼ポリシーに sts:TagSession 権限を追加する必要があります。詳細については、「サードパーティーの SAML 2.0 アイデンティティプロバイダーを使用した属性ベースのアプリケーションの使用権限」、および「AWS STS でのセッションタグの受け渡し」を参照してください。

    新しい IAM ロールの詳細ページで、[Trust relationships] (信頼関係) タブを選択してから、[Edit trust relationship] (信頼関係の編集) を選択します。[信頼関係の編集] ポリシーエディタが起動します。sts:TagSession 許可は、次のように追加します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:saml-provider/IDENTITY-PROVIDER" }, "Action": [ "sts:AssumeRoleWithSAML", "sts:TagSession" ], "Condition": { "StringEquals": { "SAML:sub_type": "persistent" } } } ] }

    [IDENTITY-PROVIDER] を、ステップ 1 で作成した SAML IdP の名前と置き換えます。次に、[Update Trust Policy] (信頼ポリシーの更新) を選択します。

ステップ 3: IAM ロールにインラインポリシーを埋め込む

次に、作成したロールにインライン IAM ポリシーを埋め込みます。インラインポリシーを埋め込むと、ポリシーのアクセス許可が、間違ったプリンシパルエンティティにアタッチされることを回避できます。インラインポリシーは、フェデレーティッドユーザーに作成した AppStream 2.0 スタックへのアクセスを提供します。

  1. 作成した IAM ロールの詳細で、[Permissions (アクセス許可)] タブを選択し、[Add inline policy (インラインポリシーの追加)] を選択します。ポリシーの作成ウィザードが起動します。

  2. [ポリシーの作成] で、[JSON] タブを選択します。

  3. 次の JSON ポリシーを JSON ウィンドウにコピーして貼り付けます。次に、AWS リージョンコード、アカウント ID、スタック名を入力してリソースを編集します。次のポリシー、"Action": "appstream:Stream" は、作成したスタックのストリーミングセッションに接続するアクセス許可を AppStream 2.0 ユーザーに提供するアクションです。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appstream:Stream", "Resource": "arn:aws:appstream:REGION-CODE:ACCOUNT-ID-WITHOUT-HYPHENS:stack/STACK-NAME", "Condition": { "StringEquals": { "appstream:userId": "${saml:sub}" } } } ] }

    [REGION-CODE] を、AppStream 2.0 スタックが存在する AWS リージョンと置換します。STACK-NAME をこのスタック名に置き換えます。[STACK-NAME] の大文字と小文字は区別されます。また、AppStream2.0マネジメントコンソールのスタックダッシュボードに表示されるスタック名と完全に一致する必要があります。

    AWS GovCloud (米国西部) にあるリソースの ARN には、次の形式を使用します。

    arn:aws-us-gov:appstream:REGION-CODE:ACCOUNT-ID-WITHOUT-HYPHENS:stack/STACK-NAME

  4. (オプション) SAML 2.0 マルチスタックアプリケーションカタログのサードパーティー SAML 2.0 アイデンティティプロバイダーを使用して、属性ベースのアプリケーションの使用権限を使用する予定の場合は、IAM ロールのインラインポリシー内のリソースは "Resource": "arn:aws:appstream:REGION-CODE:ACCOUNT-ID-WITHOUT-HYPHENS:stack/*" である必要があり、アプリケーション使用権限がスタックへのストリーミングアクセスを制御します。スタックリソースに追加の保護を適用するには、ポリシーに明示的拒否を追加します。詳細については、「サードパーティーの SAML 2.0 アイデンティティプロバイダーを使用した属性ベースのアプリケーションの使用権限」、および「ポリシーの評価論理」を参照してください。

  5. 完了したら、[ポリシーの確認] をクリックします。構文エラーがある場合は、Policy Validator (ポリシー検証) によってレポートされます。

ステップ 4: SAML ベースの IdP を設定する

SAML ベースの IdP によっては、https://signin.aws.amazon.com/static/saml-metadata.xmlsaml-metadata.xml ファイルを手動でアップロードして、AWS を信頼するサービスプロバイダーとするように、その IdP をアップデートする必要が生じます。このステップは、IdP のメタデータを更新します。一部の IdP では、すでに更新が設定されています。この場合は、次のステップに進みます。

IdP でこの更新がまだ設定されていない場合には、IdP から提供されるドキュメンテーションでメタデータを更新する方法に関する情報を確認します。プロバイダーによっては、URL を入力し、また IdP によってファイルを取得してインストールするオプションが提供されます。また、URL からファイルをダウンロードし、ローカルファイルとして指定する必要があるプロバイダーもあります。

ステップ 5: SAML 認証レスポンスのアサーションを作成する

次に、認証レスポンスの中に IdP が AWS に送信する SAML 属性としての情報を設定する必要がある場合もあります。IdP によっては、この情報はすでに設定されています。この場合、この手順をスキップしてステップ 6 に進みます。

この情報がまだ設定されていない場合は、IdP で次を実行します。

  • SAML Subject NameID (SAML サブジェクト名 ID) – 署名するユーザーの一意の識別子。

    注記

    ドメイン結合フリートを使用したスタックの場合、ユーザーの NameID 値は、sAMAccountName を使用した「domain\username」または userPrincipalName を使用した「username@domain.com」の形式で指定する必要があります。sAMAccountName 形式を使用している場合、NetBIOS 名または完全修飾ドメイン名 (FQDN) を使用して domain を指定できます。詳細については、AppStream 2.0 でのアクティブディレクトリの使用 を参照してください。

  • SAML Subject Type (SAML サブジェクトタイプ) (値を persistent に設定) – 値を persistent に設定すると、特定のユーザーからのすべての SAML リクエストの NameID 要素に同じ一意の値を IdP が送信することを確保できます。persistent で説明するように、SAML sub_type が ステップ 2: SAML 2.0 フェデレーション IAM ロールを作成する に設定されている SAML リクエストのみを許可する条件が IAM ポリシーに含まれていることを確認します。

  • Attribute 要素 (Name 属性が https://aws.amazon.com/SAML/Attributes/Role に設定) – この要素には、IdP によってマッピングされたユーザーの IAM ロールと SAML IdP を一覧表示する 1 つ以上の AttributeValue 要素が含まれます。このロールと IdP は、カンマ区切りの ARN のペアとして指定されます。

  • Attribute 属性の Name 要素は、https://aws.amazon.com/SAML/Attributes/RoleSessionName に設定される – この要素には、SSO 用に発行される AWS の一時的認証情報の識別子を提供する 1 つの AttributeValue 要素が含まれています。AttributeValue 要素の値は 2~64 文字で、英数字、アンダースコア、および + (プラス記号)、= (等号)、, (カンマ)、. (ピリオド)、@ (アットマーク)、- (ハイフン) のみで構成する必要があります。スペースを含めることはできません。通常、この値はユーザー ID (bobsmith) またはメールアドレス (bobsmith:bobsmith@example.com) になります。ユーザーの表示名 (Bob Smith) のように、スペースを含む値とすることはできません。

  • Attribute要素とのName属性を https://aws.amazon.com/SAML/Attributes/PrincipalTag:SessionContext に設定する (オプション) — この要素には、セッションコンテキストパラメータをストリーミングアプリケーションに渡すために使用できるパラメータを提供する1つのAttributeValue要素が含まれています。詳細については、「セッションコンテキスト」を参照してください。

  • Name 属性が https://aws.amazon.com/SAML/Attributes/PrincipalTag:ObjectSid (オプション) に設定された Attribute 要素 – この要素には、サインインしているユーザーの Active Directory セキュリティ識別子 (SID) を提供する AttributeValue 要素が 1 つ含まれています。このパラメータを証明書ベースの認証で使用すると、Active Directory ユーザーへの強力なマッピングが可能になります。

  • Attribute 要素 (SessionDuration 属性が https://aws.amazon.com/SAML/Attributes/SessionDuration に設定) (オプション) – この要素には、再認証が必要となる前にユーザーがアクティブでいられるフェデレーティッドストリーミングセッションの最大時間を特定する 1 つの AttributeValue 要素が含まれています。デフォルト値は 60 分です。詳細については、Configuring SAML Assertions for the Authentication ResponseAn optional Attribute element with the SessionDuration attribute set to https://aws.amazon.com/SAML/Attributes/SessionDuration セクション を参照してください。

    注記

    SessionDuration はオプションの属性ですが、これを SAML レスポンスに含めることをお勧めします。この属性を指定しない場合、セッション時間はデフォルト値の 60 分に設定されます。

    ユーザーが AppStream 2.0 クライアントを使用して AppStream 2.0 のストリーミングアプリケーションにアクセスしている場合、ユーザーのセッション時間が期限切れになると、セッションは切断されます。ユーザーがウェブブラウザを使用して AppStream 2.0 のストリーミングアプリケーションにアクセスしている場合、ユーザーのセッション時間が期限切れになってユーザーがブラウザページを更新すると、セッションが切断されます。

これらの要素を設定する方法については、IAM ユーザーガイドConfiguring SAML Assertions for the Authentication Response を参照してください。IdP に特定の設定要件に関する詳細は、IdP のドキュメンテーションを参照してください。

ステップ 6: フェデレーションのリレーステートを設定する

最後に、IdP を使用して AppStream 2.0 スタックのリレーステートの URL を指すようにフェデレーションのリレーステートを設定します。AWS による認証が成功すると、ユーザーは AppStream 2.0 スタックポータルに誘導され、SAML 認証レスポンス内のリレーステートとして定義されます。

リレーステートの URL の形式は次のようになります。

https://relay-state-region-endpoint?stack=stackname&accountId=aws-account-id-without-hyphens

Amazon Web Services アカウント ID、スタック名、およびスタックが位置するリージョンと関連付けられたリレーステートのエンドポイントを基に、リレーステートの URL を構成します。

オプションで、自動的に起動するアプリケーションの名前を指定できます。アプリケーション名を見つけるには、AppStream 2.0 コンソールでイメージを選択し、[Applications (アプリケーション)] タブを選択して、[Application Name (アプリケーション名)] 列に表示される名前を確認します。または、イメージをまだ作成していない場合は、アプリケーションをインストールした Image Builder に接続し、Image Assistant を開きます。アプリケーション名は [Add Apps] タブに表示されます。

[Desktop (デスクトップ)] ストリームビューに対してフリートが有効になっている場合は、オペレーティングシステムのデスクトップに直接起動することもできます。これを行うには、リレー状態 URL の最後の Desktop の末尾に、&app= を指定します。

サードパーティー SAML 2.0 アイデンティティプロバイダーを使用する属性ベースのアプリケーションの使用権限を使用すると、単一のリレー状態 URL から複数のスタックへのアクセスを有効にできます。次のように、リレー状態 URL からスタックと アプリケーション (存在する場合) パラメータを削除します。

https://relay-state-region-endpoint?accountId=aws-account-id-without-hyphens

ユーザーが AppStream 2.0 アプリケーションカタログにフェデレートすると、スタックが配置されているリージョンに関連付けられたアカウント ID およびリレー状態エンドポイントについて、アプリケーションの使用権限が 1 つ以上のアプリケーションをユーザーに一致させたすべてのスタックが表示されます。ユーザーがカタログを選択すると、アプリケーションの使用権限には、そのユーザーが資格を持つアプリケーションのみが表示されます。

詳細については、「サードパーティーの SAML 2.0 アイデンティティプロバイダーを使用した属性ベースのアプリケーションの使用権限」を参照してください。

次の表は、AppStream 2.0 を利用できるリージョンのリレーステートエンドポイントを示しています。ユーザーに FIPS 準拠の接続を使用してストリーミングするように求める場合は、FIPS 準拠のエンドポイントを使用する必要があります。FIPS エンドポイントの詳細については、FIPS エンドポイントを使用した転送中のデータの保護 を参照してください。

リージョン リレーステートのエンドポイント
米国東部 (バージニア北部)

https://appstream2.us-east-1.aws.amazon.com/saml

(FIPS) https://appstream2-fips.us-east-1.aws.amazon.com/saml

米国東部 (オハイオ) https://appstream2.us-east-2.aws.amazon.com/saml
米国西部 (オレゴン)

https://appstream2.us-west-2.aws.amazon.com/saml

(FIPS) https://appstream2-fips.us-west-2.aws.amazon.com/saml

アジアパシフィック (ムンバイ) https://appstream2.ap-south-1.aws.amazon.com/saml
アジアパシフィック (ソウル) https://appstream2.ap-northeast-2.aws.amazon.com/saml
アジアパシフィック (シンガポール) https://appstream2.ap-southeast-1.aws.amazon.com/saml
アジアパシフィック (シドニー) https://appstream2.ap-southeast-2.aws.amazon.com/saml
アジアパシフィック (東京) https://appstream2.ap-northeast-1.aws.amazon.com/saml

カナダ (中部)

https://appstream2.ca-central-1.aws.amazon.com/saml
欧州 (フランクフルト) https://appstream2.eu-central-1.aws.amazon.com/saml
ヨーロッパ (アイルランド) https://appstream2.eu-west-1.aws.amazon.com/saml
欧州 (ロンドン) https://appstream2.eu-west-2.aws.amazon.com/saml
AWS GovCloud (米国西部)

https://appstream2.us-gov-west-1.amazonaws-us-gov.com/saml

(FIPS) https://appstream2-fips.us-gov-west-1.amazonaws-us-gov.com/saml

注記

AWS GovCloud (米国西部) で AppStream 2.0 を使用する詳しい方法については、AWS GovCloud (US) ユーザーガイドの「Amazon AppStream 2.0」を参照してください。

南米 (サンパウロ) https://appstream2.sa-east-1.aws.amazon.com/saml