49/120


Ansible Vault


変数ファイルの「パスワード」セクション
暗号化処理が必要
暗号化->CPUの大量使用->必要な部分のみ暗号化->再使用テクノロジー
ファイル、部分テキストの暗号化
  • ファイル・レベル
    全集
    在庫変数ファイル
    include/importタスクファイル
  • テキスト・レベル
    変数値
  • Valut Password


    接続管理ノード->キーペア検証
    [vagrant@controller ~]$ ansible-vault create -h
    optional arguments:
    	--ask-vault-pass      ask for vault password
        --vault-password-file VAULT_PASSWORD_FILES
    
    #ansible-playbook 에도 볼트와 관련된 옵션들이 존재
    [vagrant@controller ~]$ ansible-playbook -h
    optional arguments:
      --ask-vault-pass      ask for vault password
       --vault-id VAULT_IDS  the vault identity to use
      --vault-password-file VAULT_PASSWORD_FILES
    AESアルゴリズムの使用(対称鍵)
    鍵は自分で持てばいいです.
    コントロールノードには、Playbookから参照されるファイルが存在します->私のコンピュータに保存されます
    実際の実行時にリリース->暗号化されたデータをメモリに格納し、メモリからリリース->再生
    ネットワークは私のコンピュータ上で実行されるので、対称鍵を使用する必要はありません.
    速度比較対称鍵は公開鍵よりも速い->逆に、公開鍵の性能は対称鍵よりも遅い->数学的なアルゴリズム->暗号解読鍵が異なるため、コストが高い.
  • 単一のパスワード->Aユーザは、Bユーザのコンテンツ->鍵が同じであることを確認することができるので、
  • マルチパスワード->ユーザーごとに異なるパスワード
  • 使用方法

    ansible-vault [SUB-COMMAND] <FILE>

    create


    暗号化する空のファイルを作成
    [vagrant@controller vault]$ ansible-vault create a.yaml
    New Vault password: 
    Confirm New Vault password:
    
    [vagrant@controller vault]$ cat a.yaml 
    $ANSIBLE_VAULT;1.1;AES256
    64656462623230313931313839353863376266353035386337393837323631383163396361316131
    6631343335303666393439666464656233316465613063330a353762323230373065633934393065
    暗号化済み->手動で変更しないでください
    アシュキパスワード , Unicode

    view


    暗号化ファイルの表示
    [vagrant@controller vault]$ ansible-vault view a.yaml 
    Vault password: 
    - hosts: 192.168.100.11
      tasks:
        - debug:
            msg: hello world

    edit


    暗号化ファイルの変更
    [vagrant@controller vault]$ ansible-vault edit a.yaml 
    Vault password:

    decrypt


    暗号化されたファイルの復号化
    [vagrant@controller vault]$ ansible-vault decrypt a.yaml 
    Vault password: 
    Decryption successful
    [vagrant@controller vault]$ cat a.yaml 
    - hosts: 192.168.100.11
      tasks:
        - debug:
            msg: hello world

    encrypt


    既存ファイルの暗号化
    [vagrant@controller vault]$ ansible-vault encrypt a.yaml 
    New Vault password: 
    Confirm New Vault password: 
    Encryption successful
    [vagrant@controller vault]$ cat a.yaml 
    $ANSIBLE_VAULT;1.1;AES256
    39373862393762613234346535356536393436356363373238306466313436393431656538353338
    6662643565346432376264353930666664313030393035340a613835663363386137666262336633

    rekey


    暗号化ファイルのパスワードをリセット
    [vagrant@controller vault]$ ansible-vault rekey a.yaml 
    Vault password: 
    New Vault password: 
    Confirm New Vault password: 
    Rekey successful

    --vault-password-file VAULT_PASSWORD_FILES


    --ask-valuet-passデフォルトオプション
  • のパスワードのみを格納するファイル
  • を作成します.
    [vagrant@controller vault]$ echo "P@ssw0rd" > vaultpass
    [vagrant@controller vault]$ cat vaultpass 
    P@ssw0rd
    パスワードが入力されていない場合、ファイル内でパスワードを使用してセキュリティ記憶オプション
  • を実行する
    $ ansible-vault [SUB-COMMAND} <FILE> --vault-password-file vaultpass
  • rekey既存ファイルと新しく作成したファイルをオプション
  • として指定
    $ ansible-vault rekey --help
    optional arguments:
    	-new-vault-password-file NEW_VAULT_PASSWORD_FILE
                            new vault password file for rekey
    $ ansible-vault rekey a.yaml --vault-password-file valutpass --new-vault-passwod-file newvaultpass
    Ansableコントローラを併用してsshを接続します.
    sudo権限を持つシステムは、他のユーザーにアクセスできます.
    ルートファイルを渡さなければよかったのですが、渡さなければならないとき->パスワードファイルは安全ではないかもしれません

    パスワードファイルのパスを翻訳可能設定ファイルに設定

    $ more /etc/ansible/ansible.cfg
    ---
    # If set, configures the path to the Vault password file as an alternative to
    # specifying --vault-password-file on the command line.                     
    #vault_password_file = /path/to/vault_password_file
    ---
    [vagrant@controller vault]$ vi ansible.cfg
    [defaults]
    vault_password_file = vaultpass
    -vault password-file vaultpassオプションなし

    安全で快適に金庫を使う方法は可能です。cfg


    非表示のパスワードファイルを指定します.
    [defaults]
    vault_password_file = ./.vaultpass
    .vaultpass
    P@ssw0rd
    パスワードファイルの所有者のみにアクセス権を設定
    chmod 600 .vaultpass

    暗号化されたシナリオの実行


    ダイレクト入力
  • パスワード実行
  • ansible-playbook plaintext.yaml --ask-vault-pass
  • パスワードファイルを使用して
  • を実行します.
    ansible-playbook plaintext.yaml --vault-password-file <File>
  • ansible.オプション
  • のため、cfgでパスワードファイルパスを指定して実行->playbookを実行します.
    [vagrant@controller ~]$ ansible-playbook -h
    optional arguments:
      --ask-vault-pass      ask for vault password
       --vault-id VAULT_IDS  the vault identity to use
      --vault-password-file VAULT_PASSWORD_FILES

    encrypt_string


    特定の値の暗号化->変数の暗号化
    [vagrant@controller vault]$ ansible-vault encrypt_string
    New Vault password: 
    Confirm New Vault password: 
    Reading plaintext input from stdin. (ctrl-d to end input)
    hello world
    !vault |
              $ANSIBLE_VAULT;1.1;AES256
              36313965353138363262383633613563646136643263393531343538313439323162643234353862
              6635313861363435343536303535313137396331373833350a396637666334613663663739343166
              34326563336666303330613364653735363963303437366465616464356463383939633461313038
              3633363063383633320a373561646261656162346636336134343631323436663565366437356630
              6262
    Encryption successful
    必要な内容を入力し、[ctrl+d]2または[enter][ctrl+d]を押します.
    !すべてコピーtest.yaml
    - hosts: 192.168.100.11
      vars:
        message: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              36313965353138363262383633613563646136643263393531343538313439323162643234353862
              6635313861363435343536303535313137396331373833350a396637666334613663663739343166
              34326563336666303330613364653735363963303437366465616464356463383939633461313038
              3633363063383633320a373561646261656162346636336134343631323436663565366437356630
              6262
    
      tasks:
        - debug:
            msg: "{{message}}"
    暗号化された内容を変数に貼り付ける
    直接実行すると、復号できません.
    [vagrant@controller vault]$ ansible-playbook test.yaml
    TASK [debug] 
    fatal: [192.168.100.11]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}
    ansible.cfgでパスワードファイルが指定されている場合は構いませんが、ファイルが指定されていない場合は、上記のエラー->クエリーパスワード実行->文字列暗号化の入力時に使用するパスワード
    [vagrant@controller vault]$ ansible-playbook test.yaml --ask-vault-pass
    Vault password:
    TASK [debug] 
    ok: [192.168.100.11] => {
        "msg": "hello world\n"
    }

    単一パスワードエラー

    test.yaml
    - hosts: 192.168.100.11
      vars:
        var.yaml
    
      tasks:
        - debug:
            msg: "{{message1}} {{message2}"
    var.yaml
    message1: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              30373636666531636139656666663036646335646466323863383639616131353538303530353561
              3830373463346233376363313837386137653136326366340a376461633232633636323232316463
              35376137386361616138666235323931376138336232343338396330376639346561343436353732
              6161343565363930650a333832613134386334323764323333356235643139626261333039373236
              3032
    
    message2: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              36646134343530303937666466343065333034323065353238343032353536636230316133633030
              3938653064323162373665373661356665653636343336660a323634616136613661363136623238
              66366334336463663237346530383061363830343732636530356639316161666262663232313064
              6262346632626463390a306435313830316161393331306135656261376132373664643236653166
              3366
    2つの変数はそれぞれ異なるパスワードでhelloとworldを格納します.
    実行時に1つのパスワードしか入力できず、1つは復号できず、結果は実行できません->もし?!マルチパスワード

    マルチパスワード


    --vault-idオプションの使用
    --vault-id rable@source
    rableをidと理解するのは簡単です
    idを使用して他のpasswordを使用可能にする
    関連コンテンツ

    source

  • プロンプト:パスワードをインタラクティブfromポートとして受信
    --vault-id user1@promptFromポートでパスワードを受信するダイアログ形式
  • file:ファイルのパスワードを参照してください
    --vault-id [email protected]
  • script:パスワードを参照できるスクリプト
    例:PaswerはMySQLを保存し、pythonコードを使用してデータベースからPasswordをインポートします.
    --vault-id [email protected]
    Pythonコードの指定
    最も安全->コード
  • prompt

    test.yaml
    - hosts: 192.168.100.11
      vars_files:
        - var1.yaml
        - var2.yaml
      tasks:
        - debug:
            msg: "{{ message1 }} {{ message2 }}"
    echo "message1: hello" > var1.yaml
    echo "message2: world" > var2.yaml
    ファイルをid付きの異なるパスワードに設定
    ansible-vault encrypt var1.yaml --vault-id user1@prompt
    New vault password (user1):
    Confirm new vault password (user1): 
    Encryption successful
    ansible-vault encrypt var2.yaml --vault-id user2@prompt
    New vault password (user2): 
    Confirm new vault password (user2): 
    Encryption successful
    --vault-id user1@prompt実行時にオプションを適用し、パスワードを個別に尋ねて復号します.
    ansible-playbook test.yaml --vault-id user1@prompt --vault-id user2@prompt
    [vagrant@controller vault]$ ansible-playbook test.yaml --vault-id user1@prompt --vault-id user2@prompt
    Vault password (user1): 
    Vault password (user2):
    TASK [debug] 
    ok: [192.168.100.11] => {
        "msg": "hello world"
    }

    vault file

    test.yaml使用時と同じ
    echo "message1: hello" > var1.yaml
    echo "message2: world" > var2.yaml
    
    echo "P@ssw0rd1" > user1pass
    echo "P@ssw0rd2" > user2pass
    
    # 보안상 권한은 설정하는 것이 좋음
    chmod 600 user1pass 
    chmod 600 user2pass 
    
    ansible-vault encrypt var1.yaml --vault-id user1@user1pass
    ansible-vault encrypt var2.yaml --vault-id user1@user2pass
    
    # file 사용시 source는 파일명으로 지정
    ansible-playbook test.yaml --vault-id user1@user1pass --vault-id user1@user2pass