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_port
とminio_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の分散ストレージ要件を満たすために異なるディスクにデータディレクトリが必要です。
例:
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_key
とminio_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
パッケージもインストールします。バケット作成時に、
private
、read-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_user
とadmin_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)