世界的に、多くの組織が重要なビジネス データをさまざまなコンテンツ リポジトリに分散させているため、この情報に合理的かつまとまった方法でアクセスすることが困難になっています。 各リポジトリにはさまざまなドキュメント形式とアクセス制御メカニズムが含まれているため、統一された安全な検索エクスペリエンスを作成することは、組織にとって大きな課題です。
アマゾンケンドラ は、ユーザーがさまざまなコンテンツ リポジトリを検索できるインテリジェントなエンタープライズ検索サービスです。 お客様は、検索アプリケーションへのアクセス権を取得するためにユーザーを認証および許可する責任があります。Amazon Kendra は、エンタープライズ アプリケーションの安全な検索を可能にし、ユーザーの検索クエリの結果に、ユーザーが読み取りを許可されているドキュメントのみが含まれるようにします。 Amazon Kendra は、安全な検索トークンを追加して、検索を実行する個々のユーザーとユーザー グループの ID を簡単に検証できます。 安全な検索のためにユーザートークンを追加することで、Amazon Kendra でのアクセスベースのフィルター検索の実行が簡素化され、安全になります。 これを実現するために属性フィルターを使用する代わりに、クエリ ペイロードでユーザー アクセス情報を安全に渡すことができます。 この機能により、Amazon Kendra はトークン情報を検証し、それを検索結果に自動的に適用して、正確で安全なアクセスベースのフィルタリングを行うことができます。
Amazon Kendra は、次のトークン タイプを使用したトークンベースのユーザー アクセス制御をサポートしています。
- オープンID
- 共有シークレットを使用した JWT
- 公開鍵を使用した JWT
- JSONの
以前、デモンストレーションを見ました。 Open ID を使用した Amazon Kendra でのトークンベースのユーザー アクセス制御. この投稿では、共有シークレットを使用した JWT を使用した Amazon Kendra でのトークンベースのユーザー アクセス制御について説明します。 JWT (JSON Web Token) は、クライアントとサーバー間でセキュリティ情報を共有するために使用されるオープン スタンダードです。 これには、一連のクレームを含む、エンコードされた JSON オブジェクトが含まれています。 JWT は暗号化アルゴリズムを使用して署名され、トークンの発行後にクレームが変更されないようにします。 JWT は、承認と情報交換に関するシナリオで役立ちます。
JWT は、ドット (.) で区切られた XNUMX つの部分で構成されます。
- ヘッダ – トークンのタイプ (JWT)、使用されている署名アルゴリズム (HMAC SHA256 または RSA など)、オプションのキー識別子などの部分が含まれます。
- ペイロード – これには、いくつかのキーと値のペアが含まれています。 クレーム、ID プロバイダーによって発行されます。 トークンの発行と有効期限に関連するいくつかのクレームに加えて、トークンには、個々のプリンシパルとテナントに関する情報を含めることもできます。
- 署名 – 署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、シークレット、ヘッダーで指定されたアルゴリズムを取得し、署名します。
したがって、JWT は次のようになります。
以下はヘッダーの例です。
サンプル ペイロードは次のとおりです。
JWT は秘密鍵を使用して作成されます。その秘密鍵は非公開です。つまり、秘密鍵を一般に公開したり、JWT 内に挿入したりすることはありません。 クライアントから JWT を受け取ると、サーバーに保存されている秘密鍵を使用して JWT を検証できます。 JWT を変更すると、検証 (JWT 検証) が失敗します。
この投稿では、共有アクセス キーを使用した JWT の使用例と、アクセス コントロールで Amazon Kendra インデックスを保護するためのその使用方法を示します。 本番環境では、選択した安全な認証サービス プロバイダーを使用し、要件に基づいて JWT を生成します。
JWT の詳細については、次を参照してください。 JSON Web トークンの概要.
ソリューションの概要
に似て 役職 Open ID を使用すると、このソリューションは一連のユーザーとグループがドキュメント リポジトリに対して検索クエリを実行できるように設計されており、そのグループ内でアクセスが許可されているドキュメントからのみ結果が返されます。 次の表は、このユースケースで各ユーザーがアクセスを許可されているドキュメントの概要を示しています。 この例で使用されているドキュメントは、AWS 公開ドキュメントのサブセットです。
ユーザー | グループ | アクセスが許可されているドキュメントタイプ |
ゲスト | . | ブログ |
パトリシア | 顧客 | ブログ、ユーザーガイド |
James | 営業 | ブログ、ユーザーガイド、ケーススタディ |
John Redfern | マーケティング | ブログ、ユーザーガイド、ケーススタディ、アナリストレポート |
メアリー | ソリューションアーキテクト | ブログ、ユーザーガイド、ケーススタディ、アナリストレポート、ホワイトペーパー |
次の図は、共有アクセス キーを使用して JWT を作成し、Amazon Kendra インデックス内の特定のドキュメントへのユーザー アクセスを制御する方法を示しています。
Amazon Kendra インデックスは、ユーザー アクセス トークンを使用したクエリ API 呼び出しを受け取ると、共有秘密鍵 (安全に保存されている) を使用してトークンを検証します。 AWSシークレットマネージャー) ペイロードでユーザー名やグループなどのパラメーターを取得します。 Amazon Kendra インデックスは、保存されたアクセス コントロール リスト (ACL) とユーザーの JWT で受信した情報に基づいて検索結果をフィルタリングします。 これらのフィルタリングされた結果は、アプリケーションによって行われたクエリ API 呼び出しに応答して返されます。
前提条件
この投稿の手順に従うには、次のものが揃っていることを確認してください。
共有秘密鍵を使用して JWT を生成する
次のサンプル Java コードは、オープンソースを使用して共有秘密鍵で JWT を作成する方法を示しています。 jsonウェブトークン パッケージ。 本番環境では、選択した安全な認証サービス プロバイダーを使用し、要件に基づいて JWT を生成します。
ユーザー名とグループの情報をクレームとしてペイロードに渡し、共有シークレットで JWT に署名し、そのユーザーに固有の JWT を生成します。 シークレットとして 256 ビットの文字列を指定し、base64 URL でエンコードされた共有シークレットの値を保持して、後の手順で使用します。
JWT 共有シークレットを使用して Amazon Kendra インデックスを作成する
Amazon Kendra インデックスを作成する手順については、次を参照してください。 インデックスを作成する. を書き留めます AWS IDおよびアクセス管理 プロセス中に作成した (IAM) ロール。 次の手順に従って、S3 バケットと Secrets Manager へのロール アクセスを提供します。 最小特権の原則. ポリシーの例については、次を参照してください。 IAM アイデンティティベースのポリシーの例. インデックスを作成すると、Amazon Kendra コンソールは次のスクリーンショットのようになります。
シークレットを追加するには、次の手順を実行します。
- Amazon Kendra コンソールで、 ユーザーアクセス制御 インデックス詳細ページのタブ。
- 選択する 編集の設定.
- トークンベースのアクセス制御を実装しているため、選択します はい 下 アクセス制御設定.
- トークン構成、選択する 共有シークレットを使用した JWT for トークンタイプ.
- 秘密の種類、選択する 新作.
- 秘密の名前、 入る
AmazonKendra-jwt-shared-secret
または任意の名前。 - キーIDで、サンプル Java コードで作成した JWT と一致するキー ID を入力します。
- アルゴリズムで、HS256 アルゴリズムを選択します。
- 共有秘密で、以前に Java コードから生成された保持された base64 URL エンコードされたシークレットを入力します。
- 選択する シークレットを保存.
シークレットは、JSON Web Key Set (JWKS) として Secrets Manager に保存されます。 Secrets Manager コンソールで見つけることができます。 詳細については、を参照してください。 共有シークレットでの JSON Web トークン (JWT) の使用.
- 拡大する 高度な設定 のセクションから無料でダウンロードできます。
このステップでは、JWT クレームから抽出され、署名が有効な場合に ACL と照合されるユーザー名とグループを設定します。
- ユーザーネームを入力してください。
- グループ、グループを入力します。
- オプションのフィールドはデフォルトのままにします。
- 選択する Next、を選択します アップデイト.
S3 バケットをデータ ソースとして準備する
S3 バケットをデータ ソースとして準備するには、S3 バケットを作成します。 ターミナルで AWSコマンドラインインターフェイス (AWS CLI)または AWS クラウドシェルで、次のコマンドを実行して、ドキュメントとメタデータをデータ ソース バケットにアップロードします。
クエリ対象のドキュメントは S3 バケットに保存されます。 各ドキュメント タイプには、ブログ、ケース スタディ、アナリスト レポート、ユーザー ガイド、およびホワイト ペーパーの個別のフォルダーがあります。 このフォルダー構造は、Data という名前のフォルダーに含まれています。 ACL を含むメタデータ ファイルは、Meta という名前のフォルダーにあります。
Amazon Kendra S3 コネクタを使用して、この S3 バケットをデータ ソースとして設定します。 データ ソースが Amazon Kendra インデックスと同期されると、すべてのドキュメントのクロールとインデックス作成が行われ、メタデータ ファイルから ACL とドキュメント属性が収集されます。 メタデータ ファイルを使用した ACL の詳細については、次を参照してください。 Amazon S3 ドキュメントのメタデータ. この例では、カスタム属性を使用します DocumentType
ドキュメントのタイプを示します。 アップロード後、S3 バケット構造は次のスクリーンショットのようになります。
カスタム属性を設定するには DocumentType
、次の手順を実行します。
- Kendra インデックスを選択し、 ファセット定義 ナビゲーションペインに表示されます。
- 選択する フィールドを追加.
- フィールド名、 入る
DocumentType
. - データ・タイプ、選択する 文字列.
- 選択する Add.
これで、S3 コネクタを使用して、作成したバケットから Amazon Kendra インデックスにドキュメントを取り込むことができます。 詳細な手順については、次を参照してください。 Amazon Kendra S3 コネクタを介したドキュメントの取り込み.
- 同期設定を構成する セクション、 データソースの場所を入力してください、S3 バケットを入力します (
s3://kendra-demo-bucket/
). - メタデータファイルのプレフィックスフォルダーの場所、 入る
Meta/
. - 詳細 追加の構成.
- ソフトウェア設定ページで、下図のように パターンを含める タブ、 接頭辞、 入る
Data/
.
サポートされているコネクタの詳細については、次を参照してください。 コネクタ.
- 選択する Nextをタップし、その後、 Next もう一度、そして アップデイト.
- データ ソースが作成されるのを待ってから、データ ソースを選択し、 今すぐ同期.
データ ソースの同期が完了するまでに 10 ~ 15 分かかる場合があります。 同期が完了すると、 最終同期ステータス として表示する必要があります Successful: .
Amazon Kendra インデックスをクエリする
インデックスでテスト クエリを実行するには、次の手順を実行します。
- Amazon Kendraコンソールで、 インデックス付きコンテンツを検索 ナビゲーションペインに表示されます。
- 詳細 アクセストークンを使用してクエリをテストする.
- 選択する トークンを適用する.
- ユーザーとグループの JWT を生成できます。 この例では、
AWS-SA
グループ。 ユーザー名を Mary に、グループを次のように置き換えます。AWS-SA
JWT生成ステップで。 - 生成されたトークンを入力し、選択します 申し込む.
ACL に基づいて、すべてのフォルダー (ブログ、ユーザー ガイド、ケース スタディ、アナリスト レポート、ホワイトペーパー) から結果を得る必要があります。
同様に、 AWS-Sales
グループを作成し、対応する JWT を渡すと、ブログ、ユーザー ガイド、およびケース スタディのみにアクセスできます。
トークンを渡さずにゲストとしてインデックスを検索することもできます。 ゲストは、ブログ フォルダー内のコンテンツにのみアクセスできます。
さまざまなユーザーおよびグループとしてログインしているときに考えられる他のクエリを使用して実験し、結果を観察します。
クリーンアップ
将来のコストが発生しないようにするには、このソリューションの一部として作成したリソースをクリーンアップしてください。 ソリューションのテスト中に作成された Amazon Kendra インデックスと S3 バケットを削除するには、以下を参照してください。 掃除. Secrets Manager シークレットを削除するには、以下を参照してください。 AWS Secrets Manager シークレットを削除する.
まとめ
この投稿では、Amazon Kendra がユーザー アクセスに基づいて検索結果のみを返す安全な検索を実行する方法について説明しました。 共有秘密鍵を使用した JWT を追加することで、検索を実行する個々のユーザーとユーザー グループの ID を簡単に検証できます。 この同様のアプローチは、 公開鍵を使用した JWT. 詳細については、次を参照してください。 共有シークレットでの JSON Web トークン (JWT) の使用.
著者について
ニティン・エウセビウス AWS のシニア エンタープライズ ソリューション アーキテクトであり、ソフトウェア エンジニアリングとエンタープライズ アーキテクチャで 18 年以上の経験があります。 彼は顧客と協力して、AWS プラットフォームで適切に設計されたアプリケーションの構築を支援しています。 テクノロジーの課題を解決し、お客様のクラウド ジャーニーを支援することに情熱を注いでいます。
クルティ・ジャヤシマ・ラオ AI と ML を専門とするパートナー ソリューション アーキテクトです。 彼女は、AWS クラウドで安全で回復力があり、可用性の高いソリューションを構築するためのベスト プラクティスに従って、AWS パートナーに技術的なガイダンスを提供しています。
イシャーン・ベリー アマゾン ウェブ サービスのソフトウェア エンジニアであり、エンタープライズ検索エンジンである Amazon Kendra に取り組んでいます。 彼はセキュリティに情熱を傾けており、過去 2 年間、Kendra のアクセス制御機能の主要コンポーネントに取り組んできました。
アカシュ・バティア AWS のプリンシパル ソリューション アーキテクトです。 彼の現在の焦点は、革新的で回復力のあるソリューションを大規模に設計および実装することにより、企業の顧客がビジネスの成果を達成できるよう支援することです。 彼は、フォーチュン 15 から製造、航空宇宙、小売業界の新興企業に至るまで、100 年以上にわたってテクノロジーの分野で働いてきました。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- Platoblockchain。 Web3メタバースインテリジェンス。 知識の増幅。 こちらからアクセスしてください。
- 未来を鋳造する w エイドリエン・アシュリー。 こちらからアクセスしてください。
- 情報源: https://aws.amazon.com/blogs/machine-learning/secure-your-amazon-kendra-indexes-with-the-acl-using-a-jwt-shared-secret-key/
- :は
- $UP
- 10
- 100
- 11
- 15年
- 420
- 7
- 8
- 9
- a
- できる
- 私たちについて
- アクセス
- こちらからお申し込みください。
- 正確な
- 達成する
- 越えて
- 添加
- 航空宇宙
- 後
- AI
- アルゴリズム
- すべて
- ことができます
- Amazon
- アマゾンケンドラ
- Amazon Webサービス
- 間で
- アナリスト
- および
- API
- 申し込み
- 申し込む
- アプローチ
- 建築
- です
- AS
- At
- 属性
- 認証
- 承認
- 自動的に
- 利用できます
- AWS
- ベース
- BE
- なぜなら
- さ
- BEST
- ベストプラクティス
- の間に
- ビット
- ブログ
- ビルド
- ビジネス
- by
- コール
- 呼ばれます
- 缶
- 場合
- ケーススタディ
- 挑戦する
- 課題
- 選択
- 選択する
- クレーム
- class
- クライアント
- クラウド
- コード
- 企業
- コンプリート
- コンポーネント
- 領事
- 含む
- 含まれています
- コンテンツ
- 中身
- コントロール
- controls
- 対応する
- コスト
- 作ります
- 作成した
- 作成
- 創造
- 重大な
- クリプト
- 暗号
- 電流プローブ
- カスタム
- Customers
- データ
- 日付
- デフォルト
- 実証します
- 実証
- 設計
- 詳細
- 細部
- 異なります
- 難しい
- 分散した
- ドキュメント
- ドキュメント
- ダウン
- 間に
- 各
- 簡単に
- 可能
- エンジン
- エンジニア
- エンジニアリング
- 確保
- 入力します
- Enterprise
- 例
- 交換
- 体験
- 不良解析
- 特徴
- 特徴
- フィールズ
- フィルタリング
- フィルター
- フォーカス
- フォロー中
- フォーチュン
- から
- フル
- 未来
- 利得
- 生成する
- 生成された
- 世代
- グループ
- グループの
- ゲスト
- ガイダンス
- ガイド
- 持ってる
- ヘッダーの
- 助け
- 非常に
- 認定条件
- How To
- HTML
- HTTP
- HTTPS
- ID
- 識別子
- アイデンティティ
- 実装
- import
- in
- include
- 含めて
- index
- インデックス
- 個人
- 情報
- 革新的な
- インスタント
- を取得する必要がある者
- 説明書
- インテリジェント-
- ISS
- 発行
- 発行済み
- IT
- ITS
- Java
- John Redfern
- 旅
- JSON
- ジウト
- キー
- キー
- キッド
- LEARN
- ような
- LINE
- リスト
- 見て
- のように見える
- LOOKS
- 製
- make
- 作成
- マネージャー
- 方法
- 製造業
- 多くの
- 一致
- マッチ
- 手段
- Meta
- 分
- ML
- 他には?
- 名
- 名前付き
- ナビゲート
- ナビゲーション
- 新作
- オブジェクト
- 観察する
- of
- on
- 開いた
- オープンソース
- 注文
- 組織
- その他
- 輪郭
- パッケージ
- ページ
- 足
- ペイン
- パラメータ
- 部
- パートナー
- パートナー
- 部品
- パス
- 通過
- 情熱的な
- 過去
- 実行する
- 実行
- プラットフォーム
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- ポリシー
- ポスト
- プラクティス
- 準備
- 前に
- 校長
- プライベート
- プロセス
- 生産
- 提供します
- プロバイダー
- は、大阪で
- 公共
- クエリ
- 範囲
- 測距
- 読む
- 受け取ります
- 受け
- 受け取り
- に対する
- replace
- レポート
- 倉庫
- 要件
- 弾力性のあります
- リソース
- 応答
- 責任
- 結果
- 結果
- 小売
- リテンションを維持
- return
- 明らかにする
- 職種
- RSA
- ラン
- 規模
- シナリオ
- を検索
- 検索エンジン
- 秘密
- セクション
- 安全に
- セキュア
- しっかりと
- セキュリティ
- 別
- サービス
- サービスプロバイダー
- サービス
- セッションに
- いくつかの
- SHA256
- シェアする
- shared
- すべき
- 表示する
- 作品
- 符号
- 署名されました
- 重要
- 署名
- 同様の
- 簡略化されました
- ソフトウェア
- ソフトウェアエンジニア
- ソフトウェア工学
- 溶液
- ソリューション
- 解決
- ソース
- 特定の
- 指定の
- 標準
- ベンチャー
- 手順
- ステップ
- 保存され
- 合理化された
- 文字列
- 構造
- 研究
- そのような
- サポート
- サポート
- テーブル
- 取る
- 技術的
- テクノロジー
- テナント
- ターミナル
- test
- テスト
- それ
- 情報
- アプリ環境に合わせて
- それら
- ボーマン
- 三
- 介して
- 時間
- 〜へ
- トークン
- トークン
- 統一
- URL
- 使用法
- つかいます
- 使用事例
- ユーザー
- users
- 検証
- 値
- さまざまな
- Verification
- 確認する
- 垂直
- ウェブ
- Webサービス
- WELL
- which
- while
- ホワイトペーパー
- 誰
- ワイド
- 広い範囲
- 意志
- 以内
- 無し
- 働いていました
- ワーキング
- 作品
- ワークショップ
- 年
- You
- あなたの
- ゼファーネット
- 〒