2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MiniOコンテナ起動時にバケットを作成するようにdocker-compose.ymlに記載する(匿名ユーザーに対するアクセスポリシーの設定)

Last updated at Posted at 2023-10-21

概要

  • MiniOコンテナを自動作成するスクリプトを簡単に紹介する。

方法

  • 下記のようなスクリプトを実行することでコンテナの作成とバケットのポリシーの設定をする事ができる。

    until (/usr/bin/mc config host add myminio http://minio:ポート数 ルートユーザー名 ルートユーザーパスワード) do echo '...waiting...' && sleep 1; done;
    /usr/bin/mc mb myminio/作成したいバケット名;
    /usr/bin/mc anonymous set 未認証者のバケットアクセスポリシー myminio/作成したいバケット名;
    
  • docker-compose.ymlの記載は下記のようになる。

    docker-compose.yml
    minio:
      build:
        context: ./.docker/minio
        dockerfile: Dockerfile
      volumes:
        - "./minio/data:/data:delegated"
      ports:
        - ${MINIO_API_HOST_PORT}:${MINIO_API_CONTAINER_PORT}
        - ${MINIO_CONSOLE_HOST_PORT}:${MINIO_CONSOLE_CONTAINER_PORT}
      environment:
        - MINIO_ROOT_USER=${MINIO_ROOT_USER}
        - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
        - MINIO_SERVER_ADDRESS=${MINIO_SERVER_ADDRESS}
        - MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME}
      command: server /data --console-address :${MINIO_CONSOLE_HOST_PORT}
    createbuckets:
      image: minio/mc
      depends_on:
        - minio
      environment:
        - MINIO_API_CONTAINER_PORT=${MINIO_API_CONTAINER_PORT}
        - MINIO_ROOT_USER=${MINIO_ROOT_USER}
        - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
        - MINIO_SERVER_ADDRESS=${MINIO_SERVER_ADDRESS}
        - MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME}
      entrypoint: >
        /bin/sh -c "
        until (/usr/bin/mc config host add myminio http://minio:$$MINIO_API_CONTAINER_PORT $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD) do echo '...waiting...' && sleep 1; done;
        /usr/bin/mc mb myminio/$$MINIO_BUCKET_NAME;
        /usr/bin/mc anonymous set none myminio/$$MINIO_BUCKET_NAME;
        exit 0;
        "
    
  • docker-compose.ymlと同階層に.envを定義して下記の様に記載した。(一部値は都合上マスクする。)

    .env
    # minio
    MINIO_API_HOST_PORT=9000
    MINIO_API_CONTAINER_PORT=9000
    MINIO_CONSOLE_HOST_PORT=9001
    MINIO_CONSOLE_CONTAINER_PORT=9001
    MINIO_ROOT_USER=root_user
    MINIO_ROOT_PASSWORD=XXXXXXXXXXXX
    MINIO_BUCKET_NAME=hoge
    MINIO_SERVER_ADDRESS=http://localhost:9000
    
  • すでに既存設定でバケットが作られている場合はrm -rf ./minio/data/*を実行し、MiniOの永続化データを削除する。

  • 下記コマンドを実行し、docker-compose.ymlに記載したスクリプトを実行する。

    docker-compose up -d
    

バケットポリシーについて

  • バケットポリシーはスクリプトの下記の部分で設定している。

    /usr/bin/mc anonymous set none myminio/$$MINIO_BUCKET_NAME;
    
  • 上記のnoneがポリシーの指定に当たる。

  • このポリシーは「未認証者」に対するポリシーである。

  • ポリシーは下記の種類がある。

    • none: S3でいうとPrivateバケット(ただし、「未認証者」たる匿名ユーザー向けのポリシー設定なため、純粋なPrivateバケットの設定とは異なるかもしれない。)
    • download: ダウンロードのみ許可
    • upload: アップロードのみ許可
    • public: S3でいうとPublicバケット
  • 参考程度にそれぞれのポリシーを割り当ててバケットを作成したときのMiniO上の見た目を下記にまとめる。

    • none: S3でいうとPrivateバケット /usr/bin/mc anonymous set none myminio/$$MINIO_BUCKET_NAME;でバケット作成

      • AccessはR/Wと表示される。

        MinIO_Console.png

      • バケット詳細に入るとAccessが「Private」になっている。Access Policyが「n/a」になっているが、どうやらn/aで問題ないらしい。(匿名ユーザーに対するアクセスポリシーを設定しており、バケット全体のポリシー設定ではない。Access Policyはバケット全体のポリシーを表しているらしい、したがってn/aでも問題なく設定はできている模様。逆にどうやったらコマンドでバケット全体のポリシーを設定する事ができるんだ?)

        MinIO_Console.png

    • download: ダウンロードのみ許可/usr/bin/mc anonymous set download myminio/$$MINIO_BUCKET_NAME;でバケット作成

      • AccessはR/Wと表示される。

        MinIO_Console.png

      • Access Policyが「custom」になりJSONが記載されていた。

        MinIO_Console.png
        MinIO_Console.png

    • upload: アップロードのみ許可 /usr/bin/mc anonymous set upload myminio/$$MINIO_BUCKET_NAME;でバケット作成

      • AccessはR/Wと表示される。

        MinIO_Console.png

      • Access Policyが「custom」になりJSONが記載されていた。

        MinIO_Console.png

    • public: S3でいうとPublicバケット /usr/bin/mc anonymous set public myminio/$$MINIO_BUCKET_NAME;でバケット作成

      • AccessはR/Wと表示される。

        MinIO_Console.png

      • バケット詳細だとAccessは「Public」と表示される。Access Policyは「public」と表示される。

        MinIO_Console.png

おまけ

  • docker-compose up -bを実行してもエラーも出ず、コンテナも作られない場合、下記の様にログをターミナルで見ることでなにかつかめるかもしれない。

  • 自分の環境でいうとログを見るコマンドは下記になる。

    docker-compose logs createbuckets
    

参考文献

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?