今回はAWSが提供しているマネージドコンタクトセンターサービスのAmazon Connectを同じくAWSサービスのIAM Identity Centerと連携させ、SSOできる環境の構築を行います。認証はSAML2.0を利用し、IdPはIAMで構築して利用するAWS内で完結するSSO環境となります。
今回のゴール
実現したい内容としては、IAM Identity Centerで1度ユーザ認証をすれば、AWS管理コンソールもAmazon connectにもアクセスできるという状態を作ることです。
こんな感じでAWS IAMのログイン画面とAmazon Connectログイン画面は別々となり、IDの管理もぞれぞれ別々となります。
運用例として、AmazonConnectのユーザを作成するために、AmazonConnectにAmazonConnectの管理者でログインする必要がありますがAWS IAMの管理者IDとは別IDのため、AmazonConnectの管理者PWの管理も必要になります。
ちゃんと管理していないとどっちの管理者IDがどのPWなのか分からなくなるという事態にもなりえます。
構成図
今回の設定を構成図にするとこんな感じになります。
前提条件+免責事項
- Amazon Connectインスタンス、IAMロール、IdPなどは全て同一のAWSアカウント内で構築する
- インスタンス利用料金が発生する
- 認証方式はSAML2.0を利用する
- IdPはAWS IAMから作成する
- 本記事のスクショは2024年3月時点のUI画面のスクショ
- Amazon Connect内の設定は本記事の範疇外(本記事はSSOでログインするところまで)
- SSOで利用するIDはメールアドレス形式
用語解説
- SSOとは?
シングルサインオン (SSO) は、ユーザーが 1 回限りのユーザー認証で複数のアプリケーションやウェブサイトにログインできるようにする認証ソリューションです。今日のユーザーはブラウザからアプリケーションに直接アクセスすることが多いため、組織はセキュリティとユーザーエクスペリエンスの両方を改善するアクセス管理戦略を優先しています。SSO は両方の側面を提供します。SSO では、ユーザーが本人であることが一度検証されると、ログインを繰り返さなくても、パスワードで保護されたすべてのリソースにアクセスできます。
【出典】https://aws.amazon.com/jp/what-is/sso/
- IdPとは?
IdP(Identity Provider)は、その名前の通り、アイデンティティ(身元)を提供するプロバイダのことです。具体的には、ユーザーがあるオンラインサービス(例えば、ショッピングサイトやSNS)にログインする際、そのユーザーが「本当に主張している人物であるか」を確認し、その情報をサービス提供者(SP: Service Provider)に伝える役割を果たします。
例えば、オンラインショッピングでアカウントを作成する際、ユーザー名やパスワード、メールアドレスを設定し、この情報がユーザーの「アイデンティティ」となり、次回からはその情報でログインします。IdPは、このようなユーザー情報を一元管理し、さまざまなウェブサービスで利用できるようにしてくれるものです。
【出典】https://www.netattest.com/idp-2023_mkt_tst
- SAMLとは?
SAML (Security Assertion Markup Language) は、アプリケーションが認証情報を SSO サービスと交換するために使用するプロトコルまたは一連のルールです。SAML は、ブラウザに適したマークアップ言語である XML を使用して、ユーザー識別データを交換します。SAMLベースの SSO サービスは、アプリケーションがユーザー認証情報をシステム内に保存する必要がないため、より優れたセキュリティと柔軟性を提供します。
【出典】https://aws.amazon.com/jp/what-is/sso/
設定の流れ
IAM Identity Centerの作成・有効化
AWS管理コンソールで「IAM Identity Center」を検索し、有効化します。
有効化できたらIAM Identity Centerで作成したユーザからAWS管理コンソールにログインできるように左側の「マルチアカウントアクセス許可」から「AWSアカウント」をクリックし、管理コンソールへログインできるようにしたいAWSアカウントを選択します。
Amazon Conectインスタンスの作成
SSOでログインする先のAmazonConnectを作成していきます。AWS管理コンソールで「Amazon Connect」を検索し、通常のインスタンスを作成する手順とほぼ同じですがID管理のところで、「SAML2.0ベースの認証」を選択してください。アクセスURLのところは任意の値でOKです。
管理者の追加ですが今回はあとから作成するので、「管理者なし」を選択します。ここで事前に作成しておいても問題ないです。
しばらくするとインスタンスが作成され、ステータスがアクティブになると思います。
IAM Identity CenterでAmazon Conectのアプリケーション登録
次にIAM Identity Centerで作成したユーザからAmazon Connectにログインできるように左側「アプリケーションの割り当て」から「アプリケーション」をクリックします。
「アプリケーションを追加」をクリックします。
アプリケーションタイプの選択ですが、今回設定するAmazon ConnectはAWSのカタログの中にあるため「カタログからアプリケーションを選択する」を選びます。
検索欄に「connect」と入力するとAmazon connectが出てくるので選択します。
表示名や説明は任意の値を設定できますが今回はデフォルトのまま進めます。
メタデータの各種URLが表示されています。この中で一番上の「IAM Identity Center SAMLメタデータファイル」は設定に必要なのでDLして、保存しておきます。アプリケーションのプロパティの「リレー状態」に後ほど値を入力します。
アプリケーションACS URLとアプリケーションSAML対象者ですがデフォルトのままでOKです。
これでアプリケーション登録に必要な最低限の情報は入力できたので「送信」をクリックし、登録を行います。
登録後はこんな感じで「アプリケーションの表示名で入力した値」のものと「Custom SAML2.0 Application」の2つが出てきます。「Custom SAML2.0 Application」はステータスが「未完了」になりますがこのままで問題ないです。
アプリケーションが表示されていない場合は「AWS管理」と「カスタマー管理」のタブが別になっていますので、「カスタマー管理」の方を表示させましょう。
IAM でIdPの作成
続いてIdPを作成します。IAMで作成しますがIAM Identity Centerの画面左下に関連コンソールというリンクがありますのでそこからアクセスします。IAM管理画面のアクセス管理の中に「IDプロバイダ」があるのでクリックします。
プロバイダのタイプで「SAML」を選択します。プロバイダ名は任意の値(今回はConnectIAMIdentityCenterという名前にしています)を入力し、「メタデータドキュメント」で先ほどDLしておいた「IAM Identity Center SAMLメタデータファイル」をアップします。これで右下の「プロバイダを追加」をクリックすれば必要情報が登録されたプロバイダが作成されます。
IAMポリシー(2つ)、IAMロールの作成
次にポリシーとロールを作成します。IAMの画面で「ポリシー」をクリックし、「ポリシーの作成」で新しいポリシーを作成します。
どういうポリシーを作成するのか設定できる画面になるので「JSON」をクリックし、ポリシーエディタを開きます。
ポリシーエディタの部分に以下の内容を記入します。インデントのずれや変なところに改行があるとエラーになるので気を付けましょう。
#以下をコピペ
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": "connect:GetFederationToken",
"Resource": [
"<connect instance ARN>/user/${aws:userid}"
]
}
]
}
コピペしたコードの中で、<connect instance ARN> は実際の値を入れる必要があります。
connect instance ARNですがAmazonConnectの管理サイトに記載があります。
ポリシー名ですが「ConnectIAM-Indetity-Center-Policy」にしています。
同じ要領でもう1つポリシー作成します。ポリシーエディタの部分に以下の内容を記入します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListRoles",
"iam:ListAccountAliases"
],
"Resource": "*"
}
]
}
ちなみにポリシー名ですが「identitycenter_cli_policy」にしています。
上記のポリシー作成後ですがこんな感じになります。
ポリシーができたので、今度はロールを作っていきます。
IAM管理画面のアクセス管理の中に「ロール」があるのでクリックします。
右上の「ロール作成」をクリックし、以下内容で設定します。
-
信頼されたエンティティタイプは「SAML2.0フェデレーション」を選択
-
SAML2.0ベースのプロバイダーで、先ほど作成したIdPを選択
-
許可ポリシーで先ほど作成した2つのポリシーを選択
ロール名は任意のものを設定します。今回は「ConnectIAM-Identity-Center」にしています。
Amazon Conectのアプリケーション登録内容の変更
先に作成しておいたAmazon Connectの設定内容を変更していきます。アプリケーションが表示されていない場合は「AWS管理」と「カスタマー管理」のタブが別になっており、「カスタマー管理」の方を表示させましょう。登録したアプリケーションを選択し、「アクション」から「設定を編集」をクリックします。
アプリケーションのプロパティの「リレー状態」の箇所に以下パラメータを入力します。
https://リージョン ID .console.aws.amazon.com/connect/federate/インスタンス ID
「リージョン ID」と「インスタンス ID」は環境によって変わりますので変更してください。
ちなみに東京リージョンだと「リージョン ID」はap-northeast-1になります。「インスタンス ID」はAmazonConnectのARNの中の”:instance/”以降の英数字です。
アプリケーションの設定編集はこれでOKです。
続いて「属性マッピングを変更」を行っていきます。
上記画像のように以下2つの属性マッピングを追加します。
1つ目はユーザ属性=「https://aws.amazon.com/SAML/Attributes/RoleSessionName」に、形式を「${user: email}」にします。
もう1つはユーザ属性を「https://aws.amazon.com/SAML/Attributes/Role」に、形式に「IAMroleのARN,IAM IdPのARN」を記入します。
【形式の記入例】
arn:aws:iam::xxxxxxxxx:role/ConnectIAM-Identity-Center,arn:aws:iam::xxxxxxxxxx:saml-provider/ConnectIAMIdentityCenter
これでSSOする環境設定はできました。
IAM Identity Centerでユーザ作成
ここから実際にSSOする際に利用するユーザを作成していきます。まずはIAM Identity Center側でユーザを作成します。
ひと通り必要な情報を埋めて、ユーザを作成します。今回はユーザ作成後の認証をメールで送付するので、受信できるメールアドレスを設定してください。またこのメールアドレスは次に作成するAmazonConnect側ユーザと合わせる必要があります。
Amazon Connectでユーザ作成
AmazonConnectの管理コンソールで「Access URL」横のEmergency accessのURLからログインしてユーザを作成します。※AmazonConnectのインスタンス作成時に管理者を作成している場合は通常のAccess URLからのログインでもOKです。
ログイン後にAmazon Connect側でも先ほどIAM Identity Center側で作成したユーザと同じ情報でユーザを作成します。「ログイン」の値はメールアドレス形式で記載してください。
AWSコンソールへのアクセス許可
最後にIAM Identity Centerの左側の「AWSマルチアカウントのアクセス許可」でそのAWSアカウントに、どういう権限でアクセスを許可するのか設定しましょう。ここはOrganizationで子アカウントにロールを設定する感じで進めてもらえればOKです。
SSOログイン動作試験
これでSSO設定とユーザ作成が完了したので、実際に1回の認証でAmazonConnectまでログインできるかやってみましょう。
認証画面のアクセスURLは以下画像の右下にAWSアクセスポータルのURLと記載されているところになります。
Amazon connect独自のログイン前認証画面が出てこずに以下のAmazon connectの設定画面にアクセスできてばOKです。
参照にしたサイト
↑サイト表示がおかしいときがありますが、何度か更新すると治ります
2024年4月4日追記(アプリケーション追加できない問題)
Organizationに参加しているアカウントの場合、IAM Identity Centerの「アプリケーションの割り当て」で「アプリケーションを追加」ボタンが出てこない場合があります。これはOrganizationの親アカウントによって制限されているためです。
制限解除のために、今回設定しようとしているアカウントの親アカウント側のIAM Identity Centerで委任管理者に当該アカウントを指定してやる必要があります。一番下の「委任された管理者を登録」からアカウントを指定してやりましょう。
おわりに
参考にしたサイトは2つともAWS公式のサイトです。ただ設定が必要な箇所が異なったり、片方のサイトには記載がないポリシーがあったり、公式のトラップが仕掛けられています...試される設定力、それがAWSにおけるSSO構築です!