Amazon ConnectでSAML 2.0フェデレーションを設定してAzure ADを使ったSSOを実現する
みなさん、こんにちは!
福岡オフィスの青柳です。
Amazon Connectのユーザーログイン認証の方法には以下の3通りがあります。
- Amazon Connect上で管理するユーザー名/パスワードを使ってログインを行う
- AWS Directory Serviceと連係してログイン認証を行う
- SAML 2.0ベースの外部IDプロバイダーと連係してログイン認証を行う
これらの方法のうち、3番目の「SAML 2.0」を使う方法として「Azure Active Directory」(Azure AD)との連係を試してみました。
なお、SAML 2.0を使ったAmazon Connectと外部IDプロバイダーとの連係については、過去に「OneLogin」「サテライトオフィス・シングルサインオン for G Suite (現: Google Workspace)」を使った方法が紹介されています。
これらのIDプロバイダーをご利用中であれば、下記を参照してください。
事前準備
IDフェデレーションの設定に入る前に、事前に以下の準備をしておきます。
- Azure ADが利用できる状態にする
- Azure ADでユーザーを作成する
Azure ADが利用できる状態にする
Azure ADは、無償版の「Azure AD Free」、有償版の「Azure AD Premium P1」「Azure AD Premium P2」のいずれであっても、SAML 2.0によるIDフェデレーション機能が利用できます。
今回は、Microsoft Azureのサブスクリプションに含まれていて追加費用不要で利用できる「Azure AD Free」を使って検証しました。
もし「Azure AD Premium P1」「Azure AD Premium P2」を利用する場合は、手順については別途ご確認ください。(有償プランを単独で契約して利用開始する手順等については今回説明を割愛します)
Azure ADでユーザーを作成する
具体的な手順は省略しますが、Azureポータルから「Azure Active Directory」→「(既定のディレクトリ)」→「ユーザー」→「新しいユーザー」でユーザーを作成しておきます。
設定手順
以下の流れで設定して行きます。
- [AWS] Amazon Connectインスタンスの作成時に「SAML 2.0ベースの認証」を選択する
- [Azure AD] エンタープライズアプリケーション (SAMLシングルサインオン) を作成する
- [AWS] IAMコンソールでIDプロバイダーの設定を行う
- [AWS] IDフェデレーション用のIAMポリシーとIAMロールを作成する
- [Azure AD] SAMLアプリケーションに追加の設定を行う
- [Azure AD] SAMLアプリケーションをユーザーに割り当てる
- [AWS] IDフェデレーション対象ユーザーをAmazon Connectへ作成する
Step 1: [AWS] Amazon Connectインスタンスの作成時に「SAML 2.0ベースの認証」を選択する
Amazon Connectのユーザーログイン認証の選択肢は、Amazon Connectインスタンスの新規作成時にのみ選択することが可能であり、後で変更することはできません。
Amazon Connectインスタンスの新規作成画面で、最初の「ID管理を設定」で「SAML 2.0ベースの認証」を選択します。
次の画面の「管理者の追加」では「管理者なし」を選択します。
(IDフェデレーションで必要なユーザーの作成は後の手順で行いますので、ここでは作成をスキップします)
これ以降の手順は、通常通りに進めて構いません。
~~~
なお、既存のAmazon Connectインスタンスが、どの認証方式で作成されたのかを確認したい場合は、AWS CLIで以下のコマンドを実行してみてください。
(現在のところマネジメントコンソールでは確認することができないようです)
$ aws connect describe-instance --instance-id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX { "Instance": { "Id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "Arn": "arn:aws:connect:ap-northeast-1:123456789012:instance/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "IdentityManagementType": "SAML", "InstanceAlias": "amazon-connect-saml-example", "CreatedTime": "2022-05-02T18:37:43+09:00", "ServiceRole": "arn:aws:iam::123456789012:role/aws-service-role/connect.amazonaws.com/AWSServiceRoleForAmazonConnect_XXXXXXXXXXXXXXXXXXXX", "InstanceStatus": "ACTIVE", "InboundCallsEnabled": true, "OutboundCallsEnabled": true } }
IdentityManagementType
の値で判別ができます。
CONNECT_MANAGED
: Amazon Connectでユーザーを作成および管理EXISTING_DIRECTORY
: 既存のディレクトリへのリンクSAML
: SAML 2.0ベースの認証
(確認はできますが、前述の通り、インスタンス作成後に認証方式を変更することはできません)
Step 2: [Azure AD] エンタープライズアプリケーション (SAMLシングルサインオン) を作成する
Azureポータルで「Azure Active Directory」を開き、サイドメニューから「エンタープライズアプリケーション」を開きます。
「新しいアプリケーション」をクリックします。
「クラウドプラットフォーム」の中から「Amazon Web Services (AWS)」をクリックします。
「AWS Single-Account Access」をクリックします。
作成するアプリケーションに、分かり易い名前を設定します。(例「Amazon Connect」)
アプリケーションが作成されたことを確認します。
サイドメニューから「シングルサインオン」を選択します。
「シングルサインオン方式の選択」で「SAML」を選択します。
「シングルサインオン設定の保存」ダイアログが表示されるので、「はい」を選択します。
ダイアログを閉じた直後の画面で、「(1) 基本的なSAML構成」の「識別子」「応答URL」の欄がいずれも「https://signin.aws.amazon.com/saml」となっていることを確認してください。
下図のように、一方または両方の欄が設定されていない (「必須」と表示されている) 場合があります。
これは、表示上のみの問題で内部では正しく設定されています。
いったんサイドメニューの「概要」などを選択して、再び「シングルサインオン」を選択すると、正しい表示になります。
「(1) 基本的なSAML構成」の確認ができましたら、「(3) SAML署名証明書」まで下にスクロールします。
「フェデレーションメタデータXML」の右側にある「ダウンロード」をクリックして、XMLファイルをローカルディスクに保存します。
(※ ここで「ダウンロード」が非活性となっていてクリックできない場合は、前述の「(1) 基本的なSAML構成」が正しい表示になっているかどうか確認してください)
Step 3: [AWS] IAMコンソールでIDプロバイダーの設定を行う
AWSマネジメントコンソールで、「IAM」→「IDプロバイダー」を開き、「プロバイダーを追加」をクリックします。
以下の通り情報を入力します。
項目 | 設定値 |
---|---|
プロバイダーのタイプ | 「SAML」を選択 |
プロバイダー名 | 分かり易い名前を入力 (例「AmazonConnect-SAML-AzureAD-IdP」) |
入力後、「メタデータドキュメント」の「ファイルを選択」をクリックして、前ステップでダウンロードしたAzure ADのフェデレーションメタデータファイル (XMLファイル) を指定します。
ファイルのアップロードに成功し、以下のように緑色のチェックマークが表示されることを確認します。
確認後、「プロバイダーを追加」をクリックします。
IDプロバイダーが追加されたことを確認します。
Step 4: [AWS] IDフェデレーション用のIAMポリシーとIAMロールを作成する
AWSマネジメントコンソールで、「IAM」→「ポリシー」を開き、「ポリシーの作成」をクリックします。
ポリシードキュメントをJSONで以下の通り入力します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "connect:GetFederationToken", "Resource": "*", "Condition": { "StringEquals": { "connect:InstanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" } } } ] }
connect:InstanceId
には、Step 1で作成したAmazon Connectインスタンスの「インスタンスID」を指定します。
インスタンスIDは、Amazon Connectインスタンスの「Overview」(アカウントの概要) 画面を開き、「Instance ARN」欄で確認することができます。
(instance/
の後に続くXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
形式の文字列がインスタンスIDです)
IAMポリシー作成の画面に戻ります。
タグは必要に応じて設定します。(画面省略)
最後にポリシー名およびポリシーの説明 (任意) を入力します。
項目 | 設定値 |
---|---|
名前 | 分かり易い名前を入力 (例「AmazonConnect-SAML-AzureAD-Policy」) |
説明 | 任意 (必要に応じて設定) |
続いてIAMロールを作成します。
AWSマネジメントコンソールで、「IAM」→「ロール」を開き、「ロールを作成」をクリックします。
以下の通り情報を入力します。
項目 | 設定値 |
---|---|
信頼されたエンティティタイプ | 「SAML 2.0フェデレーション」を選択 |
SAML 2.0ベースのプロバイダー | 前ステップで作成したIDプロバイダー「AmazonConnect-SAML-AzureAD-IdP」を選択 |
アクセスの種類 | 「プログラムとAWSマネジメントコンソールへのアクセスを許可する」を選択 |
属性 | 自動的に「SAML:aud」が選択される (変更不可) |
値 | 自動的に「https://signin.aws.amazon.com/saml」と入力される (変更不可) |
条件 | 設定しない |
アタッチする許可ポリシーとして、さきほど作成したIAMポリシーを指定します。
項目 | 設定値 |
---|---|
アタッチする許可ポリシー | さきほど作成したIAMポリシー「AmazonConnect-SAML-AzureAD-Policy」を選択 |
最後にロール名およびロールの説明 (任意) を入力します。
項目 | 設定値 |
---|---|
ロール名 | 分かり易い名前を入力 (例「AmazonConnect-SAML-AzureAD-Role」) |
説明 | 任意 (必要に応じて設定) |
Step 5: [Azure AD] SAMLアプリケーションに追加の設定を行う
Azureポータルで「Azure Active Directory」→「エンタープライズアプリケーション」を開きます。
Step 2で作成したアプリケーション「Amazon Connect」を選択します。
サイドメニューから「シングルサインオン」を選択します。
「基本的なSAML構成」の「編集」ボタンをクリックします。
「リレー状態」欄を以下の通り入力します。
項目 | 設定値 |
---|---|
リレー状態 | URL文字列「https://ap-northeast-1.console.aws.amazon.com/connect/federate/<Amazon Connectインスタンスの「インスタンスID」> 」を入力 |
入力後、上部の「保存」をクリックして設定を保存します。
「シングルサインオン」画面に戻り、「属性とクレーム」の「編集」ボタンをクリックします。
「必要な要求」のクレーム一覧から「https://aws.amazon.com/SAML/Attributes/Role」の行をクリックします。
以下の通り情報を入力します。
項目 | 設定値 |
---|---|
名前 | Role (変更不可) |
名前空間 | https://aws.amazon.com/SAML/Attributes (変更不可) |
ソース | 「属性」を選択 (デフォルトのまま) |
ソース属性 | 文字列「<AWSで作成したIDプロバイダーのARN>,<AWSで作成したIAMロールのARN> 」を入力 |
「ソース属性」の設定値の例は以下のようになります。
arn:aws:iam::123456789012:saml-provider/AmazonConnect-SAML-AzureAD-IdP,arn:aws:iam::123456789012:role/AmazonConnect-SAML-AzureAD-Role
入力後、「保存」をクリックして設定を保存します。
Step 6: [Azure AD] SAMLアプリケーションをユーザーに割り当てる
エンタープライズアプリケーション「Amazon Connect」の画面で、サイドメニューから「ユーザーとグループ」を選択します。
「ユーザーまたはグループの追加」をクリックします。
「ユーザー」欄に表示されている「選択されていません」をクリックします。
ユーザーの一覧から、アプリケーションに割り当てたいユーザーをクリックして選択します。
選択したユーザーが「選択したアイテム」欄に追加されたことを確認して、「選択」をクリックします。
「割り当て」をクリックして設定を保存します。
ユーザーの割り当てが追加されたことを確認します。
Step 7: [AWS] IDフェデレーション対象ユーザーをAmazon Connectへ作成する
ここまでの設定によって、SAML 2.0 IDフェデレーションの仕組みを使ってAzure ADでユーザーログイン認証を行う準備ができました。
ユーザーログイン認証はAzure ADで行いますが、ユーザーの実体はAmazon Connect上に必要です。
前ステップでAzure ADの「エンタープライズアプリケーション」に割り当てたユーザーの情報を、当ステップではAmazon Connectの「ユーザー」として作成します。
~~~
Amazon Connectコンソール画面を開きます。
この時点では、まだAmazon Connect上にログイン可能なユーザーが存在しませんので、「Emergency access」のリンクからAmazon Connectコンソールへログインします。
メニューから「ユーザー」→「ユーザー管理」を選択します。
「新しいユーザーの追加」をクリックします。
ユーザーの情報を入力します。
まず、ユーザーの「姓」「名」「ログイン」を入力します。(いずれも必須項目です)
Amazon Connectのユーザー情報と、Azure ADのユーザー情報は、以下のように対応付けられます。
Amazon Connectの項目 | Azure ADの項目 |
---|---|
名 | 名 |
姓 | 姓 |
ログイン | ユーザープリンシパル名 |
これらのうち、「ログイン」=「ユーザープリンシパル名」は必ず一致する必要があります。
「名」「姓」は一致していなくても構いませんが、合わせておかないと管理が面倒になるかもしれません。
続けて、残りの情報を入力します。
- セキュリティプロファイル
- ルーティングプロファイル
- 電話の種類
- 通話の自動着信
- 後処理時間 (ACW) タイムアウト
- エージェント階層
これらは、通常のAmazon Connectユーザーを作成する時と同様に設定してください。
情報の入力後、「保存」をクリックして設定を保存します。
これを繰り返して、必要なユーザーをAmazon Connect上に作成します。
ユーザー情報のエクスポート・インポート
対象のユーザーの数が多い場合、一つずつGUIでユーザーを作成していくのは大変です。
Azure AD側には「ユーザー情報をCSVファイルへエクスポートする機能」、Amazon Connect側には「ユーザー情報をCSVファイルからインポートする機能」がそれぞれ備わっていますので、これらの機能を使えば効率よくユーザー作成が行えるのではないかと思います。
(CSVファイルのフォーマットは各々で異なりますので、エクスポート後にファイルを編集してからインポートする必要があります)
動作確認
これで、全ての設定が終わりました。
動作確認として、Azure ADのユーザーを使ってAmazon Connectへのログオンを行ってみましょう。
Webブラウザで以下のURLへアクセスします。
https://myapps.microsoft.com/
サインイン画面が表示されたら、Azure ADのユーザーを入力します。
パスワードを入力します。
サインインに成功すると、「マイアプリ」画面が表示されます。
ここに「Amazon Connect」アイコンが表示されています。
アイコンをクリックすると、Amazon Connectコンソール画面へ遷移します。
無事、Azure ADと連係したSAML 2.0 IDフェデレーションによって、Amazon Connectへログインできることが確認できました。
補足
上手く行かない場合のトラブルシューティング
一連の設定を行った後、ログインの確認を行った際にエラー等が発生して上手く行かない場合は、AWSドキュメントの下記ページを参照してトラブルシューティングを行うのがよいでしょう。
Amazon Connect での SAML のトラブルシューティング - Amazon Connect
おわりに
今回は、Amazon ConnectでSSOを実現する方法の一つとして、SAML 2.0 IDフェデレーションを使ってAzure ADによるユーザーログイン認証を行う手法について紹介しました。
ユーザーログイン認証をAmazon ConnectではなくAzure ADで行うことにより、以下のようなメリットがあります。
- 資格情報 (パスワード) をAzure ADで一元管理することができる
- 管理者にとっては、初期パスワード設定やパスワードリセット依頼対応などAmazon Connect側で面倒を見る必要が無くなる
- 利用者にとっては、パスワードをAzure ADとAmazon Connectの両方で覚えなくて済む
- Azure AD側で多要素認証 (MFA) などの機能を利用することができるため、セキュリティが向上する
Amazon Connect側でもログイン対象ユーザーを個別に作成しておく必要があるのが難点ですが、それでも、ユーザーを作成した後に「ユーザーへパスワードを連絡」「初期パスワードの変更を促す」・・・といったプロセスが (Amazon Connect側では) 発生しなくなるため、管理コストは大幅に下がるのではないかと思います。
もし「ユーザー数が多くてAmazon Connect側のユーザーを作成するのが大変」という場合は、ユーザー情報のエクスポート・インポートを上手く使うと効率良くユーザー作成が行える可能性があります。
既に企業・組織のユーザー管理をAzure ADで行っているという場合は、導入を検討してみると良いのではないでしょうか。