Ansible Vaultとは?

Ansible Vaultは、Ansibleの組み込み機能で、パスワード、APIキー、証明書などの機密データを暗号化し、playbookやroleとともにバージョン管理に安全に保存できます。AES-256対称暗号化とPBKDF2鍵導出を使用しており、暗号化と復号化の両方に単一のパスワードが使用されます。Vault暗号化コンテンツは$ANSIBLE_VAULT;1.1;AES256ヘッダーで識別され、その後に16進数エンコードされた暗号文が続きます。

Ansible Vaultは、基本的なDevOpsの課題を解決します。インフラストラクチャコードと同じリポジトリに機密情報を保持しながら、それらを公開しないようにするにはどうするかという課題です。別のシークレットストアを管理したり、環境変数に依存したりする代わりに、チームは暗号化されたファイルをGitに直接コミットし、playbook実行時にランタイムで復号化できます。

ツールの説明

このツールは、ブラウザ内でAnsible Vaultコンテンツを直接暗号化および復号化します。Vault パスワードと平文を入力して、完全に互換性のある暗号化されたvault blobを生成するか、既存のvault blobを貼り付けて元のシークレットを表示します。データはブラウザから送信されません。すべての暗号化操作はクライアント側で実行されます。

平文の暗号化:

入力(平文):

db_password: s3cur3P@ss!

出力(暗号化vault):

$ANSIBLE_VAULT;1.1;AES256
33383239333036363833303565653032383832663162356533343630623030613133623032636566
6536303436646561356461623866386133623462383832620a646363626137626635353462386430
34333937313366383038346135656563316236313139333933383139376333353266666436316536
6335376265313432610a313537363637383264646261303637646631346137393964386432313633
3666

Vault コンテンツの復号化:

上記の暗号化ブロックを正しいパスワードで貼り付けて、元のdb_password: s3cur3P@ss!値を復元します。

機能

  • AES-256暗号化はAnsible Vault 1.1形式と完全に互換
  • クライアント側のみ — データはサーバーに送信されません
  • 単一のパスワードフィールドで暗号化と復号化の両方をサポート
  • 入力時のライブプレビュー付きの即座の変換
  • 複数行のシークレット、YAMLフラグメント、任意のテキストに対応

ユースケース

  • Ansibleplaybookを含むGitリポジトリにコミットする前に、新しいシークレットを迅速に暗号化する
  • Ansibleをローカルにインストールする必要なく、デバッグ中にvaultコンテンツを復号化して検査する
  • 共有されたvaultパスワードを使用してブラウザで復号化できるチームメンバーと暗号化されたシークレットを共有する

動作原理

Ansible Vault 1.1は以下のプロセスを使用します:

  1. 鍵導出 — PBKDF2-HMAC-SHA256は、パスワードとランダムなsalt(10,000回の反復)から80バイトの鍵を導出します。鍵は32バイトの暗号化鍵、32バイトのHMAC鍵、および16バイトのIVに分割されます。
  2. 暗号化 — 平文は導出された鍵とIVを使用してAES-256-CTRで暗号化されます。
  3. 認証 — HMAC-SHA256が暗号文に対して計算され、整合性を確保します。
  4. エンコーディング — salt、HMACダイジェスト、および暗号文は16進数エンコードされ、$ANSIBLE_VAULT;1.1;AES256ヘッダーの下に結合されます。

復号化はプロセスを逆にします。パスワードは同じ鍵を再導出し、HMACを検証し、暗号文を復号化します。

制限事項

  • AES-256暗号化を使用したAnsible Vault 1.1形式のみをサポート
  • 複数パスワード設定用のvault IDラベルをサポートしていません
  • 大きなファイルは、CPU集約的な鍵導出ステップのため、UIの短い遅延を引き起こす可能性があります