Amazon Connectのユーザーアカウント管理方法として、セールスフォースのアカウントと連携し、シングルサインオン(SSO)する手順を紹介します。
セールスフォースのユーザーアカウントとAmazon Connectのユーザーを関連付けることで、セールスフォースへログインしていれば、簡単にAmazon Connectへもログインすることができます。
Amazon Connect CTI Adapter for Salesforce によってAmazon Connectとセールスフォースを統合する場合に有効な設定になります。
環境
今回は下記のような環境で設定を試します。
- Salesforce Developer Edition
- Amazon Connect CTI Adapter for Salesforce v5.18
設定手順
Amazon Connect インスタンスを作成
Amazon Connectインスタンスを作成する際、[SAML 2.0 ベースの認証] を選択します。
※アカウント管理方法はインスタンス作成時のみ指定可能です。作成後の変更はできません。
次のステップで管理者は作成せず、それ以外はデフォルト設定でインスタンス作成しました。
後のステップで使用するため、作成完了後、インスタンスARNをコピーしておきます。
CTI Adapter for Salesforce をインストール
対象となるセールスフォース組織へCTI Adapter for Salesforceをインストールします。
下記リンクより手順を参照して設定します。
Amazon Connect、AWS、Salesforceと連携する設定となるため、すこし難易度が高いかもしれません。
注意点について記載した下記記事もご参照ください。
(CTIアダプター自体のアップデートも多いため、最新情報にご注意ください)
設定完了後、CTIソフトフォンの動作を確認します。
Amazon Connect内部でのユーザー管理を設定してる場合はCTI部分から[CCPへのサインイン]を選択すると、ポップアップウィンドウ上にログインフォームが表示されます。
今回はSAML2.0ベースの認証を選択しているため、(この時点では)ログインフォームは表示されず、下記のように Session expired
表示となります。
セールスフォースのIDプロバイダ設定
設定ページ→ [IDプロバイダ] → [IDプロバイダを有効化] をクリックします。
証明書選択ページへ遷移します。 [保存] をクリックします。
続いて [メタデータのダウンロード] をクリックします。
XMLファイルがダウンロードされます。次のステップで使用するため、ファイルを保存しておきます。
AWS側でIDプロバイダ、ポリシー、ロールを設定します
AWSマネジメントコンソールのIAMページより、[IDプロバイダ] へアクセスします。
[プロバイダを追加] をクリックし、下記のように指定、 [プロバイダを追加] をクリックします。
項目 | 指定内容 |
---|---|
プロバイダのタイプ | SAML |
プロバイダ名 | SalesforceConnectProvider |
メタデータドキュメント | 前の手順でダウンロードしたメタデータXMLファイルを指定 |
[ロールの割り当て] → [新しいロールを作成] と操作します。
[信頼されたエンティティを選択] ページでは下記のように指定します。
[次へ] をクリックします。
項目 | 指定内容 |
---|---|
信頼されたエンティティタイプ | SAML 2.0 フェデレーション |
SAML 2.0 ベースのプロバイダー | SalesforceConnectProvider |
プログラムとAWSマネジメントコンソールへのアクセスを許可する | 選択 |
[許可を追加] ページでは [ポリシーの作成] をクリックします。
新しいブラウザタブが開きます。
[JSON] タブを選択し、下記の内容に変更します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "connect:GetFederationToken", "Resource": [ "**YOUR ARN**/user/${aws:userid}" ] } ] }
JSON内の **YOUR ARN**
部分を対象とするConnectインスタンスARNに書き換えます。
[次のステップ] をクリックし、タグを追加ページでさらに[次のステップ] をクリックします。
ポリシーの名前に SalesforceConnectPolicy
を指定し、[ポリシーの作成] をクリックします。
ポリシー作成完了後、ブラウザタブを閉じ、ロール作成タブを表示します。
作成したポリシー SalesforceConnectPolicy
を選択し、[次へ] をクリックします。
ロール名に SalesforceConnectRole
を指定し、[ロールを作成] をクリックします。
IDプロバイダ、ロールのARNを確認
後のステップで使用するため、IDプロバイダとロールのARNを確認しておきます。
IDプロバイダのARN
AWSマネジメントコンソールのIAMページより、[IDプロバイダ] へアクセスします。
上記手順で作成した SalesforceConnectProvider
のページを開き、ARNをコピーします。
ロールのARN
AWSマネジメントコンソールのIAMページより、[ロール] へアクセスします。
上記手順で作成した SalesforceConnectRole
のページを開き、ARNをコピーします。
セールスフォース接続アプリケーションの作成
設定ページ→ [アプリケーションマネージャ] → [新規接続アプリケーション] をクリックします。
[新規接続アプリケーション] → [基本情報] 部分を下記のように指定します。
項目 | 指定内容 |
---|---|
接続アプリケーション名 | AmazonConnectSAML |
API参照名 | AmazonConnectSAML (自動的に接続アプリケーション名と同じ内容が入力されます) |
取引先責任者メール | メールアドレスを入力します |
[Webアプリケーション設定] 部分を下記のように指定し、[保存] をクリックします。
項目 | 指定内容 |
---|---|
SAMLの有効化 | チェック |
エンティティID | SalesforceConnectProvider (AWS側のIDプロバイダー名と同じ値を設定) |
ACS URL | https://signin.aws.amazon.com/saml |
件名種別 | 永続ID |
その他の項目 | デフォルト値のまま |
接続アプリケーションが作成、表示されます。 [カスタム属性] 部分の [新規] をクリックします。
下記のように指定し、[保存] をクリックします。
項目 | 指定内容 |
---|---|
キー | https://aws.amazon.com/SAML/Attributes/RoleSessionName |
値 | $User.Email |
再度接続アプリケーションページが表示されます。 もう一度 [カスタム属性] 部分の [新規] をクリックします。
ここではAWS側で設定したプロバイダIDのARNとロールARNが必要になります。
下記のように指定し、[保存] をクリックします。
項目 | 指定内容 |
---|---|
キー | https://aws.amazon.com/SAML/Attributes/Role |
値 | 'プロバイダIDのARN'&','&'ロールのARN' |
値部分は少し分かりにくいのですが、具体的には下記のような文字列になります。
'arn:aws:iam::123456789012:saml-provider/SalesforceConnectProvider'&','&'arn:aws:iam::123456789012:role/SalesforceConnectRole'
2つのカスタム属性が設定されます。
接続アプリケーションページの [Manage] をクリックします。
後のステップで使用するため、[SAML ログイン情報] 部の [Idp-init のログインURL] をコピーします。
続いて、[プロファイル] 部の[プロファイルを管理する] をクリックし、使用するプロファイルを追加します。
ここでは システム管理者
プロファイルを指定しています。
確認
Idp-initのURLへアクセスし、フェデレーションユーザーとしてAWSマネジメントコンソールへアクセスできることを確認します。
Amazon Connect ユーザーを作成
AWSマネジメントコンソールの対象となるAmazon Connectインスタンスページから [Log in emergency access] をクリックし、管理者権限でログインします。
サイドメニューから [ユーザー管理] → [新しいユーザーの追加] をクリックします。
ユーザー情報を入力しますが、注意点はログイン名部分です。
ここはセールスフォースユーザーのメール項目の値と一致させます。
※ ここまでの設定で https://aws.amazon.com/SAML/Attributes/RoleSessionName
として $User.Email
を指定しました。これはセールスフォースへログインしているユーザーのメールアドレスを示しています。従いまして、メールアドレスとAmazon Connectユーザーのログイン名をマッチさせる必要があります。
CTI Adapter側のSSO設定
セールスフォースの [AC CTI アダプタ]オブジェクト、[ACLightningAdapter]レコードページを開き、[Single SignOn(SSO)] 部分、 [SSO URL] と [SSO リレー状態] を指定します。
SSO URL
ここまでの手順で、セールスフォース接続アプリケーション「AmazonConnectSAML」を設定しました。
その際控えていた [Idp-init のログインURL] を使用します。
https://sfdcorgname-dev-ed.my.salesforce.com/idp/login?app=xxxxxyyyyyzzzz
のような文字列になっていると思いますが、下記のように、先頭から ?
の前(つまり login
)までを SSO URL として指定します。
https://sfdcorgname-dev-ed.my.salesforce.com/idp/login
SSO リレー状態
まず、[Idp-init のログインURL] の app=
以降を抜き出します。 上記の場合は app=xxxxxyyyyyzzzz
です。
次に、下記の文字列をベースに インスタンスID
部分を書き換えます。
&RelayState=https://ap-northeast-1.console.aws.amazon.com/connect/federate/インスタンスID?destination=%2Fconnect%2Fccp
インスタンスIDは対象Amazon ConnectインスタンスのARNから取得できます。
インスタンスARN が arn:aws:connect:ap-northeast-1:123456789012:instance/11111111-xxxx-yyyy-zzzz-555555555555
の場合は instance/
の次の文字から末尾まで、 11111111-xxxx-yyyy-zzzz-555555555555
がインスタンスIDです。
最後に上記2つの文字列を結合します。この場合は下記のようになります。
app=xxxxxyyyyyzzzz&RelayState=https://ap-northeast-1.console.aws.amazon.com/connect/federate/11111111-xxxx-yyyy-zzzz-555555555555?destination=%2Fconnect%2Fccp
実際に入力したイメージは下記のようになります。
入力し、[保存]します。
動作確認
ブラウザをリロードしても良いのですが、ここまで設定作業をしていたブラウザですと、AWSやAmazon Connect、セールスフォースのログイン状態が残っている場合がありますので、別のブラウザ、または、Chromeブラウザであれば、プロファイル切り替え機能を利用し、キレイな状態での確認をオススメします。
下記手順で確認します。
- Salesforce へログイン
- CTIウィンドウを開く
- [CCPへのサインオン] をクリック
- 別ウィンドウがポップアップし、Amazon Connectへ自動でログイン
- ウィンドウは自動で閉じ、セールスフォース画面内のCTIで通話可能になります
動作の様子を動画にしました。
補足
今回はセールスフォースユーザーのメールアドレスとAmazon Connectのユーザー名を関連付けましたが、ユーザーを一意に識別できる内容であれば他の項目を指定することも可能です。
たとえば、SAMLログインを定義した接続アプリケーションのカスタム属性 https://aws.amazon.com/SAML/Attributes/RoleSessionName
の値を $User.Username
とすればセールスフォースのユーザ名をAmazon Connectのユーザー名とマッチさせる設定となります。
ユーザーID(005で始まるセールスフォースID)を使えば確実に一意な値となりそうですし、ユーザー名の変更を見越すのであれば、キチンと運用設計した上で、他の項目やカスタム項目を指定することも可能です。
また、極端な例かもしれませんが、ひとつのAmazon Connectインスタンスに対して複数のセールスフォース組織から接続することも可能ですね。(この場合は組織をまたぐことを意識したID設計が必要になります)
最後に
複数のサービスを組み合わせてシステム利用する場合、ログイン操作が増えがちですが、SSO設定によってスマートに利用できるかと思います。
少しマニアックな内容ではありますが、ご参考になれば幸いです。