Amazon AppStream2.0のアクセスにOktaをフェデレーションする

2019.10.06

Amazon AppStream 2.0 は SAML 2.0 を通した AppStream 2.0 スタックへの ID フェデレーションをサポートしています。

図は公式ドキュメントから

今回の記事では、Amazon AppStream 2.0 のアクセスに 認証基盤サービス(IDaaS) Okta をフェデレーションする方法について手順を追って説明します。

事前準備

Okta のアカウントがない場合は、Okta Developer Editionのアカウントを次の URL から作成してください。

https://developer.okta.com/quickstart/

クレジットカードを登録せずに、無料でアカウント開設できます。

Okta アプリケーションの作成

Okta の管理者ダッシュボードにサインインします。

デフォルトのUI(Developer Console)はアプリケーション開発者向けのため、Classic UIに変更します。

アプリケーションの追加画面に移動するため、Applications タブを選択し、[Add Application] をクリックします。

検索ボックスに "appstream" を入力し [Add] をクリックします。

[Application label] はユーザーがSSOするアプリケーションを選択するときに利用されます。 システムを判別しやすい名前に変更し、 [Done] をクリックします。

"Sign On"タブを選択し "View Setup Instructions" をクリックします。

"How to Configure SAML 2.0 for Amazon AppStream 2.0" というインストラクションに遷移します。

このインストラクションの手順5 において Metadata Document としてテキストエリアに表示されている文字列をファイル metadata.xml として保存します。

正しい手順でインストラクションに遷移しなかった場合、Sign in to Okta Admin app to have this variable generated for you. というエラーメッセージが表示されます。

Okta コンソールを一時的に離れ、ここからは AWS コンソールで作業します。

AWS の設定

ID プロバイダーの作成

IAM の[ID プロバイダー]から[プロバイダの作成]をクリックし、以下の情報でプロバイダを作成します。

項目
プロバイダーのタイプ SAML
プロバイダ名 任意
メタデータドキュメント 先程保存した metadata.xml を選択

作成されたプロバイダの ARN を控えます。

SAML 2.0 フェデレーションロールの作成

ID プロバイダー Okta と AWS の間に信頼関係を確立するロールを作成します。

IAM ポリシーの作成

AppStreams 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}",
              "saml:sub_type": "persistent"
          }
        }
    }
  ]
}

ハイライトした 7 行目の Resource 要素を環境に合わせて変更します。

例えば、AWSアカウント「123456789012」の東京リージョンにあるスタック「Test」の場合、Resource"arn:aws:appstream:ap-northeast-1:123456789012:stack/Test" となります。

IAM ロールの作成

SAML 2.0 フェデレーションロールを作成します。

項目
種類 SAML 2.0フェデレーション
SAMLプロバイダー 作成した IdP
属性 SAML:sub_type
persistent
ポリシー 先程作成したマネージドポリシー

SAMLプロバイダーにおいて

  • プログラムによるアクセスのみを許可する
  • プログラムによるアクセスと AWS マネジメントコンソールによるアクセスを許可する

チェックしないようにしてください。

作成されたロールの ARN を控えます。

Okta アプリケーションの 設定

再び、Okta のアプリケーションの "Sign On"設定画面に戻り、[Edit] ボタンから編集画面に入ります。

SIGN ON METHODS 設定

Okta の Amazon AppStream 2.0 連携では、SAML 2.0 だけが唯一の sign-on オプションです。

SAML 2.0 の Default Relay State に次のフォーマットの URL を入力します。

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

relay-state-region-endoint は次の表の通りです。

リージョン リレーステートのエンドポイント
us-east-1 (バージニア北部) https://appstream2.us-east-1.aws.amazon.com/saml
us-west-2 (オレゴン) https://appstream2.us-west-2.aws.amazon.com/saml
ap-northeast-1 (東京) https://appstream2.ap-northeast-1.aws.amazon.com/saml
ap-northeast-2 (ソウル) https://appstream2.ap-northeast-2.aws.amazon.com/saml
ap-southeast-1 (シンガポール) https://appstream2.ap-southeast-1.aws.amazon.com/saml
ap-southeast-2 (シドニー) https://appstream2.ap-southeast-2.aws.amazon.com/saml
eu-central-1 (フランクフルト) https://appstream2.eu-central-1.aws.amazon.com/saml
eu-west-1 (アイルランド) https://appstream2.eu-west-1.aws.amazon.com/saml

例えば、AWSアカウント「123456789012」の東京リージョンにあるスタック「Test」の場合、Default Relay Statehttps://appstream2.ap-northeast-1.aws.amazon.com/saml?stack=Test&accountId=123456789012 となります。

ADVANCED SIGN-ON SETTINGS 設定

[Role ARN and Idp ARN] [Session Duration] を設定します。

[Role ARN and Idp ARN] には名前の通り IAM ロールの ARNID プロバイダーの ARNコンマつなぎで入力します。

例えば、IAMロールの ARN が arn:aws:iam::123456789012:role/okta-access-role で ID プロバイダーの ARN が arn:aws:iam::123456789012:saml-provider/okta の場合 arn:aws:iam::123456789012:role/okta-access-role,arn:aws:iam::123456789012:saml-provider/okta となります。

[Session Duration] にはセッション時間を秒で指定します。

入力後、[Save] をクリックします。

Assignments 設定

最後に、"Assignments"タブから People/Groups との紐付けを行います。

SSO 動作確認

AppStream 2.0 に紐付けたユーザーでログインした状態で Okta コンソールの [My Applications] をクリックすると、Okta アプリケーションのダッシュボードに遷移します。(管理モードからユーザーモードへの切り替え)

アプリケーションアイコンをクリックし、Amazon AppStream 2.0 を起動します。

サインインが成功すると、Amazon AppStream 2.0 が表示されます。

IP アクセス制限

AppStream 2.0 で SAML を利用すると、ID プロバイダー、あるいは、IAM ロールで IP アクセス制限できます。

参考: Limit access to stream Amazon AppStream 2.0 applications to your IP ranges | Desktop and Application Streaming

ID プロバイダー側の Okta で制限する場合、[Security] -> [Networks] から制限します。

Set Up Zones to Secure Your Network | Okta

SP 側の IAM ロールで制限する場合、IAM ポリシーの Condition に IP アドレスの条件を追加します。

{
    "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}",
                    "saml:sub_type": "persistent"
                },
                "IpAddress": {
                    "aws:SourceIp": [
                        "1.2.3.4/32",
                        "5.6.7.0/24"
                    ]
                }
            }
        }
    ]
}

許可されていない IP アドレスから AppStream 2.0 にアクセスすると、以下のエラー画面が表示されます。

最後に

先日公開された Amazon QuickSight のアクセスに Okta をフェデレーションする | Amazon Web Services ブログ にインスパイアされて、Okta 側の画面キャプチャを多めにして Amazon AppStream 2.0 版も書いてみました。

Okta 以外の サードパーティーの SAML 2.0 ID プロバイダーソリューションと統合するドキュメントも豊富に用意されています。

AppStream 2.0 SAML 2.0 との統合 - Amazon AppStream 2.0

参考