ricsanfre.minio

Ansibleロール:Minioサーバーのインストールと設定

このロールは、LinuxサーバーにMinioをインストールし、設定します。

要件

特になし

ロール変数

使用可能な変数は、デフォルト値と共に以下の通りです(defaults\main.yamlを参照)。

  • MinioサーバーとMinioクライアントをインストールするかどうか

    minio_install_server: true
    minio_install_client: true
    
  • Minioサーバーのインストール詳細

    Minio UNIXユーザー/グループ

    minio_group: minio
    minio_user: minio
    

    サーバー設定を格納するMinioインストールディレクトリ(minio_etc_dir)、TLS証明書(minio_cert_dir)、ユーザーアクセスポリシー(minio_policy_dir

    minio_etc_dir: /etc/minio
    minio_cert_dir: "{{ minio_etc_dir }}/ssl"
    minio_policy_dir: "{{ minio_etc_dir }}/policy"
    

    MinioサーバーのIPアドレス(minio_server_address)。空の場合はすべての利用可能なIPアドレスでリッスンします。サーバーおよびコンソールのリッスニングポート(minio_server_portminio_console_port

    minio_server_port: "9091"
    minio_server_addr: ""
    minio_console_port: "9092"
    

    Minio管理者ユーザーとパスワード

    minio_root_user: ""
    minio_root_password: ""
    

    Minioサイトのリージョン

    minio_site_region: "eu-west-1"
    

    Minioデータディレクトリ(minio_server_datadirs)と、それらが存在しない場合の作成を強制するかどうか(minio_server_make_datadirs

    minio_server_make_datadirs: true
    minio_server_datadirs:
      - /var/lib/minio
    
    minio_server_cluster_nodes: []
    

    分散クラスター(マルチノード・マルチドライブ展開)を作成するためのノードリストを設定します。

    このモードでは、Ansibleはサーバーデータディレクトリ(minio_serverdata_dirs)を作成しますが、サーバー起動のためにこのリスト(minio_server_cluster_nodes)を使用します。

    マルチドライブ構成では、Minioの分散ストレージ要件を満たすために異なるディスクにデータディレクトリが必要です。

    ドキュメント(https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html)では、すべてのノードに同じ構成を使用し、連番ホスト名とローカルストレージの順次マウントを推奨しています。

    例:

    minio_server_datadirs:
      - '/mnt/disk1/minio'
      - '/mnt/disk2/minio'
      - '/mnt/disk3/minio'
      - '/mnt/disk4/minio'
    minio_server_cluster_nodes:
      - 'https://minio{1...4}.example.net:9091/mnt/disk{1...4}/minio'
    
  • Minioクライアントの設定

    接続エイリアス名 minio_alias と、SSL証明書の検証を行うかどうか(minio_validate_certificates

    minio_validate_certificate: true
    minio_alias: "myminio"
    
  • TLSの設定

    TLSの設定を有効にするには、minio_enable_tls を true に設定し、秘密鍵と公開証明書を minio_keyminio_cert 変数に読み込む必要があります。

    ファイルから読み込むには、以下のようにAnsibleタスクを使えます。

    - name: Load tls key and cert from files
    set_fact:
      minio_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}"
      minio_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}"
    

    minio_url は、MinIOサーバーのTLS証明書にIPの代替名(SAN)が含まれていない場合に必要かもしれません。 MINIO_SERVER_URL 環境変数の定義を参照してください。

    minio_url: "https://minio.ricsanfre.com:{{ minio_server_port }}"
    
  • 作成するバケット

    変数 minio_buckets は、提供されたバケットのリストを作成し、特定のポリシーを適用します。バケットを作成するために、Alexis FacquesのAnsibleモジュールの修正バージョンを使用します(https://github.com/alexisfacques/ansible-module-s3-minio-bucket)

    minio_buckets:
      - name: bucket1
        policy: read-only
      - name: bucket2
        policy: read-write
        object_lock: false
      - name: bucket3
        policy: private
        object_lock: true
    

    注意:このモジュールは、Python API(minio Pythonパッケージ)を使用してMinioサーバーへリモート接続します。ロールは、PIPがインストールされ、minioパッケージもインストールします。

    バケット作成時に、privateread-only、または read-write の3種類のポリシーを指定できます。

    Minioのオブジェクトロックも有効または無効にできます:true または false

  • 作成するユーザーとバケットのACL

    ユーザーは、minio_users 変数を使用して自動的に作成できます。具体的には、各ユーザーに対して3つの変数(name(ユーザー名)、password(ユーザーパスワード)、buckets_acl(バケットのリストと各バケットに付与されたアクセス権の種類(read-onlyまたはread-write)))を提供できます。このロールは、自動的にポリシーのJSONファイルを作成し、サーバーにロードします。

    定義された read-only および read-write ポリシーは、あらかじめ定義されたアクセス文を含んでいます。custom ポリシーを使用してカスタムポリシーを定義することもできます。この場合、アクセス文のリストを提供する必要があります。

    minio_users:
    - name: user1
      password: supers1cret0
      buckets_acl:
        - name: bucket1
          policy: read-write
        - name: bucket2
          policy: read-only
        - name: bucket3
          policy: custom
          custom:
            - rule: |
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:DeleteObject",
                    "s3:PutObject",
                    "s3:AbortMultipartUpload",
                    "s3:ListMultipartUploadParts"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket3/*"
                ]
            - rule: |
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket3"
                ]
    

    上記の設定により、次のpolicy.jsonファイルがユーザーに対して作成されます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket1",
                "arn:aws:s3:::bucket1/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket2",
                "arn:aws:s3:::bucket2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListMultipartUploadParts",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket3/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket3"
            ]
        }
    ]
}
  • Prometheusベアラートークンを生成

    minio_prometheus_bearer_token: false
    prometheus_bearer_token_output: "{{ minio_etc_dir }}/prometheus_bearer.json"
    

    minio_prometheus_bearer_token を true に設定すると、/etc/minio/prometheus_bearer.json というファイルが生成され、次のコマンドを実行した結果が含まれます:

    mc admin prometheus generate myminio -json

  • システムパッケージにMinIOのpipライブラリをインストール

    pipモジュールのドキュメントに記載されているように:

    外部管理としてマークされたPythonインストール(PEP668に定義されています)は、仮想環境を使用するか、環境変数 PIP_BREAK_SYSTEM_PACKAGES=1 を設定しない限り、pipのバージョン >= 23.0.1によって更新できません。

    これ(およびその他のpip環境変数)は、次のように minio_pip_environment_vars で設定できます。

    minio_pip_environment_var:
     PIP_BREAK_SYSTEM_PACKAGES: "1"
    
  • サイトレプリケーション

    変数 replication_sites は、複数の独立したMinIOデプロイメントのリストを作成し、レプリカクラスターとして設定します。サイト間で何がレプリケートされるかについての詳細はMinIOのドキュメントを参照してください(https://min.io/docs/minio/linux/operations/install-deploy-manage/multi-site-replication.html)

    replication_sites:
       - name: myminio2
         url: "http://replication.minio.com:9091"
         admin_user: "myminio2"
         admin_password: "supers1cret02"
    

    urlは、現在設定されているサイトからレプリケートされるサイトのURLです。 admin_useradmin_password 変数は、レプリケートされるサイトに対する管理者権限を持つ認証情報です。

    site-replicationのドキュメントに記載された注意点:

    • 最初に、レプリケーションのために追加されたサイトのうちの1つのみがデータを持つことができます。サイトレプリケーションが成功裏に設定された後、このデータが他のデータなしのサイトにレプリケートされます。以降、任意のサイトにオブジェクトを書き込むことができ、それらはすべての他のサイトにレプリケートされます。
    • レプリケートされたサイトからのサイトの削除は、一旦設定されると許可されません。
    • すべてのサイトは、もしあれば同じ外部IDPを使用する必要があります。
    • SSE-S3またはKMSによるSSE-KMS暗号化の場合、すべてのサイトが中心のKMSデプロイメントにアクセスできる必要があります。これは中央KESサーバーまたは複数のKESサーバー(つまり、サイトごとに1つ)を中央KMS(ボールト)サーバーに接続することによって実現できます。

依存関係

特になし

例:プレイブック

以下のプレイブックは、Minioサーバーとクライアントをインストールおよび設定し、TLSを有効にして自己署名のSSL証明書を生成します。また、いくつかのバケットとユーザーを適切なACLと共に作成します。

---
- name: Install and configure Minio Server
  hosts: minio
  become: true
  gather_facts: true
  vars:
    server_hostname: minio.example.com
    ssl_key_size: 4096
    ssl_certificate_provider: selfsigned

  pre_tasks:
    - name: Generate self-signed SSL certificates for minio
      include_tasks: generate_selfsigned_cert.yml
      args:
        apply:
          delegate_to: localhost
          become: false
    - name: Load tls key and cert
      set_fact:
        minio_key: "{{ lookup('file','certificates/' + inventory_hostname + '_private.key') }}"
        minio_cert: "{{ lookup('file','certificates/' + inventory_hostname + '_public.crt') }}"

  roles:
    - role: ricsanfre.minio
      minio_root_user: "miniadmin"
      minio_root_password: "supers1cret0"
      minio_enable_tls: true
      minio_url: "https://{{ server_hostname }}:{{ minio_server_port }}"
      minio_buckets:
        - name: bucket1
          policy: read-write
        - name: bucket2
          policy: read-write
      minio_users:
        - name: user1
          password: supers1cret0
          buckets_acl:
            - name: bucket1
              policy: read-write
            - name: bucket2
              policy: read-only

pre-tasks セクションには、秘密鍵と自己署名の証明書を生成し、それを minio_key および minio_cert 変数に読み込むタスクが含まれています。

generate_selfsigned_cert.ymlには、秘密鍵とSSL自己署名証明書を生成するタスクが含まれます:

---
- name: Create private certificate
  openssl_privatekey:
    path: "certificates/{{ inventory_hostname }}_private.key"
    size: "{{ ssl_key_size | int }}"
    mode: 0644

- name: Create CSR
  openssl_csr:
    path: "certificates/{{ inventory_hostname }}_cert.csr"
    privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
    common_name: "{{ server_hostname }}"

- name: Create certificates for keystore
  openssl_certificate:
    csr_path: "certificates/{{ inventory_hostname }}_cert.csr"
    path: "certificates/{{ inventory_hostname }}_public.crt"
    privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
    provider: "{{ ssl_certificate_provider }}"

ライセンス

MIT

著者情報

作成者:リカルド・サンチェス (ricsanfre) バケット作成のAnsibleモジュールは、Alexis Facquesのモジュールに基づいています(https://github.com/alexisfacques/ansible-module-s3-minio-bucket)

プロジェクトについて

minio installation and configuration role

インストール
ansible-galaxy install ricsanfre.minio
ライセンス
mit
ダウンロード
29.4k
所有者
Telecom engineer.