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_keyvault_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_sharesvault_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_keyvault_certvault_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)

プロジェクトについて

Vault hashicorp installation and configuration role

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