AmazonConnectとSalesforceのSSOをOktaを利用して実装してみた

## ◆何を作ったのか
* コールセンターのオペレータ等がAmazonConnectとSalesforce両方にログインするのは不便なので、Oktaを利用してSSOにて1回のログインで済む様にしました。

## ◆なぜOkta
* [Okta](https://www.okta.com/)は世界的にはスタンダードなクラウドSSOツールであり、無料トライアルが可能であることから利用しました。(今回はフリートライアル30日版にて作成しました)

## ◆ユーザシナリオ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/e1632c4c-9bdb-68c4-049f-694735220089.png)

①オペレータはOktaにログインします。
②Oktaの画面からAmazonConnectやSalesforceにログイン無しで入ることができます。

## ◆作成手順
AmazonConnectの設定、Salesforceの設定を簡単に記載します。

### **AmazonConnectの設定**

1. AWSでAmazon Connectのインスタンスを作成 【AWS設定】
　まずは、Amazon ConnectのコンソールからOktaと連携する新しいインスタンスを作成します。 ID管理は **SAML 2.0 ベースの認証** を選択してください。（途中で変更できないので注意！！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/9ce312b0-38b1-a0dd-a930-11b32240bc6d.png)
<br>
Amazon Connect インスタンスにユーザーを追加します。AmazonConnectのログイン名とOktaユーザー名を合わせます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/b80e07f4-1e6c-413f-f0fc-8e94a48f7087.png)
<br>

1. Oktaでメタデータを取得【Okta設定】
　Oktaのログイン用URLへアクセスし右上の管理を選択。(場合によってはマルチファクター認証を求められることがありますが、基本は指示に従って設定してください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/d8a6dfac-19d8-402a-4782-d90ab95afa61.png)
　アプリケーションー>Add Applicationで、[Amazon Web Service ]を選択し、Your AWS Login URL にAWSマネジメントコンソールのURLを入力して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/9d696884-13c8-5993-09bd-b9ed2a9d061d.png)
SIGN ON METHODSで[SAML 2.0]を選択し、[Identity Provider Metadata]リンクの内容(xmlファイル)をファイルとしてローカルマシンに保存します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/f478eef9-304f-5f23-13ab-d46a5cb31940.png)
この画面は、この後も使用するので閉じないように注意してください
<br>

1. AWSでOkta用のIAM IDプロバイダーとロールを作成  【AWS設定】
　IAM管理画面から、IDプロバイダを作成します。その際、Oktaで保存したメタデータ(xmlファイル)をアップロードします。
　次に、ロールを作成します。エンティティの種類に[SAML2.0 フェデレーション]、SAMLプロバイダーに追加したIDプロバイダーをそれぞれ選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/f42f0b36-9b58-d392-3794-a88baf893622.png)
特定の Amazon Connect インスタンス内のすべてのユーザーに対してフェデレーションが有効化されるようにアクセス権限を設定します。設定手順は以下を参照
[ID プロバイダーと AWS の間で SAML フェデレーションを有効にする](https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/configure-saml.html#enable-saml-federation)
ポリシーの作成から下記のようにJSONを記載してください。arnの部分はSSOしたいAmazonConnectのarnの末尾に`/user/${aws:userid}`を追記してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/4208e871-6ecb-2f9f-b591-94791879635b.png)
<br>

1. OktaでAmazonConnectへSSOするアプリケーションを設定   【Okta設定】
　Oktaでメタデータを取得で使用した画面に戻って、[Default Relay State]にAmazon Connect インスタンスをポイントするように設定します。
リレーステートに使用する URL は、次のとおりです。

```http
https://region-id.console.aws.amazon.com/connect/federate/instance-id
```

`region-id` を、Amazon Connect インスタンスを作成したリージョン名 (たとえば、米国東部を指す us-east-1) で置き換えます。`instance-id` をAmazonConnectのインスタンス ID で置き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/fa965451-dda7-c8d2-2b13-cccd9fd140ed.png)
[Identity Provider ARN]に、IAM で作成したIDプロバイダーのARNとロールのARNをカンマ区切りで入力して、アプリケーションの設定は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/a6adf41a-b203-807d-0deb-a7ecccd14af1.png)
追加したアプリケーションにユーザを割り当てたら終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/7895fa3d-6e1d-a669-4dc9-0164cc2bd203.png)

### **Salesforce.com を追加**
さらに、Salesforceを追加してみます。<br>

1. Salesforceでマイドメイン・ユーザを追加【SFDC設定】
　`[設定]→[会社の設定]→[私のドメイン]`にて自分のドメインを作成してください。`[設定]→[ユーザインターフェース]→[サイトおよびドメイン]→[ドメイン]`で、ドメイン名を確認できます。
　`[設定]→[ユーザ]→[ユーザ]`にてユーザを追加します。Salesforceのユーザ名とOktaユーザー名は同一としてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/7fd35b22-3537-5564-2ebf-8f2c530f043b.png)
<br>

1. Oktaで証明書を取得【Okta設定】
　アプリケーション追加で、[Salesforce.com]を選択しカスタムドメインに先ほど作成したカスタムドメインを入力して次へ
　SIGN ON METHODSで[SAML 2.0]を選択し、[View Setup Instructions]選択すると新たに画面が起動します。起動元の画面はこの後も使用するので閉じないように注意してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/e079280b-0b50-afa2-13ae-c4511785f320.png)
　起動した画面から、[Identity Provider Certificate]リンクの内容をファイルとしてローカルマシンに保存します。同時に[Issuer], [Identity Provider Login URL], [Custom Logout URL] の値を保存しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/30082225-af22-7a3a-cfc4-997550e37fd0.png)
<br>

1. Salesforceでシングルサインオンの設定【SFDC設定】
　Salseforceの`[設定]>[ID]>[シングルサインオン設定]` 画面で、SAML シングルサインオン構成を新規作成します。
　IDプロバイダ証明書の[ファイルを選択]で、Okataの証明書ファイルを選択します。発行者、IDプロバイダのログインURL、カスタムのログアウトURLに、2)で保存した値をそれぞれ入力し、エンティティIDにはドメイン名（https://【customDomain】.my.salesforce.com）を設定して保存します。
**URLの最後に`/`を入れるとエラーになるので注意してください。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/1c268bf3-fe00-8f87-8a59-adf78ff83594.png)
保存すると、エンドポイントのログインURLが表示されるので値を保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/929751fe-a729-1702-188b-ed888e389631.png)
<br>

1. OktaでSalesforceへSSOするアプリケーションを設定【Okta設定】
　Oktaの画面に戻り、[Login URL]に、先ほど保存したエンドポイントのログインURLを設定して、アプリケーションの設定は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/c3cbd1b5-5324-e9c4-3050-d8cb7ed5303d.png)
追加したアプリケーションにユーザを割り当てたら終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/003ffd2e-9ba6-9192-5054-222215de9ed1.png)
<br>

## ◆完成
　Oktaの自分のURLにログインすると、下記のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339600/0558dc4b-2230-9a27-6511-b1c49f3c414a.png)
　それぞれのアプリ名をクリックするだけでログインできるようになりました！


## 参考にさせていただいたサイト
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/configure-saml.html
https://dev.classmethod.jp/cloud/aws/configure-saml-for-amazon-connect/
https://www.fnifni.net/aws%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%ABokta%E3%81%A7sso%E3%81%99%E3%82%8B/