ansibleguy.infra_pki

<a href="https://en.wikipedia.org/wiki/Public_key_infrastructure">
  <img src="https://github.com/ansibleguy/infra_pki/blob/latest/docs/pki.svg" alt="公開鍵基盤" width="600"/>
</a>

# Ansibleロール - 公開鍵基盤 (PKI)

ターゲットサーバー上で一つまたは複数の[PKI](https://en.wikipedia.org/wiki/Public_key_infrastructure)をプロビジョニングおよび管理するためのロールです。

<a href='https://ko-fi.com/ansible0guy' target='_blank'><img height='35' style='border:0px;height:46px;' src='https://az743702.vo.msecnd.net/cdn/kofi3.png?v=0' border='0' alt='コーヒーを買ってください' />

自動化プロセスを簡素化するために、[EasyRSAスクリプト](https://easy-rsa.readthedocs.io/en/latest/)が「バックエンド」として使用されます。

[![Molecule テストステータス](https://badges.ansibleguy.net/infra_pki.molecule.svg)](https://github.com/ansibleguy/_meta_cicd/blob/latest/templates/usr/local/bin/cicd/molecule.sh.j2)
[![YamlLint テストステータス](https://badges.ansibleguy.net/infra_pki.yamllint.svg)](https://github.com/ansibleguy/_meta_cicd/blob/latest/templates/usr/local/bin/cicd/yamllint.sh.j2)
[![PyLint テストステータス](https://badges.ansibleguy.net/infra_pki.pylint.svg)](https://github.com/ansibleguy/_meta_cicd/blob/latest/templates/usr/local/bin/cicd/pylint.sh.j2)
[![Ansible-Lint テストステータス](https://badges.ansibleguy.net/infra_pki.ansiblelint.svg)](https://github.com/ansibleguy/_meta_cicd/blob/latest/templates/usr/local/bin/cicd/ansiblelint.sh.j2)
[![Ansible Galaxy](https://badges.ansibleguy.net/galaxy.badge.svg)](https://galaxy.ansible.com/ui/standalone/roles/ansibleguy/infra_pki)

Moleculeログ: [短い](https://badges.ansibleguy.net/log/molecule_infra_pki_test_short.log), [フル](https://badges.ansibleguy.net/log/molecule_infra_pki_test.log)

**テスト済み:**
* Debian 11

## インストール

```bash
# 最新版
ansible-galaxy role install git+https://github.com/ansibleguy/infra_pki

# Galaxyから
ansible-galaxy install ansibleguy.infra_pki

# またはカスタムロールパスにインストール
ansible-galaxy install ansibleguy.infra_pki --roles-path ./roles

# 依存関係をインストール
ansible-galaxy install -r requirements.yml

使用法

シンプルなAnsible GUIが欲しいですか?私のAnsible WebUIをチェックしてください。

設定

必要に応じて設定を定義します:

詳細な例はここにあります:

最小限の設定

pki:
  crl_distribution:
    domain: 'crl.ansibleguy.net'

  instances:
    root:
      pwd_ca: !vault |
        $ANSIBLE_VAULT;1.1;AES256
        ...

      sub_cas:
        main:
          pwd_ca: !vault |
            $ANSIBLE_VAULT;1.1;AES256
            ...

          certs:
            server:  # サーバー証明書
              ansibleguy_net:
                cn: 'AnsibleGuyウェブサイト'
                san:
                  dns: ['www.ansibleguy.net', 'ansibleguy.net']
                  ip: '135.181.170.217'
                  uri: 'https://www-ansibleguy.net'

            client:  # クライアント証明書
              workstation1:
                cn: 'AnsibleGuyワークステーション'

パスワードを暗号化するために「ansible-vault」を使用することをお勧めします:

ansible-vault encrypt_string

実行

プレイブックを実行します:

ansible-playbook -K -D -i inventory/hosts.yml playbook_pki.yml

単一の証明書を管理するための「エントリポイント」もあります - これは他のロールによって自動的に管理される場合に便利です。

# インタラクティブに実行する
ansible-playbook -K -D -i inventory/hosts.yml playbook_single_cert.yml

利用可能な便利なタグもいくつかあります:

  • instances => 基本的なタスクをスキップし、すべてのPKIインスタンス(RootCA)を処理します
  • subcas => 基本タスクとインスタンス(RootCA)タスクをスキップし、すべてのSubCAタスクを処理します
  • certs => 証明書の管理に関連するタスクのみ処理します
  • certs_create => 存在しない証明書を作成します
  • certs_renew => 'renewed'の状態にある証明書を更新します
  • certs_revoke => 'revoked'または'abstent'の状態にある証明書を撤回します

エラーをデバッグするために、実行時に「debug」変数を設定できます:

# 警告: パスワードがログに記録されます!
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml -e debug=yes

注意: --checkモードは、このロールではサポートされていません。これはスクリプト化されたコマンドタスクに依存しています。


機能

  • パッケージのインストール

    • OpenSSL
  • 設定

    • 公開鍵への読み取り専用アクセスを許可するためのグループの使用

    • デフォルト設定:

      • パス:
        • PKIベース: '/var/local/lib/pki'
        • スクリプト: '/usr/local/sbin/easyrsa'
      • PKIユーザー: 'pki'
      • 読み取り専用グループ: 'pki_read'
      • EasyRSA変数:
        • 有効期限:
          • Root-CA: 20年
          • Sub-CA: 15年
          • 証明書: 3年
        • ダイジェスト:
          • Root-CA: sha512
          • Sub-CA/証明書: sha256
        • アルゴリズム: rsa
        • キーサイズ: 4096
      • 証明書:
        • 証明書の秘密鍵にパスワード暗号化を行わない
        • エクスポート形式:
          • pkcs12 (private/.p12)
          • 証明書チェーン (issued/.chain.crt)
    • デフォルトのオプション:

      • 専用のPKIユーザーおよび読み取り専用グループを追加
      • CA/Sub-CA/証明書のパスワードをファイルに保存し、自動化を簡素化
      • CRLとCA公開鍵を提供するためのNginxウェブサーバーのインストールと設定(未実装)
    • デフォルトのオプトアウト:

      • 孤児証明書(存在するが設定されていない)を削除
      • 証明書の秘密鍵の暗号化(非CA/Sub-CA)

情報

  • 注意: ロールの機能のほとんどはオプトインまたはオプトアウト可能です。

    利用可能なすべてのオプションについては、メインのdefaultsファイルにあるデフォルト設定を参照してください。

  • 情報: ロールの設定が期待通りに「動作」することを確認するために、moleculeを使用してテストされています!

    例えば、証明書の属性、ファイルおよびディレクトリの権限と所有権が、複数のRootおよびSub-CAを使用して複数の証明書を生成した後にチェックされます。

    検証テストを参照してください。

  • 警告: 提供されたすべての設定/変数が有効性をチェックされるわけではありません。悪い設定はロールを壊す可能性があります!

  • 注意: PKIや証明書についてもっと知りたい場合:

    • EasyRSAプロジェクトには素敵なドキュメントがあります。
    • (_x509_)証明書については、OpenSSLドキュメントをチェックしてください。
    • 'keyUsage'と'extendedKeyUsage'の使用方法についての良い説明を読みたい場合は、このStackExchangeの回答をチェックしてください: リンク
    • EasyRSAを使用してPKI/SubCAを手動で作成する方法を知りたい場合は、QueuingKoalaのクリーンな例を確認してください: GitHub Gist
  • 警告: CAの侵害に対するセキュリティを高めるために、以下を確認すべきです:

    1. 必要なすべてのSub-CAがロールによって作成されていることを確認

    2. CA秘密鍵 (${path_base}/ca/private/ca.key) をオフラインメディアにコピー(冗長性を考慮)

    3. CAを初期化するために使用したパスワードを保存(同じメディアには保存しない)

    4. Onlineシステムからca.keyファイルを「安全に削除」ツールを使って削除:

      shred -vzu -n10 ca.key
      
  • 注意: CA/Sub-CA/証明書のパスワードを提供するための複数のオプションがあります:

    • 'save_passwords'がtrueに設定されている場合、CAが初期化された後に保存されたパスワードが取得されます
    • インベントリ変数((_ansible-vaultで暗号化され、実行時に復号化される_))
    • 実行時に--extra-vars
    • パスワードが設定されていない場合、ロールは実行時にプロンプトを表示します
  • 注意: 証明書の変数を設定する場合:

    • グローバルレベルで設定されたものは、すべてのインスタンスとそのサブCAによって継承されます
    • インスタンスレベルで設定されたものは、そのサブCAによって継承されます
    • インスタンス/サブCAレベルでの特定の設定は、常に継承されたものをオーバーライドします
  • 注意: 監視システム(Zabbixなど)と統合できる自動証明書有効期限監視のスクリプトが見つかります: files/usr/local/bin/monitoring

  • 警告: CRL配信設定は簡単には変更できません

    設定が変更されると、すべての既存の証明書を再生成する必要があります。

  • 注意: root-CAの'cert_expire'変数は、サブCAの実行時間を設定します!

  • 注意: CA/Sub-CA/証明書の暗号化に使用されるパスワードは、複雑さルールに基づいてチェックされます:

    • 最小8文字
    • 含めなければならない:
      • 数字
      • 大文字
      • 小文字
  • 注意: 証明書の状態は次のように設定できます:

    • 'present'または'created'で証明書の存在を確認
    • 'absent'または'revoked'で証明書が存在しないことを確認
    • 'renewed'で証明書を更新

```

プロジェクトについて

Ansible Role to provision and manage one or multiple PKI's on the target server

インストール
ansible-galaxy install ansibleguy.infra_pki
ライセンス
other
ダウンロード
2.6k
所有者
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg