Meilisearchを認証ユーザのみ使用できるようAPIキーを設定する

公開日:2022/09/09 更新日:2022/09/09
Meilisearchを認証ユーザのみ使用できるようAPIキーを設定するのサムネイル
Photo by Franck on Unsplash

はじめに

認証ユーザにのみMeilisearchの使用を許可して保護するためには、Meilisearchのマスターキーの設定とAPIキーの作成が必要になります。この手順をまとめます。

前提と環境

  • Meilisearchの設定が完了していること
  • Meilisearchが動作するサーバへSSH接続できること
  • Meilisearchのマスターキーを把握していること

この記事は、以下の内容が完了した後の続きの内容になります。上記の前提は以下の記事内の作業後であれば全て満たしていると思います。

virment.com

Google Compute Engine上にデプロイし、独自ドメインを設定して動作確認してみました。

以下の公式ドキュメントに従って作業します。

docs.meilisearch.com

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 KeyDefault 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 KeyDefault 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 KeyDefault Admin API Keyの値になります。 Default Admin API Keyはマスターキー同様にどこにも公開せずに注意して使う必要があります。

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。