ricsanfre.vault
Ansibleロール: Hashicorp Vaultサーバーのインストールと設定
このロールは、LinuxサーバーにHashicorp Vaultをインストールし、設定します。
要件
特になし
ロール変数
利用可能な変数は以下にリストされており、デフォルト値が設定されています(defaults\main.yaml
を参照)。
Vaultサーバーのインストール詳細
VaultのUNIXユーザー/グループ
vault_group: vault vault_user: vault
インストールするVaultパッケージとバージョン
vault_version: 1.12.2
Vaultのインストールパス
vault_bin_path: /usr/local/bin vault_config_path: /etc/vault vault_tls_path: /etc/vault/tls vault_plugin_path: /usr/local/lib/vault/plugins vault_data_path: /var/lib/vault vault_log_path: /var/log/vault
VaultのTLS設定
vault_enable_tls: false vault_key: "" vault_cert: "" custom_ca: false vault_ca: "" vault_dns: ""
TLSの設定を有効にするには、
vault_enable_tls
をtrueに設定し、プライベートキーと公開証明書をvault_key
とvault_cert
変数に読み込みます。カスタムCAを使用してTLS証明書に署名した場合は、
custom_ca
をtrueに設定し、CA証明書をvault_ca
変数に読み込みます。証明書を発行するVaultサービスの完全修飾ドメイン名(FQDN)を
vault_dns
に設定します。これらは、以下のようにファイルから読み込むことができます:
- name: TLSキーと証明書をファイルから読み込む set_fact: vault_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}" vault_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}" vault_ca: "{{ lookup('file','certificates/ca.crt') }}"
Vaultの初期化
vault_init: false vault_key_shares: 1 vault_key_threshold: 1 vault_keys_output: "{{ vault_config_path }}/unseal.json"
Vaultを自動で初期化するには、
vault_init
をtrueに設定し、作成する未封印キーの数を指定するためにvault_key_shares
とvault_key_threshold
変数を提供します。初期化により、キーとルートトークンを含む
vault_keys_output
というjsonファイルが生成されます。Vaultの未封印と未封印サービス
vault_unseal: false vault_unseal_service: false
Vaultを自動で未封印するには、
vault_unseal
をtrueに設定します。未封印プロセスは、vault_keys_output
ファイルからキーを使用します。Systemdサービスを作成することで、Vaultサービスが開始または再起動されるたびに自動で未封印できます。これを有効にするには、
vault_unseal_service
をtrueに設定します。このサービスもvault_keys_output
ファイルを使用します。KV秘密エンジン
KVバージョン2の秘密エンジンを自動で有効にするために、以下の変数を指定します。
vault_kv_secrets: path: secret
KVバージョン2がパス
secret
で有効になります。ポリシー
ACLポリシーを自動で設定するために、名前とHCLコンテンツを指定します。
policies: - name: write hcl: | path "secret/*" { capabilities = [ "create", "read", "update", "delete", "list", "patch" ] } - name: read hcl: | path "secret/*" { capabilities = [ "read" ] }
依存関係
特になし
例プレイブック
以下のプレイブックは、Vaultをインストールおよび設定し、TLSを有効にし、カスタムCA署名のSSL証明書を生成します。
Vaultを初期化し、未封印します。また、secret
パスでKVバージョン2を有効にし、いくつかのポリシー(read
およびwrite
)を作成します。
---
- name: Vaultサーバーのインストールと設定
hosts: vault-server
become: true
gather_facts: true
vars:
server_hostname: vault.ricsanfre.com
ssl_key_size: 4096
key_type: RSA
country_name: ES
email_address: [email protected]
organization_name: Ricsanfre
ansible_user: root
pre_tasks:
- name: カスタムCAを生成
include_tasks: tasks/generate_custom_ca.yml
args:
apply:
delegate_to: localhost
become: false
- name: minio用のカスタムCA署名SSL証明書を生成
include_tasks: tasks/generate_ca_signed_cert.yml
args:
apply:
delegate_to: localhost
become: false
- name: TLSキーと証明書を読み込む
set_fact:
vault_key: "{{ lookup('file', 'certificates/' + server_hostname + '.key') }}"
vault_cert: "{{ lookup('file', 'certificates/' + server_hostname + '.pem') }}"
vault_ca: "{{ lookup('file', 'certificates/CA.pem') }}"
roles:
- role: ricsanfre.vault
vault_enable_tls: true
custom_ca: true
vault_init: true
vault_unseal: true
vault_unseal_service: true
tls_skip_verify: true
display_init_response: true
# KVを設定
vault_kv_secrets:
path: secret
# ポリシー
policies:
- name: write
hcl: |
path "secret/*" {
capabilities = [ "create", "read", "update", "delete", "list", "patch" ]
}
- name: read
hcl: |
path "secret/*" {
capabilities = [ "read" ]
}
pre-tasks
セクションには、カスタムCAおよびVaultのプライベートキーと証明書を生成し、これらをvault_key
、vault_cert
、vault_ca
変数に読み込むタスクが含まれています。
generate_custom_ca.yml
はカスタムCAを生成するためのタスクを含んでいます:
---
- name: CAキーを作成
openssl_privatekey:
path: certificates/CA.key
size: "{{ ssl_key_size | int }}"
mode: 0644
register: ca_key
- name: CA CSRを作成
openssl_csr:
privatekey_path: certificates/CA.key
common_name: Ricsanfre CA
use_common_name_for_san: false
basic_constraints:
- 'CA:TRUE'
basic_constraints_critical: true
key_usage:
- keyCertSign
key_usage_critical: true
path: certificates/CA.csr
register: ca_csr
- name: CA CSRに署名
openssl_certificate:
path: certificates/CA.pem
csr_path: certificates/CA.csr
privatekey_path: certificates/CA.key
provider: selfsigned
register: ca_crt
generate_ca_signed_certificate.yml
はVaultのキーとカスタムCAに署名された証明書を生成するためのタスクを含んでいます:
---
- name: プライベートキーを作成
openssl_privatekey:
path: "certificates/{{ server_hostname }}.key"
size: "{{ ssl_key_size | int }}"
type: "{{ key_type }}"
mode: 0644
- name: CSRを作成
openssl_csr:
path: "certificates/{{ server_hostname }}.csr"
privatekey_path: "certificates/{{ server_hostname }}.key"
country_name: "{{ country_name }}"
organization_name: "{{ organization_name }}"
email_address: "{{ email_address }}"
common_name: "{{ server_hostname }}"
subject_alt_name: "DNS:{{ server_hostname }},IP:{{ ansible_default_ipv4.address }},IP:127.0.0.1"
- name: CA署名CSR
openssl_certificate:
csr_path: "certificates/{{ server_hostname }}.csr"
path: "certificates/{{ server_hostname }}.pem"
provider: ownca
ownca_path: certificates/CA.pem
ownca_privatekey_path: certificates/CA.key
ライセンス
MIT
著者情報
作成者:リカルド・サンチェス(ricsanfre)