「Amazon Kendraを使用して、Adobe Experience Managerのコンテンツを賢く検索する」
Smartly search Adobe Experience Manager content using Amazon Kendra.
Amazon Kendraは、機械学習(ML)によって動作する知能型検索サービスです。Amazon Kendraを使用すると、さまざまなコンテンツリポジトリからコンテンツを簡単に集約してインデックス化し、すばやくすべての企業データを検索し、最も正確な回答を見つけることができます。Adobe Experience Manager(AEM)は、ウェブサイトやモバイルアプリのコンテンツ作成に使用されるコンテンツ管理システムです。多くの組織がAdobe Experience Manager(オンプレミス)またはAdobe Experience Manager(クラウドサービス)をコンテンツ管理プラットフォームとして使用しています。エンタープライズユーザーは、AEMなどのエンタープライズ内の複数のデータソースから正確な回答を簡単かつ安全に検索できる必要があります。これには、アセットやページなどのコンテンツが含まれます。
Amazon Kendraのお客様は、Amazon Kendra AEMコネクタを使用してAEMからページやアセットをインデックス化することができます。Amazon Kendraは、AEMクラウドサービスの著者インスタンスとAEMオンプレミスの著者および公開インスタンスをサポートしています。Amazon Kendra AEMオンプレミスまたはクラウドサービスコネクタを使用してAEMのコンテンツをインデックス化し、Amazon Kendraの知能型検索でAEMからデータを検索できます。
この投稿では、Amazon Kendra AEMコネクタを設定してコンテンツをインデックス化し、AEMのアセットやページを検索する方法を紹介します。コネクタは、各ドキュメントのアクセス制御リスト(ACL)情報も取り込みます。ACL情報は、ユーザーがアクセス権を持つドキュメントで絞り込まれた検索結果を表示するために使用されます。
ソリューションの概要
このソリューションでは、Amazon Kendra AEMコネクタを使用してAEMをAmazon Kendra検索インデックスのデータソースとして設定します。構成に基づいてデータソースが同期されると、コネクタは特定の日付以前に作成されたAEMのすべてのコンテンツをクロールしてインデックス化します。コネクタはまた、各メッセージとドキュメントのアクセス制御リスト(ACL)情報もインデックス化します。アクセス制御やユーザーコンテキストのフィルタリングが有効になっている場合、ユーザーによるクエリの検索結果には、ユーザーが読み取り権限を持つドキュメントのみが結果として含まれます。
Amazon Kendra AEMコネクタはAWS IAM Identity Center(AWS Single Sign-Onの後継)と統合できます。最初にIAM Identity Centerを有効にし、アクティブディレクトリからユーザーとグループを同期する組織を作成する必要があります。コネクタは、検索クエリのユーザーコンテキストのためにユーザー名とグループのルックアップを使用します。
前提条件
この投稿を参考にしてAEMのAmazon Kendraコネクタを試すには、次のものが必要です:
- AWSアカウントでAWS Identity and Access Management(IAM)ロールとポリシーを作成する権限が必要です。詳細については、「アクセス管理の概要:アクセス許可とポリシー」を参照してください。
- AWSとAEMの基本的な知識が必要です。詳細については、ユーザー管理とセキュリティを参照してください。
- AEMオンプレミスのセットアップ(バージョン6.5以上)。管理者のユーザー名とパスワードをAWS Secrets Managerに保存します。
OAuth2.0の設定
AEMオンプレミスを使用している場合、Amazon Kendra AEMコネクタの構成を完了するためにOAuth2.0を設定する必要があります。
Adobe Granite OAuth 2.0サーバー実装(com.adobe.granite.oauth.server
)は、AEMでOAuth 2.0サーバー機能をサポートします。
OAuthサーバー認証ハンドラを有効にする
デフォルトでは、AEMはOAuthサーバー認証ハンドラを有効にしません。有効にするには、次の手順を実行してください:
- AEMローカルインスタンスを起動するには、
http://localhost:<port>/system/console/configMgr/com.adobe.granite.oauth.server.auth.impl.OAuth2ServerAuthenticationHandler
に移動します。 - Adobe Granite OAuth Server Authentication Handlerセクションで
jaas.ranking.name
の値を1100に変更し、構成を保存します。
OAuthサーバー認証ハンドラが有効になりました。
OAuthクライアントの登録
すべての外部アプリケーションはAEMでOAuth認証としてOAuthクライアントとして登録する必要があります。OAuthクライアントを登録するには、以下の手順を完了してください:
- AEMのスタートページでセキュリティとOAuthクライアントを選択します。
- 名前とリダイレクトURIを入力します。
- 保存を選択します。
アプリケーションの正常な認証後、OAuthサーバーは構成されたリダイレクトURLへの認証コードを含むアプリケーションにリダイレクトします。
- クライアントIDとクライアントシークレットをコピーして安全な場所に保存してください。
Granite OAuthサーバーは以下のグラントタイプをサポートしています:
- 認証コード
- リフレッシュトークン
- JWTベアラトークン
この記事では、JWTグラントタイプを使用したOAuth2.0を使用します。
JWTベアラトークンは主にサーバー間の統合に使用されます。これにより、ユーザーの対話なしでサーバー間の統合を有効にすることができます。たとえば、ユーザーの対話なしでファイルの取得やアップロードを行うことができます。
JWTトークンの生成
JWTトークンを生成するには、以下の手順を完了してください:
- localhostとOAuthクライアントに移動します。
- プライベートキーのダウンロードを選択します。
- ダウンロードを選択します。
公開証明書の生成
ダウンロードしたプライベートキーから公開証明書を生成し、次のコマンドを実行してプライベートキーパスワードを入力します。
次のコマンドを使用してプライベートキーを生成します:openssl pkcs12 -in store.p12 -out store.crt.pem -clcerts -nokeys
プライベートキーを抽出します:
openssl pkcs12 -in store.p12 -passin pass:notasecret -nocerts -nodes -out store.private.key.txt
事前にopenssl
をインストールして環境パスに追加する必要があります。
Amazon Kendraデータソースを設定する際にプライベートキーを使用する前に、コード内の“-----BEGIN PRIVATE KEY-----”
および“-----END PRIVATE KEY-----“
を使用しないようにし、プライベートキーから空白スペースを削除してください。
生成されたClientId
、ClientSecret
、およびプライベートキーを使用してAmazon Kendra AEMデータソースを設定します。
OAuthクライアントの登録には、http://localhost:<port>/libs/granite/oauth/content/clients.html
に移動します。
SSLの設定
SSLの設定手順を完了するには、以下の手順を実行してください:
- キーを作成します:
openssl genrsa -aes256 -out <keyFileName>.key 4096
- キーを暗号化します:
openssl req -sha256 -new -key <keyFileName>.key -out <keyFileName>.csr -subj '/CN=<keyFileName>'
- キーに署名する:
openssl x509 -req -days 365 -in <keyFileName>.csr -signkey <keyFileName>.key -out <keyFileName>.crt
- プライベートキーをDER形式にエンコードする:
openssl pkcs8 -topk8 -inform PEM -outform DER -in <keyFileName>.key -out <keyFileName>.der -nocrypt
4つのファイルが生成され、ファイル名は<keyFileName>で始まります。後の手順で<keyFileName>.crtと<keyFileName>.derを使用します。
- 次に、AEMにログインします。URLは
http://localhost:<port>/aem/start.html
です。 - ツール、セキュリティ、SSL設定を選択します。
- ストアの資格情報セクションで、キーストアとトラストストアのパスワードを入力します。
- キーと証明書セクションで、プライベートキーには.derファイル、証明書には.crtファイルを指定します。
- 次のセクションで、ドメイン(
localhost
)を入力し、ポートはそのままにします。 - 完了を選択します。
AEMは指定した新しいポートで開きます。例:https://localhost:8443
- HTTPSを使用してAEMにログインし、ブラウザで証明書をロック/パッドボタンを使用してダウンロードし、証明書をエクスポートし、
privateKey.crt
と名前を付けます。
それでは、キーツールを使用してキーストアパスに証明書をインポートしましょう。
- ターミナルを開き、
privateKey.crt
が存在するフォルダの場所に移動し、次のコマンドを実行します:
keytool -import -trustcacerts -keystore <JAVA_HOME>/lib/security/cacerts -storepass changeit -noprompt -alias yourAliasName -file privateKey.crt
ファイアウォール設定で8443ポートと80ポートを開いていることを確認してください。
- 証明書
privateKey.crt
をAmazon Simple Storage Service(Amazon S3)バケットに追加します。
Amazon Kendraコネクタを使用してデータソースを設定する
AEMコネクタを使用してAEMからドキュメントをインデックス化するために既存のインデックスを使用するか、新しいインデックスを作成できます。その後、次の手順を完了します。詳細については、Amazon Kendra Developer Guideを参照してください。
- Amazon Kendraコンソールで、インデックスを開き、ナビゲーションペインでデータソースを選択します。
- データソースの追加を選択します。
- Adobe Experience Managerの下で、コネクタの追加を選択します。
- データソースの詳細を指定セクションで、名前とオプションで説明を入力し、次へを選択してください。
- アクセスとセキュリティの定義セクションで、AEM On-PremiseまたはAEM as a Cloud Serviceのソースタイプを選択し、AEMホストURLを入力してください。AEMの設定でURLを確認できます。
AEM On-Premiseを使用する場合は、AEM On-PremiseサーバーのホストURLを入力してください。その後、Browse S3を選択し、SSL証明書を持つS3バケットを選択してください。
AEM as a Cloud Serviceを使用する場合、著者URL https://author-xxxxxx-xxxxxxx.adobeaemcloud.com
を使用できます。
- 認証の下には、基本認証とOAuth 2.0認証の2つのオプションがあります。
基本認証を選択した場合は、AWS Secrets Managerシークレットで新しいシークレットを作成して追加を選択してください。その後、シークレットの名前、AEMサイトのユーザー名、パスワードを入力してください。ユーザーは管理者権限を持っているか、管理者ユーザーである必要があります。
OAuth 2.0認証を選択した場合は、AWS Secrets Managerシークレットで新しいシークレットを作成して追加を選択してください。シークレットの名前、クライアントID、クライアントシークレット、プライベートキーを入力してください。AEM as a Cloud Serviceを使用する場合は、シークレットの名前、クライアントID、クライアントシークレット、プライベートキー、組織ID、技術アカウントID、Adobe Identity Management System (IMS)ホストを入力してください。
- 保存またはシークレットの追加を選択してください。
- VPCおよびセキュリティグループの構成セクションでは、VPCを使用するかどうかを選択できます。使用する場合は、サブネットとVPCセキュリティグループを追加する必要があります。
- Identity crawlerセクションで、特定のドキュメントへのアクセス権を持つユーザーとグループのアイデンティティ情報をクロールし、これをAmazon Kendraプリンシパルまたはアイデンティティストアに保存するかどうかを選択してください。
これにより、ユーザーまたはユーザーグループがドキュメントへのアクセス権に基づいて検索結果をフィルタリングすることができます。
- IAMセクションで、新しいIAMロールを作成するか、既存のIAMロールを選択してリポジトリの資格情報とコンテンツにアクセスしてください。
- 次へを選択してください。
- 同期設定の構成セクションで、同期の範囲に関する情報を提供します。
包含パターンを使用してクロール対象のファイルを含めるか、除外パターンを使用して除外することができます。 包含パターンセクションにパターンを指定すると、そのパターンに一致するドキュメントのみがクロールされます。 除外パターンセクションにパターンを指定すると、そのパターンに一致するドキュメントはクロールされません。
- AEMオンプレミスを使用していて、サーバーのタイムゾーンがAmazon Kendra AEMコネクタまたはインデックスのタイムゾーンと異なる場合、タイムゾーンIDセクションでサーバーのタイムゾーンを指定することができます。
AEMオンプレミスのデフォルトのタイムゾーンは、Amazon Kendra AEMコネクタまたはインデックスのタイムゾーンです。 AEM as a Cloud Serviceのデフォルトのタイムゾーンはグリニッジ標準時です。
- 同期モードを選択します(このポストではフル同期を選択します)。
フル同期オプションを使用すると、同期が実行されるたびに、Amazon Kendraはすべてのドキュメントをクロールし、各ドキュメントを以前にインジェストされたものでもインジェストします。 フルリフレッシュにより、Amazon Kendraインデックスを削除して新しいデータソースを作成する必要なく、インデックスをリセットすることができます。 新規または変更されたコンテンツの同期または新規、変更、または削除されたコンテンツの同期を選択する場合、同期ジョブが実行されるたびに、前回のクロール以降に追加、変更、または削除されたオブジェクトのみが処理されます。 インクリメンタルクロールは、定期的に既存のデータソースに新しいオブジェクトを追加するデータセットと組み合わせて使用すると、実行時間とコストを削減するのに役立ちます。
- 同期実行スケジュールには要求に応じて実行を選択します。
- 次へを選択します。
- フィールドマッピングの設定セクションでは、Amazon Kendraが生成したデフォルトのデータソースフィールドからインデックスにマッピングするフィールドをオプションで選択できます。 カスタムデータソースフィールドを追加するには、フィールドの追加を選択して、マッピングするインデックスフィールド名とフィールドデータ型を作成します。 AEMフィールド名、インデックスフィールド名、およびデータ型を指定します。
- 次へを選択します。
- 設定を確認し、データソースを追加を選択します。
- データソースが追加されたら、ナビゲーションペインでデータソースを選択し、新しく追加したデータソースを選択して、Amazon Kendraインデックスとのデータソース同期を開始するために今すぐ同期を選択します。
同期プロセスは、クロールするデータの量によって異なります。
では、Amazon Kendraインデックスのアクセス制御を有効にしましょう。
- ナビゲーションペインで、インデックスを選択します。
- ユーザーアクセス制御タブで、設定を編集を選択します。
- 設定を以下のスクリーンショットのように変更します。
- 次へを選択します。
- 更新を選択します。
変更によってインデックスが更新されるまで数分お待ちください。では、Amazon Kendraを使用してインテリジェントな検索を行う方法を見てみましょう。
Amazon Kendraを使用したインテリジェントな検索を行う
Amazon Kendraコンソールで検索を試す前に、データソースの同期が完了していることを確認してください。確認するには、データソースを表示し、前回の同期が成功したかどうかを確認します。
それでは、インデックスを検索する準備が整いました。
- Amazon Kendraコンソールで、インデックスに移動し、ナビゲーションペインでインデックスされたコンテンツを検索を選択します。
- アクセストークンを指定せずに、「シベリアの熱波の影響は何でしたか?」というクエリを使用してインデックスをクエリします。
インデックスのアクセス制御設定に基づいて、ユーザーが表示することが許可されているコンテンツにアクセスするには、有効なアクセストークンが必要です。したがって、ユーザー名やグループを設定せずにこの検索クエリを使用すると、結果は返されません。
- 次に、トークンを適用を選択し、AEMコンテンツへのアクセス権を持つユーザー名またはユーザーの電子メールID(例:
[email protected]
)を設定します。
AEMデータソースをクロールする際、コネクタはユーザーの電子メールIDをプリンシパルとして設定します。ユーザーの電子メールIDが利用できない場合は、ユーザー名がプリンシパルとして設定されます。
次のスクリーンショットは、ユーザーの電子メールID [email protected]
をプリンシパルとして設定した例です。
次の例では、ユーザー名 user-dev-2
をプリンシパルとして設定しました。
- さて、前のクエリ結果に表示された特定のドキュメントを表示する権限を持たない
[email protected]
ユーザーのトークンを使用して同じコンテンツを検索してみましょう。
これにより、Amazon Kendra AEMコネクタによって取り込まれたドキュメントは、AEMによって設定されたACLを尊重し、同じACLが適用されたトークンに基づいて検索結果に強制されることが確認されます。
クリーンアップ
将来の費用を発生させないために、このソリューションの一部として作成したリソースをクリーンアップしてください。このソリューションのテスト中に新しいAmazon Kendraインデックスを作成した場合は、それを削除してください。Amazon Kendraコネクタを使用して新しいデータソースのみを追加した場合は、そのデータソースを削除してください。
結論
Amazon Kendra Adobe Experience Managerコネクタを使用すると、組織はAmazon Kendraのパワーを活用したインテリジェントな検索を使用して、ページやアセットを安全に検索することができます。
Amazon Kendraコネクタ for AEMの詳細については、Adobe Experience Managerを参照してください。
人気のあるデータソースに対する他のAmazon Kendra組み込みコネクタの詳細については、Amazon Kendraネイティブコネクタを参照してください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 「Amazon SageMakerの非同期エンドポイントを使用して、Amazon SageMaker JumpStartの基礎モデルのデプロイコストを最適化する」
- 「キャリアは、AWS GlueとAmazon SageMakerを使用してHVACの故障を予測する方法」
- 「Amazon SageMaker JumpStart上で、生成型AIベースのコンテンツモデレーションソリューションを構築する」
- 「メタヒューリスティクスの説明:アントコロニーオプティマイゼーション」
- 2023年9月のトップAIメールアシスタント
- 「トップAIベースのアートインペインティングツール」
- FMOps / LLMOps:生成型AIの運用化とMLOpsとの違い