3
2

Docker composeで導入したMilvusにユーザー認証を有効化する

Last updated at Posted at 2024-03-20

ベクトルデータベースであるMilvus Standalone版はデフォルトでユーザー認証が有効化されていません。
当記事ではDocker composeで導入したMilvus(=Standalone版)にユーザー認証を有効化する方法を説明します。
尚、Milvusは既にDocker composeで導入し、動作確認済みの想定です。
参考: M1 Mac上でcolimaを使ってベクトルDB Milvusをインストール(M1 Macである必要はありません)

Milvusのドキュメント「Authenticate User Access」に書いてある内容です。

1. configuration fileを設定

参考: Configure Milvus with Docker Compose

1.1 以下のコマンドでmilvus.yamlをダウンロードします。

ここではダウンロードする場所は導入に使用するdocker-compose.yml がある場所と同じにしておきます。
こちらの手順で導入したと想定して、ここでは~/milvusにダウンロードします。

ダウンロードするコマンドは以下です(尚以下のv2.3.11は自分の導入するバージョンに合わせて変更してください):

wget https://raw.githubusercontent.com/milvus-io/milvus/v2.3.11/configs/milvus.yaml

1.2 milvus.yamlの編集

ダウンロードしたmilvus.yamlの以下を2点を変更します(ただし2番目任意)。

  • common:セクションのsecurity:authorizationEnabled:の値をfalseからtrue にします。
  • common:セクションのsecurity:# superUsers: rootの先頭のコメントアウト#を外して有効にします。
    • これは任意ですが、superUsersに設定したユーザーIDのみ、パスワード変更時に現在のパスワードが不要になります。通常、管理者がユーザーのパスワード変更する際は現在のパスワードは不明なことが多いですので、最低rootは定義しておいた方がよいかと思います。

変更前のmilvus.yaml:

(最初の方は省略)
 ・ ・ ・  
common:
  chanNamePrefix:
    cluster: by-dev
    rootCoordTimeTick: rootcoord-timetick
    rootCoordStatistics: rootcoord-statistics
    rootCoordDml: rootcoord-dml
    replicateMsg: replicate-msg
    rootCoordDelta: rootcoord-delta
    search: search
    searchResult: searchResult
    queryTimeTick: queryTimeTick
    dataCoordStatistic: datacoord-statistics-channel
    dataCoordTimeTick: datacoord-timetick-channel
    dataCoordSegmentInfo: segment-info-channel
 ・ ・ ・   
(そして間も省略)
 ・ ・ ・   
  # Default value: auto
  # Valid values: [auto, avx512, avx2, avx, sse4_2]
  # This configuration is only used by querynode and indexnode, it selects CPU instruction set for Searching and Index-building.
  simdType: auto
  security:
    authorizationEnabled: false
    # The superusers will ignore some system check processes,
    # like the old password verification when updating the credential
    # superUsers: root
    tlsMode: 0
  session:
    ttl: 30 # ttl value when session granting a lease to register service
    retryTimes: 30 # retry times when session sending etcd requests
(以下省略)
 ・ ・ ・   

変更後のmilvus.yaml:

(最初の方は省略)
 ・ ・ ・  
common:
  chanNamePrefix:
    cluster: by-dev
    rootCoordTimeTick: rootcoord-timetick
    rootCoordStatistics: rootcoord-statistics
    rootCoordDml: rootcoord-dml
    replicateMsg: replicate-msg
    rootCoordDelta: rootcoord-delta
    search: search
    searchResult: searchResult
    queryTimeTick: queryTimeTick
    dataCoordStatistic: datacoord-statistics-channel
    dataCoordTimeTick: datacoord-timetick-channel
    dataCoordSegmentInfo: segment-info-channel
 ・ ・ ・   
(そして間も省略)
 ・ ・ ・   
  # Default value: auto
  # Valid values: [auto, avx512, avx2, avx, sse4_2]
  # This configuration is only used by querynode and indexnode, it selects CPU instruction set for Searching and Index-building.
  simdType: auto
  security:
    authorizationEnabled: true
    # The superusers will ignore some system check processes,
    # like the old password verification when updating the credential
    superUsers: root
    tlsMode: 0
  session:
    ttl: 30 # ttl value when session granting a lease to register service
    retryTimes: 30 # retry times when session sending etcd requests
(以下省略)
 ・ ・ ・   

編集が完了したら保存します。

2. docker-composeを設定

Milvusのドキュメント「Configure Milvus with Docker Compose: Modify the installation file」に書いてある内容です。

docker-compose.ymlを以下のように編集します。
全てvolumes:セクションに以下を追加します。<>は自分のPATHに置き換えます

- <1で編集したローカルPC上のmilvus.yamlのフルパス>/milvus.yaml:/milvus/configs/milvus.yaml

