【Amazon Connect Salesforce CTI Adapter】セールスフォースをIdPとしてAmazon ConnectへSSOする設定

記事タイトルとURLをコピーする

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 ベースの認証] を選択します。

※アカウント管理方法はインスタンス作成時のみ指定可能です。作成後の変更はできません。

f:id:swx-shinsaka:20220303184132p:plain

次のステップで管理者は作成せず、それ以外はデフォルト設定でインスタンス作成しました。

後のステップで使用するため、作成完了後、インスタンスARNをコピーしておきます。

f:id:swx-shinsaka:20220304123911p:plain

CTI Adapter for Salesforce をインストール

対象となるセールスフォース組織へCTI Adapter for Salesforceをインストールします。
下記リンクより手順を参照して設定します。

amazon-connect.github.io

Amazon Connect、AWS、Salesforceと連携する設定となるため、すこし難易度が高いかもしれません。
注意点について記載した下記記事もご参照ください。
(CTIアダプター自体のアップデートも多いため、最新情報にご注意ください)

blog.serverworks.co.jp

設定完了後、CTIソフトフォンの動作を確認します。
Amazon Connect内部でのユーザー管理を設定してる場合はCTI部分から[CCPへのサインイン]を選択すると、ポップアップウィンドウ上にログインフォームが表示されます。
今回はSAML2.0ベースの認証を選択しているため、(この時点では)ログインフォームは表示されず、下記のように Session expired 表示となります。

f:id:swx-shinsaka:20220303191731p:plain

セールスフォースのIDプロバイダ設定

設定ページ→ [IDプロバイダ] → [IDプロバイダを有効化] をクリックします。

f:id:swx-shinsaka:20220304120623p:plain

証明書選択ページへ遷移します。 [保存] をクリックします。

f:id:swx-shinsaka:20220304121054p:plain

続いて [メタデータのダウンロード] をクリックします。
XMLファイルがダウンロードされます。次のステップで使用するため、ファイルを保存しておきます。

f:id:swx-shinsaka:20220304121304p:plain

AWS側でIDプロバイダ、ポリシー、ロールを設定します

AWSマネジメントコンソールのIAMページより、[IDプロバイダ] へアクセスします。
[プロバイダを追加] をクリックし、下記のように指定、 [プロバイダを追加] をクリックします。

項目 指定内容
プロバイダのタイプ SAML
プロバイダ名 SalesforceConnectProvider
メタデータドキュメント 前の手順でダウンロードしたメタデータXMLファイルを指定

f:id:swx-shinsaka:20220304122354p:plain

[ロールの割り当て] → [新しいロールを作成] と操作します。

f:id:swx-shinsaka:20220304122807p:plain

[信頼されたエンティティを選択] ページでは下記のように指定します。
[次へ] をクリックします。

項目 指定内容
信頼されたエンティティタイプ SAML 2.0 フェデレーション
SAML 2.0 ベースのプロバイダー SalesforceConnectProvider
プログラムとAWSマネジメントコンソールへのアクセスを許可する 選択

f:id:swx-shinsaka:20220304123320p:plain

[許可を追加] ページでは [ポリシーの作成] をクリックします。
新しいブラウザタブが開きます。

f:id:swx-shinsaka:20220304123538p:plain

