Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KendraにACLを設定しCognitoのユーザーグループと連携したい #765

Open
routeone34 opened this issue Dec 6, 2024 · 2 comments

Comments

@routeone34
Copy link

機能リクエストは何か問題に関連していますか?背景を説明してください
1つのKendraインデックスをAccess Conteol List(以下ACL)で論理的に分割し、
Cognitoのユーザーグループ単位でアクセス制限したいと考えています。

これが可能になると1つのGenU環境を、セキュリティを確保しながら
多数の部門で評価することができ、Kendaコストも削減できるので、
当方としては非常にありがたい機能になります。

追加 or 改善したい機能について
機能追加要望として以下を挙げさせていただきます。
「S3データソースからmetadata.json等で生成したKendraのACLに対し
Cognitoユーザーグループ単位でRAG生成できるようにする」

(詳細)
GenUのデプロイで生成したKendraの「User Access Control」の設定は既定で
Token type: OpenID
Signing key object: cognitoユーザープールのURL
Username: cognito:username
Groups: cognito:groups
となっており、すぐにも連携できそうに見えますが

{
"AccessControlList": [
{ "Access": "ALLOW", "Name": "Group1", "Type": "GROUP" }
]
}
のようなmetadata.jsonを作ってACLを認識させても、
GenUからは正しく検索できません。

Amazonの技術担当の人に調べてもらったところ、
queryKendra.tsがkenrdaにQueryを投げるところでCognitoの情報を渡していないので
ACLが付いたものはRAG対象外になってしまうようです。
これを可能にしてほしいという要望になります。

@tbrand
Copy link
Contributor

tbrand commented Dec 6, 2024

Kendra から情報を取得する際には retrieveKendra.ts が使われます。

以下の RetrieveCommand 内に
https://github.com/aws-samples/generative-ai-use-cases-jp/blob/main/packages/cdk/lambda/retrieveKendra.ts#L43

UserContext -> Groups が設定できるので
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/kendra/command/RetrieveCommand/

そちらで動作でするか確認していただくのはどうでしょうか?

congito:groups は以下の要領で取得できると思います。
https://github.com/aws-samples/generative-ai-use-cases-jp/blob/main/packages/cdk/lambda/listChats.ts#L8-L9

まとめると、以下のような実装を追加することになるかと思います。(動作未確認です。)

const groups: string[] = event.requestContext.authorizer!.claims['cognito:groups'].split(',');

...

const retrieveCommand = new RetrieveCommand({
  IndexId: INDEX_ID,
  QueryText: query,
  AttributeFilter: attributeFilter,
  UserContext: {
    Groups: groups,
  },
});

@routeone34
Copy link
Author

回答ありがとうございます。
当方にTypeScriptの技術が乏しく、また自由にソースを弄って試す環境を
作る能力が現状ないのですが、そこは色々調べてやってみます。

一方で需要が多そうな機能とも思うので、
エンハンス項目に含めていただくよう、要望としては継続して挙げさせて下さい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants