Amazon AppStream2.0のアクセスにOktaをフェデレーションする
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 State は https://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 ロールの ARN と ID プロバイダーの 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 アクセス制限できます。
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