[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 を指定し、[ポリシーの作成] をクリックします。

f:id:swx-shinsaka:20220304124712p:plain

ポリシー作成完了後、ブラウザタブを閉じ、ロール作成タブを表示します。
作成したポリシー SalesforceConnectPolicy を選択し、[次へ] をクリックします。

f:id:swx-shinsaka:20220304125112p:plain

ロール名に SalesforceConnectRole を指定し、[ロールを作成] をクリックします。

f:id:swx-shinsaka:20220304125515p:plain

IDプロバイダ、ロールのARNを確認

後のステップで使用するため、IDプロバイダとロールのARNを確認しておきます。

IDプロバイダのARN

AWSマネジメントコンソールのIAMページより、[IDプロバイダ] へアクセスします。
上記手順で作成した SalesforceConnectProvider のページを開き、ARNをコピーします。

f:id:swx-shinsaka:20220304132754p:plain

ロールのARN

AWSマネジメントコンソールのIAMページより、[ロール] へアクセスします。
上記手順で作成した SalesforceConnectRole のページを開き、ARNをコピーします。

f:id:swx-shinsaka:20220304133135p:plain

セールスフォース接続アプリケーションの作成

設定ページ→ [アプリケーションマネージャ] → [新規接続アプリケーション] をクリックします。

f:id:swx-shinsaka:20220304130422p:plain

[新規接続アプリケーション] → [基本情報] 部分を下記のように指定します。

項目 指定内容
接続アプリケーション名 AmazonConnectSAML
API参照名 AmazonConnectSAML (自動的に接続アプリケーション名と同じ内容が入力されます)
取引先責任者メール メールアドレスを入力します

f:id:swx-shinsaka:20220304130734p:plain

[Webアプリケーション設定] 部分を下記のように指定し、[保存] をクリックします。

項目 指定内容
SAMLの有効化 チェック
エンティティID SalesforceConnectProvider (AWS側のIDプロバイダー名と同じ値を設定)
ACS URL https://signin.aws.amazon.com/saml
件名種別 永続ID
その他の項目 デフォルト値のまま

f:id:swx-shinsaka:20220304131047p:plain

接続アプリケーションが作成、表示されます。 [カスタム属性] 部分の [新規] をクリックします。

f:id:swx-shinsaka:20220304131541p:plain

下記のように指定し、[保存] をクリックします。

項目 指定内容
キー 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つのカスタム属性が設定されます。

f:id:swx-shinsaka:20220304133543p:plain

接続アプリケーションページの [Manage] をクリックします。

f:id:swx-shinsaka:20220304133712p:plain

後のステップで使用するため、[SAML ログイン情報] 部の [Idp-init のログインURL] をコピーします。

f:id:swx-shinsaka:20220304133951p:plain

続いて、[プロファイル] 部の[プロファイルを管理する] をクリックし、使用するプロファイルを追加します。
ここでは システム管理者 プロファイルを指定しています。

f:id:swx-shinsaka:20220304134146p:plain

確認

Idp-initのURLへアクセスし、フェデレーションユーザーとしてAWSマネジメントコンソールへアクセスできることを確認します。

f:id:swx-shinsaka:20220304134720p:plain

Amazon Connect ユーザーを作成

AWSマネジメントコンソールの対象となるAmazon Connectインスタンスページから [Log in emergency access] をクリックし、管理者権限でログインします。

f:id:swx-shinsaka:20220304155140p:plain

サイドメニューから [ユーザー管理] → [新しいユーザーの追加] をクリックします。

ユーザー情報を入力しますが、注意点はログイン名部分です。
ここはセールスフォースユーザーのメール項目の値と一致させます。

f:id:swx-shinsaka:20220304155955p:plain

f:id:swx-shinsaka:20220304155807p:plain

※ ここまでの設定で 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

実際に入力したイメージは下記のようになります。
入力し、[保存]します。

f:id:swx-shinsaka:20220304170751p:plain

動作確認

ブラウザをリロードしても良いのですが、ここまで設定作業をしていたブラウザですと、AWSやAmazon Connect、セールスフォースのログイン状態が残っている場合がありますので、別のブラウザ、または、Chromeブラウザであれば、プロファイル切り替え機能を利用し、キレイな状態での確認をオススメします。

下記手順で確認します。

  • Salesforce へログイン
  • CTIウィンドウを開く
  • [CCPへのサインオン] をクリック
  • 別ウィンドウがポップアップし、Amazon Connectへ自動でログイン
  • ウィンドウは自動で閉じ、セールスフォース画面内のCTIで通話可能になります

動作の様子を動画にしました。

youtu.be

補足

今回はセールスフォースユーザーのメールアドレスとAmazon Connectのユーザー名を関連付けましたが、ユーザーを一意に識別できる内容であれば他の項目を指定することも可能です。

たとえば、SAMLログインを定義した接続アプリケーションのカスタム属性 https://aws.amazon.com/SAML/Attributes/RoleSessionName の値を $User.Username とすればセールスフォースのユーザ名をAmazon Connectのユーザー名とマッチさせる設定となります。
ユーザーID(005で始まるセールスフォースID)を使えば確実に一意な値となりそうですし、ユーザー名の変更を見越すのであれば、キチンと運用設計した上で、他の項目やカスタム項目を指定することも可能です。

f:id:swx-shinsaka:20220304184543p:plain

また、極端な例かもしれませんが、ひとつのAmazon Connectインスタンスに対して複数のセールスフォース組織から接続することも可能ですね。(この場合は組織をまたぐことを意識したID設計が必要になります)

最後に

複数のサービスを組み合わせてシステム利用する場合、ログイン操作が増えがちですが、SSO設定によってスマートに利用できるかと思います。

少しマニアックな内容ではありますが、ご参考になれば幸いです。