概要
AppStreamではDesktopビューを利用できます。
Desktopビューで複数の環境を利用しようとすると、Fleet・Stackも複数作成することになります。
ログイン後にAppStreamの画面でCatalog(Stack)を選択するのですが、ユーザが利用しないStackは表示させたくないという場合もあるかと思います。
今回は、SAML2.0で認証した際に、エンドユーザごとに表示するStackを制限する方法を紹介します。

表示制御のしくみ
StackのApplication Entitlement設定を利用します。
イメージとしては、Stackにタグをつけて、エンドユーザが指定したタグがついているStackだけをCatalog画面に表示するという方法です。
下の図は、部署のタグが付いているStackを表示させる例です。
ユーザごとに設定されている部署の業務で使用するStackだけを表示させることができます。

設定方法
AWSとIdPの双方で設定を入れる必要があります。
AWS設定
AWS側では2つ設定を行います。
リレーステートの発行
SAML2.0の設定時にリレーステートを作成します。
リレーステートURLの作成時、Stack名は指定しない形でURLを作成します。
基本的なリレーステートURL:
https://relay-state-region-endpoint?stack=stackname&accountId=aws-account-id-without-hyphens
Stack名は指定しない形のリレーステートURL:
https://relay-state-region-endpoint?accountId=aws-account-id-without-hyphens
IAMロールの修正
SAML2.0を利用するにはIAMロールが必要になりますが、Application Entitlement設定を利用するには、IAMロールの修正が必要になります。
ロールのActionに「"sts:TagSession"」を追加してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<AWSアカウントID>:saml-provider/<IdP名>"
},
"Action": [
"sts:AssumeRoleWithSAML",
"sts:TagSession"
],
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}
Application Entitleament設定
StackのApplication Entitleament設定でタグを作成します。
1つのStackで複数のタグを作成することもできます。

Stackの設定画面からApplication Entitlementの[Create]をクリックします。
| 設定項目 | 設定内容 | 備考 |
|---|---|---|
| Name | 任意の名称 | |
| Description | 任意の説明 | オプション |
| Attribute Name | タグの種類を選択 | 組織だったらorganization、部署だったらdepartmentなどご自身が分かりやすいものを選択してください |
| Attribute Value | 任意のタグ名 | |
| Application options | Desktopビューの場合はAllを選択 |

IdP設定
IdP側では2つ設定を入れます。
リレーステートの設定
Stack名は指定しない形のリレーステートURLをIdPに伝えて設定してもらいます。
すでにリレーステートが設定されている場合はURLを置き換えてもらう必要があります。
SAMLアサーションの設定
SAMLアサーションを追加します。
IdPに以下の情報を伝えて追加してもらう必要があります。
値については、ユーザごとに変える必要があるので、AD連携するなどしてください。
項目:https://aws.amazon.com/SAML/Attributes/PrincipalTag:SessionContext
値:タグ名(Application Entitlementで設定した値)
※ SessionContext はタグの種類(groupsなど)を設定