Meilisearchを認証ユーザのみ使用できるようAPIキーを設定する
はじめに
認証ユーザにのみMeilisearchの使用を許可して保護するためには、Meilisearchのマスターキーの設定とAPIキーの作成が必要になります。この手順をまとめます。
前提と環境
- Meilisearchの設定が完了していること
- Meilisearchが動作するサーバへSSH接続できること
- Meilisearchのマスターキーを把握していること
この記事は、以下の内容が完了した後の続きの内容になります。上記の前提は以下の記事内の作業後であれば全て満たしていると思います。
Google Compute Engine上にデプロイし、独自ドメインを設定して動作確認してみました。
以下の公式ドキュメントに従って作業します。
This guide will teach you how to protect your Meilisearch instance by setting a master key and how to authorize requests using API keys.
マスターキーを設定する
まずはじめに、Meilisearchを不特定多数からのアクセスから保護するため、マスターキーを設定します。 公式ドキュメントに記載されているとおり、このマスターキーを設定することでひとまずMeilisearchを保護することができます。
Meilisearch用インスタンスにて以下で環境変数にマスターキーを設定します。KSjeon19dn3Ls93nFNl349FNS93nkljasIk39fnsa
はご自身のマスターキーに置き換えてください。
$ export MEILI_MASTER_KEY="KSjeon19dn3Ls93nFNl349FNS93nkljasIk39fnsa"
以下のコマンドでマスターキーが環境編集に設定されたか確認します。
$ export -p | grep MEILISEARCH
declare -x MEILISEARCH_ENVIRONMENT="production"
declare -x MEILISEARCH_MASTER_KEY="KSjeon19dn3Ls93nFNl349FNS93nkljasIk39fnsa"
declare -x MEILISEARCH_SERVER_PROVIDER="gcp"
上記のようにMEILISEARCH_MASTER_KEY
にマスターキーが表示されていればOKです。
試しにmeilisearch
コマンドを実行すると、以下のように表示されると思います。
$ meilisearch
888b d888 d8b 888 d8b 888
8888b d8888 Y8P 888 Y8P 888
88888b.d88888 888 888
888Y88888P888 .d88b. 888 888 888 .d8888b .d88b. 8888b. 888d888 .d8888b 88888b.
888 Y888P 888 d8P Y8b 888 888 888 88K d8P Y8b "88b 888P" d88P" 888 "88b
888 Y8P 888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888 888 888 888
888 " 888 Y8b. 888 888 888 X88 Y8b. 888 888 888 Y88b. 888 888
888 888 "Y8888 888 888 888 88888P' "Y8888 "Y888888 888 "Y8888P 888 888
Database path: "./data.ms"
Server listening on: "http://127.0.0.1:7700"
Environment: "development"
Commit SHA: "sa082j3083977shdaohibqw47ioha8"
Commit date: "2022-07-11T12:41:15Z"
Package version: "0.28.0"
Thank you for using Meilisearch!
We collect anonymized analytics to improve our product and your experience. To learn more, including how to turn off analytics, visit our dedicated documentation page: https://docs.meilisearch.com/learn/what_is_meilisearch/telemetry.html
Anonymous telemetry: "Enabled"
Instance UID: "108j123c-sd813-1234-5821-308jde2"
A Master Key has been set. Requests to Meilisearch won't be authorized unless you provide an authentication key.
Documentation: https://docs.meilisearch.com
Source code: https://github.com/meilisearch/meilisearch
Contact: https://docs.meilisearch.com/resources/contact.html
Error: Address already in use (os error 98)
上記のようにA Master Key has been set. Requests to Meilisearch won't be authorized unless you provide an authentication key.
と表示されていればMeilisearchにマスターキーが無事に設定されており、APIキーを指定しているリクエストのみ受付ます。
APIリクエストに使うAPIキーについては次節で確認します。
MeilisearchのAPIキーについて
Meilisearchでは、初期設定を完了した段階で2つのAPIキーがデフォルトで用意されています。Default Search API Key
とDefault Admin API Key
の2つです。文字から推測できる通り、これらのAPIキーは以下の役割になっています。
- Default Search API Key: 検索リクエスト用
- Default Admin API Key: 検索だけでなく、インデックスの作成や削除など管理者用
よって実際のWebサイトやアプリからの検索用にはDefault Search API Key
を使うことになると思います。
この2つのAPIキーは、curl
コマンドなどでGETリクエストを投げることで確認できます。
例えば、MeilisearchのインスタンスにSSH接続している状態で、以下を実行してみると、応答としてDefault Search API Key
とDefault Admin API Key
が返ってきます。KSjeon19dn3Ls93nFNl349FNS93nkljasIk39fnsa
は自分のマスターキーに置き換えてください。
以下では応答結果を見やすくするためにjq
コマンドに渡していますが、jq
コマンドをインストールしていない場合は| jq
無しで実行してください。
ちなみにUbuntuやDebianであれば、sudo apt install jq
でインストールできます。
$ curl -X GET 'http://localhost:7700/keys' -H 'Authorization: Bearer KSjeon19dn3Ls93nFNl349FNS93nkljasIk39fnsa' | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 795 100 795 0 0 129k 0 --:--:-- --:--:-- --:--:-- 129k
{
"results": [
{
"name": "Default Search API Key",
"description": "Use it to search from the frontend",
"key": "sk4903nf84nf9w4nh08gfj02308jf297hdwdol4w08jf2038jd2308jdc023408jd3",
"uid": "71893j93j-0126-41i2-124b-7aou3h91d",
"actions": [
"search"
],
"indexes": [
"*"
],
"expiresAt": null,
"createdAt": "2022-07-18T12:55:51.33141765Z",
"updatedAt": "2022-07-18T12:55:51.33141765Z"
},
{
"name": "Default Admin API Key",
"description": "Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend",
"key": "sksk309dmnopi23g08jfce0p294j0fg4oawdol4w08jf2038jd2308jdc023408jd3",
"uid": "8dn2083j93j-0126-41i2-124b-7aes08j12d",
"actions": [
"*"
],
"indexes": [
"*"
],
"expiresAt": null,
"createdAt": "2022-07-18T12:55:51.236259064Z",
"updatedAt": "2022-07-18T12:55:51.236259064Z"
}
],
"offset": 0,
"limit": 20,
"total": 2
}
上記の中の"key"
に続く値がそれぞれDefault Search API Key
とDefault Admin API Key
の値になります。
Default Admin API Key
はマスターキー同様にどこにも公開せずに注意して使う必要があります。
関連記事
- 公開日:2022/09/11 更新日:2022/09/11
Google Compute EngineのインスタンスにSSH接続できなくなった時の対処方法
Google Compute EngineのインスタンスにSSH接続できていたのにSSHの設定ミスや原因不明でSSH接続できなくなった時の対処方法をメモします。自分のPCからだけでなく、Google Cloud Platform上での管理画面からもSSHできない場合にも有効です。
- 公開日:2022/09/09 更新日:2022/09/09
MeilisearchをGoogle Compute Engineにデプロイして独自ドメインを設定する
Firebaseで全文検索を実装するために調査していたところ、Meilisearchというオープンソースを見つけました。調べてみるとMeilisearchが良さそうだったため、Google Compute Engine上にデプロイし、独自ドメインを設定して動作確認してみました。その手順をメモします。
- 公開日:2022/09/08 更新日:2022/09/08
Google Compute EngineのインスタンスにSSH接続する
Google Compute Engineのインスタンスにssh接続するための手順をまとめます。