volumes:セクションはversion: '3.5'で3箇所ありました。
1 . services:セクションのetcd:セクション
編集例: ~/milvus/milvus.yamlは自分のPATHに要変更です

volumes:
      - ~/milvus/milvus.yaml:/milvus/configs/milvus.yaml
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd

2 . services:セクションのminio:セクション
編集例: ~/milvus/milvus.yamlは自分のPATHに要変更です

volumes:
      - ~/milvus/milvus.yaml:/milvus/configs/milvus.yaml
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data

3 . services:セクションのstandalone:セクション
編集例: ~/milvus/milvus.yamlは自分のPATHに要変更です

volumes:
      - ~/milvus/milvus.yaml:/milvus/configs/milvus.yaml
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus

編集が完了したら保存します。

3. Milvusを起動

既にMilvusが起動している場合は、一旦停止します。
停止はdocker-compose.ymlを保存したフォルダーで、以下のコマンドを実行します:

docker-compose down

起動はdocker-compose.ymlを保存したフォルダーで、以下のコマンドを実行します:

docker-compose up -d

docker psで表示されるStatusがmilvus-standalone,milvus-minio, milvus-etcdの3つ全て (healthy) になるのを待ちます。
image.png

全て (healthy) になれば起動完了です(milvus-standaloneがちょっと時間がかかります)

4. Attusで確認

Attuで確認してみます。
参考: Milvusのグラフィカルな管理ツール AttuをMacに導入してみた

Attuを起動し、Milvus Addressを入れ、Milvus UsernameとMilvus Passwordはブランクのままで接続してみます。
以下のようなエラーが出で、接続できないようになりました。

Error: Failed to connect to Milvus: Error: 16 UNAUTHENTICATED: missing authorization in header
image.png

では、Milvus UsernameとMilvus Password入れてみます。
初期設定は

  • Milvus Username: root
  • Milvus Password: Milvus
    となっていますので、この値を入れます。

image.png

無事接続できました!
image.png

さすがにAdmin権限のrootのパスワードはデフォルトから変更した方がよいので、変更します。

  1. 左側の「ユーザー」アイコンをクリック:
    image.png
  2. rootの「Update password」をクリック:
    image.png
  3. 「Update Milvus User」ウィンドウで必要な情報を入力:
  • Current Password

    • milvus.yamlにsuperUsers: rootを設定していれば、Current Password(現在のパスワード) はブランクのままでよいはずなのですが、このGUI,それを許さないので、適当な1文字を入れておきます。またはわかるのであれば現在のパスワードを入れます。
  • New Password

    • 新パスワード
  • Confirm Password

    • 確認のためNew Passwordに入力したパワードと同じ文字列を入力)を入力します。

入力が完了したら「Create」をクリックします。
(ここは普通「Update」であるべきですよね。そのうち修正されるのだろうか??)
image.png

エラーが出ます。しかし、これでなぜか成功しているのです。 バグですかね??
image.png

4 . 右上のログアウトのアイコンをクリックしてログアウトします。
image.png

5 . 変更後のパスワードでログインしてみます
image.png

無事接続できました!
image.png

なんかスッキリしないので次にpythonで確認してみます。

5. pymilvus(python)で確認

5-1. milvusへの接続、pwなし

詳細: Connect to a Milvus server

from pymilvus import connections
conn= connections.connect(
  alias="default", 
  host='localhost', 
  port='19530'
)

エラーがでます:

grpc RpcError: [__internal_register], <_InactiveRpcError: StatusCode.UNAUTHENTICATED, missing authorization in header>,

5-2. user,passwordも入れて、milvusへの接続

詳細: Connect Milvus with an authenticated user

初期設定は

  • Milvus Username: root
  • Milvus Password: Milvus
    となっていますので、この値を入れます。
from pymilvus import connections
conn= connections.connect(
  alias="default", 
  host='localhost', 
  port='19530',
  user='root',
  password='Milvus',
)

接続成功しました。 ユーザー認証が有効になっているのが分かります。

5-3. rootのpassword変更

詳細: Reset password
milvus.yamlにsuperUsers: rootを設定している場合は、現在のパスワードは不要です。

from pymilvus import utility
utility.reset_password('root', '', 'P@ssword', using='default')

milvus.yamlにsuperUsers: rootを設定がない場合は、現在のパスワードを入れます。

from pymilvus import utility
utility.reset_password('root', 'Milvus', 'P@ssword', using='default')

5-4 rootのパスワード変更の確認

from pymilvus import connections
conn= connections.connect(
  alias="default", 
  host='localhost', 
  port='19530',
  user='root',
  password='P@ssword',
)

エラーが出なければ無事変更できています。

参考までにユーザー作成は以下を参照ください:
Create an authenticated user

参考までにロール設定は以下を参照ください:
Enable RBAC

以上です。

参考: Milvus関連投稿

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2