Amazon Kendra Salesforce Connector V2でハマったポイント

こんにちは!エンジニアの岩間です。

今回は、Amazon Kendra Salesforce Connector V2を使ってSalesforceと連携するときにハマったポイントと解決策についてまとめました。

背景

SalesforceのデータをAWS側で取得して、Bedrockで質問回答するRAGの仕組みを作りたいというのがもともとの目的でした。

Bedrockナレッジベースのデータソース統合(現在Preview版)で良さそうに見えますが、現時点ではSalesforceのカスタムフィールドおよびカスタムオブジェクトが取得できないようです。

他の方法として、Salesforceからレポートをcsvでエクスポートして S3に配置→ナレッジベースにする方法もありますが、データの同期が大変です。

もっといい方法がないか探したところ、Kendra Salesforce Connector V2.0を発見したので使ってみることにしました。

前提

  • SalesforceはDeveloper Editionを使用

手順

基本は公式ドキュメント公式ブログの手順に従って設定します。

上記手順を参考にAmazon Kendra のインデックス、Salesforce のデータソースを作成し、データの同期を行いました。

その際にSalesforceの認証エラーが発生しました。

 

ハマりポイント①:OAuthユーザー名パスワードフローの許可

Salesforce側で「OAuthユーザー名パスワードフローを許可」する必要がありました。

設定 → 検索窓から「OAuth および OpenID Connect 設定」→「OAuthユーザー名パスワードフローを許可」トグルをONにします。

参考:OAuth 2.0 認証エラー

ハマりポイント②:接続アプリケーションの種類

Salesforce側で「外部アプリケーション」ではなく「接続アプリケーション」を作成する必要がありました。

最初は外部クライアントアプリケーション(接続アプリケーションとは別のもの)を作成して「すべてのトークンを調査」を有効にするなど試行錯誤しましたが、調べてみると、外部クライアントアプリケーションではユーザー名パスワードフローがサポートされていないようです。

外部クライアントアプリケーションでは、ユーザー名とパスワードフローはサポートされていません。ユーザー名とパスワードフローを使用する接続アプリケーションを移行する場合、フローは外部クライアントアプリケーションでは機能しません。ユーザー名パスワードフローの代わりに、コード交換の証明鍵 (PKCE) を使用する OAuth 2.0 Web サーバーフロー、または OAuth 2.0 クライアントログイン情報フローを使用することをお勧めします。

Kendraはユーザー名パスワードで認証するので、外部クライアントアプリケーションではダメでした。

引用元:https://help.salesforce.com/s/articleView?id=xcloud.connected_app_to_external_client_app_migration.htm&type=5

正しい作成方法

Lightning Experience アプリケーションマネージャーの画面から「新規外部クライアントアプリケーション」を作成します。

注意ポイント

Salesforceの表示上は「新規外部クライアントアプリケーション」と表示されていますが、これが「接続アプリケーション」を指しており、「外部クライアントアプリケーション」とはまた違います。(私はてっきり同じものだと思っていました汗)

Kendraで使えるのは「接続アプリケーション」の方なので、Lightning Experience アプリケーションマネージャーから作成する必要があります。

AWSの公式ブログにも同様の手順が記載されています。

 

ここで作ったアプリケーションは、「接続アプリケーションを管理する」ページから確認できます。(外部クライアントアプリケーションページからは確認できない)

 

補足:Salesfroceにあるアプリケーションの種類

改めてSalesforceにある接続アプリケーションを整理します。

接続アプリケーション(Connected App)

→従来からあるもの(レガシー)

  • 外部アプリからSalesforceにAPI接続するためのフレームワーク
  • ユーザー名/パスワードフローなど、様々なOAuthフローに対応
  • Kendra接続はこれを使う

 

外部クライアントアプリケーション(External Client App)

→新世代の接続アプリケーション

  • セキュリティ強化版として設計
  • パッケージ化・配布がしやすい
  • ユーザー名/パスワードフローは非対応 ← これがKendra接続で使えなかった理由

 

Salesforceは外部クライアントアプリケーションへの移行を推奨してますが、Kendraのようにパスワードフローが必要な場合は従来の接続アプリケーションを使うしかない、という状況です。

接続アプリケーションと外部クライアントアプリケーションの比較

 

ハマりポイント③:hostUrlの不一致

Secrets Managerで登録するhostUrlと、KendraデータソースのSalesforce URLは一致させる必要があります。

ここがずれているとSalesforceへの認証でエラーになります。

例:

  • Secrets Manager: https://xxx.my.salesforce.com
  • Kendraデータソース: https://xxx.my.salesforce.com ← 一致させる

Tips

AWSコンソールの左メニューから「Search indexed content」を選択すると、インデックスの内容を検索できます。 右の設定アイコンから言語を「Japanese」に変更して検索できます。便利機能です。

 

注意ポイント

Kendraはコストが高いです。

インデックスを作成すると、使わなくても月額$810ほど(12~3万)かかります。検証が終わったら削除を忘れずに行いましょう。

参考:Amazon Kendra 料金

Bedrockとの連携について

東京リージョンでは、現状LambdaでKendraとBedrockを繋ぐ実装が必要そうです。

参考:https://dev.classmethod.jp/articles/amazon-bedrock-kendra-lambda-rag/

また、米国東部 (バージニア北部) と米国西部 (オレゴン) にはKendra GenAI Indexがあり、最初からBedrockと統合されているのですが、日本語のデータソースには対応していないようでした。

まとめ

KendraとSalesforceの連携は情報が少なく、つまづきポイントがいくつかありました。
同じように困っている方の参考になれば嬉しいです!

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