Amazon Knowledge Base で Confluence上の情報についてチャットで質問できるようにする

## 目的

Confluence 上の情報についてチャット形式またはプログラムで質問できるようにする

## 前提

Amazon Knowledge Base はセットアップ済みとします。
【参考】[Amazon Bedrock ナレッジベースの使い方（コンソール編）](https://qiita.com/devKita/items/82ef91977b86d85f1ac0)

## 手順

- Atlassian で Basic認証の設定
    - APIトークンを発行
- Amazon Knowledge Base の設定
    - AWS Secrets Manager でキーを発行
    - AWS Knowledge Base Role にキーの読み取り権限を付与
    - AWS Knowledge Base にデータソースを追加

## 詳細

### Atlassian で APIトークンを発行

Confluence にログインしてトークン作成ページからトークンを作成
https://id.atlassian.com/manage-profile/security/api-tokens

![atlassian.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/6b95ae4d-d579-6a59-ba99-5add4327ad07.png)

### AWS Secrets Manager でキーを発行

キーの作成を開始
![sec.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/6a256e5a-7e3c-4b1f-6ff6-ca43749aca2c.png)

シークレットタイプに "Other type of secret"を選択 > キーと値のペアに "username" / "password" を入力します。
![sec2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/4b316b3a-f6e7-7260-26ea-745678504c26.png)

他はそのままにして「次へ」

シークレット名は ***"AmazonBedrock-"から始まる必要があります*** 。

![sec3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/addac767-b456-3a76-b411-231a5b4f4dc8.png)

他はデフォルトで作成を実行します。

ARNはコピーしておきます



### AWS Knowledge Base Role にキーの読み取り権限を付与

IAMから、ナレッジベース実行ロールにさきほど作成したキーの読み取り権限を付与します。

Knowledge Base で使っているロールを選択
![role.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/14504de7-7289-4de1-9228-0aa70def3ee9.png)

権限の追加 > インラインポリシーを作成します

```
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"secretsmanager:GetSecretValue",
				"secretsmanager:PutSecretValue"
			],
			"Resource": [
				"arn:aws:secretsmanager:<region>:<AWS account ID>:*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"kms:Decrypt"
			],
			"Resource": [
				"arn:aws:kms:<region>:<AWS account ID>:*"
			],
			"Condition": {
				"StringLike": {
					"kms:ViaService": [
						"secretsmanager.<region>.amazonaws.com"
					]
				}
			}
		}
	]
}
```

### AWS Knowledge Base にデータソースを追加

データソースの追加を実行します
![kb1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/33a25e44-8ca0-660a-4376-96d0d961ce05.png)

データソースに Confluence を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/56300c32-f9f4-2be9-4408-b34660b0d864.png)

Confluence Cloud のURL（https://xxx.atlassian.net）を入力し、認証に "Basic 認証"を選択 > さきほど作成したシークレットのARMを貼り付けます

![kb2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/d4e88672-b5fb-f21e-a73e-5df6a363eaca.png)

他はデフォルトで作成します。

同期を実行します。今回はテスト用の Confluence アカウントで試しましたが、かなり時間がかかりました。（30分以上）

また、.svgファイルが取り込めないという Warning が出るようですが同期は完了していました。

![kb3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/09dc6988-2a68-25bf-9be3-3c460a872a97.png)

> ※Warning内容
> Skipped document: https://xxxxxxxx.atlassian.net/wiki/pages/viewpageattachments.action?pageId=164064&preview=%2F164064%2F393237%2Fslash_menu.svg. The type of document/content item is not supported. See supported types: https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-ds.html#kb-ds-supported-doc-formats-limits

### 質問してみる

テスト用のページを作成しておきました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/7416565f-bb6b-a763-b0a5-a83e1d8e1030.png)

モデルに Claude を選択して質問すると回答してくれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787909/04cc92c8-7b00-2f25-637c-2f2924cb336e.png)

Amazon Knowledge Base は情報源のURLを示してくれるので信頼性があっていいですね！


## もっと知りたい
- Jiraについてチャットで質問してみたところ、できなかった。
- 取り込むプロジェクト・スペースを限定したい場合はトークンを発行するアカウントに付与する閲覧権限を調整すれば良さそう
- Lambda を使ってAPI経由で質問する
    - 【参考】[BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora](https://qiita.com/nabata/items/36a642597a92f0ece9d8)


## リファレンス
- Atlassian
https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/#Create-an-API-token
- Amazon Bedrock ナレッジベースの Confluence に接続する
https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/confluence-data-source-connector.html
- Knowledge Bases for Amazon Bedrock now supports additional data connectors (in preview)
https://aws.amazon.com/blogs/aws/knowledge-bases-for-amazon-bedrock-now-supports-additional-data-connectors-in-preview/
- ナレッジベースに設定が必要なポリシー
https://docs.aws.amazon.com/bedrock/latest/userguide/kb-permissions.html