最初に習ったことって、実は違うことが後で判明してもなかなか正しい方向にいきずらい。例えば、よくドキュメントで見かける、/etc/profileに追記とかあるが、/etc/profile.d/配下にファイルを作成で事が済む。本体のファイルは、パッケージマネージャなどで上書きされる危険があるので、修正すべきではなく、/etc/profile.d/配下にファイルを置く。無効にしたければ、そのファイルを削除すればいい。全く同じなのが/etc/sudoersファイル。/etc/sudoers.d/配下にファイルを置けばいいのに。俗にいう.dディレクトリの使い方は全てそう。.dを意識した記述を恐ろしいくらい見ない。多分、昔のUNIXの流れが今でも続いているのかもしれない。
閑話休題
こんなページがあった。
Root Access Settings
https://min.io/docs/minio/linux/reference/minio-server/settings/root-credentials.html
以下のようにして、minio serverを起動すると、
MINIO_ROOT_USER=minioadminuser MINIO_ROOT_PASSWORD=minioadminuser minio server /minio --console-address ":9001"
MINIO_ROOT_USERでログインができるが、
以下のようにして、minio serverを起動すると、
MINIO_API_ROOT_ACCESS=off MINIO_ROOT_USER=minioadminuser MINIO_ROOT_PASSWORD=minioadminuser minio server /minio --console-address ":9001"
MINIO_ROOT_USERは、minioを起動するだけのユーザになり、レプリケーション以外の利用はできなくなる。なので、MINIO_API_ROOT_ACCESS=on(デフォルト)の時に、consoleAdminの役割を持つユーザを作って必要がある。(忘れてもMINIO_API_ROOT_ACCESS=onにして、consoleAdminの役割をもつユーザを作って、再度、MINIO_API_ROOT_ACCESS=off にして立ち上げればいい。)
構築時のベストプラクティスは
1. MINIO_API_ROOT_ACCESS=onでminioを起動
この時のMINIO_ROOT_USERとMINIO_ROOT_PASSWORDは、miniorootuser / miniorootuserのような簡単なもので構わない
2. consoleAdminの役割を持つユーザを作成
3. 一旦、minioを停止
4. MINIO_API_ROOT_ACCESS=offでminioを起動
この時のMINIO_ROOT_USERとMINIO_ROOT_PASSWORDは、minio起動するときのみ使うクレデンシャルなので覚える必要がないので、長く、複雑なものにする。
5. 以後、consoleAdminの役割を持つユーザで利用開始
ただ、このconsoleAdminの役割を持つユーザは、管理用として利用すべきで、利用する場合は、利用ごとにユーザを作成してポリシーを割り当てるという運用をすべき。
参考にQNAPで動作させているDocker Composeのcompose.yamlファイル(今はdocker-compose.yamlファイルではなく、compose,yamlというファイルを使うらしい。)
最初に動かす、compose.yaml
services:
minio:
image: minio/minio
environment:
- MINIO_ROOT_USER=miiniorootuser
- MINIO_ROOT_PASSWORD=miiniorootuser
- MINIO_API_ROOT_ACCESS=on
- MINIO_COMPRESSION_ENABLE=on
- MINIO_COMPRESSION_EXTENSIONS=".txt, .log, .csv, .json, .tar, .xml, .bin"
- MINIO_BROWSER=on
- MINIO_BROWSER_LOGIN_ANIMATION=on
- MINIO_BROWSER_SESSION_DURATION=12h
- MINIO_BROWSER_CONTENT_SECURITY_POLICY="default-src 'self' 'unsafe-eval' 'unsafe-inline';"
restart: always
healthcheck:
test: ["CMD", "curl", "-k", "-I", "https://QNAPのIPアドレス:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
command: server /data --address ":9000" --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
volumes:
- </QNAPの物理パス>/minio/data:/data
- </QNAPの物理パス>//minio/config:/root/.minio
docker compose up -d
一旦、以下を実行して、新たにconsoleAdminの役割を持つ、minioconsoleadminユーザを作る。
set +o history
mc alias set local https://endpoint:9000 miiniorootuser miiniorootuser
set -o history
mc admin user add local minioconsoleadmin <minioconsoleadminのパスワード>
mc admin policy attach local consoleAdmin --user minioconsoleadmin
compose.yamlに記載されているminiorootuserのクレデンシャルからminioconsoleadminのクレデンシャルに差し替える。
mc alias remove local
mc alias set local https://endpoint:9000 minioconsoleadmin <minioconsoleadminのパスワード>
mc admin info local
minioのサーバステータスが確認できたら
docker compose down
compose.yamlを編集
services:
minio:
image: minio/minio
environment:
- MINIO_ROOT_USER=miiniorootuser09876 #覚えられないくらい複雑なもの
- MINIO_ROOT_PASSWORD=miniorootpassword12345 #覚えられないくらい複雑なもの
- MINIO_API_ROOT_ACCESS=off
- MINIO_COMPRESSION_ENABLE=on
- MINIO_COMPRESSION_EXTENSIONS=".txt, .log, .csv, .json, .tar, .xml, .bin"
- MINIO_BROWSER=on
- MINIO_BROWSER_LOGIN_ANIMATION=on
- MINIO_BROWSER_SESSION_DURATION=12h
- MINIO_BROWSER_CONTENT_SECURITY_POLICY="default-src 'self' 'unsafe-eval' 'unsafe-inline';"
restart: always
healthcheck:
test: ["CMD", "curl", "-k", "-I", "https://QNAPのIPアドレス:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
command: server /data --address ":9000" --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
volumes:
- </QNAPの物理パス>/minio/data:/data
- </QNAPの物理パス>//minio/config:/root/.minio
docker compose up -d
手元に、 Linux systemctl / docker、WindowsのPowerShellの自動構築スクリプトがあるが、minioのsftpサーバサポートの適用と合わせて作り直した。mcコマンドでかなり自動化ができる。
それを踏まえた自動化スクリプト。Prometheus(メトリックス表示)とsftpの設定は省いてある。入れておくと動かなくて、誰が言っていたんですか?どこに書いてあったんですか?サポートされますか?にまたなるので。。。
Windows版のお手軽作成スクリプト (Pwershellのスクリプトの実行許可をする必要がある。Administratorのパスワードを設定する必要がある。データはC:\miniodataに置かれる)
https://gist.github.com/masezou/fa8ea7bdfd69b2d41600247716ee8e09
Linux systemctl版のお手軽作成スクリプト (Ubuntu 22.04 / 24.04で動く。データは/disk/minioに置かれる)
https://gist.github.com/masezou/89f254421838b8fece935ee0e589d7fa
minioは、簡単に動いてしまうため、minioを使う人がIAM周りの設定をしなくなってきているのではと思う。開発用とであれば、別に気にすることはないが、インフラ周りをやっている人がそこらへんを気にしないでいるとかなり致命的だと思う。
Kopiaを真剣に調べていたらだいぶ、minioというかオブジェクトストレージに詳しくなった。オブジェクトロックのバケットの扱いがよくわかる。逆にちゃんと扱わないとオブジェクトロックはされるが、、、オブジェクトストレージの利用量がずーっと増大しちゃうこともわかった。独り言だが、これからそういうトラブルが急増しそう。消したくてもオブジェクトロックされているので、消せないという泣きっ面に蜂状態の惨劇が。今後、エントリーにするが、このエントリは、その序章の序章ということで。