【问题标题】:Decrypt ansible variable解密 ansible 变量
【发布时间】:2021-10-26 04:08:51
【问题描述】:

我的inventory.yml 中有以下加密变量

vars:
   username: admin
   password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613233633461343837653833666333643061636561303338373661313838333565653635353162
          3263363434623733343538653462613064333634333464660a663633623939393439316636633863
          61636237636537333938306331383339353265363239643939666639386530626330633337633833
          6664656334373166630a363736393262666465663432613932613036303963343263623137386239
          6330

在我的角色任务main.yml

- name: Create a JIRA issue
  uri:
    url: https://your.jira.example.com/rest/api/2/issue/
    user: "{{ username }}"
    password: "{{ password }}"
    method: POST
    body: "{{ lookup('file','issue.json') }}"
    force_basic_auth: yes
    status_code: 201
    body_format: json

但是 uri 模块不解密 vault 变量,有没有办法我们可以内联解密变量。我正在使用 Ansible 版本 2.8。任何帮助将不胜感激

【问题讨论】:

    标签: ansible ansible-2.x ansible-vault


    【解决方案1】:

    一个更简单、更灵活的选择是将秘密放入一个单独的文件中,例如

    shell> cd vault/
    shell> cat password.yml 
    password: my_secret_password
    
    shell> ansible-vault encrypt password.yml 
    Encryption successful
    
    shell> cat password.yml 
    $ANSIBLE_VAULT;1.1;AES256
    37363761663732363162633135323438633661656531343664646564326161323739383933316331
    6438653039373933366532616631333938633039323062380a623463373331636335386566356564
    62613063616537623937333336393532373233363263626464643838643830626663393366663234
    3639366233653633640a336439313465663465333439333161373237383030356664343862373531
    61633664363266353262626338343634353437643236303039376261393739633836
    

    然后在剧本中使用它,例如

    - hosts: localhost
      vars_files:
        - vault/password.yml
      vars:
        username: admin
      tasks:
        - debug:
            msg: "{{ username }}: {{ password }}"
    

    给予

      msg: 'admin: my_secret_password'
    

    这样就可以了

    • 如果需要,可以在 playbook 之间轻松共享秘密
    • group_varshost_vars、...中包含文件
    • 在不修改剧本的情况下更新秘密
    • ...

    除此之外,您还可以使代码更安全,并将密码的范围限制为单个任务,例如

        - debug:
            msg: "{{ username }}: {{ _vault.password }}"
          vars:
            _vault: "{{ lookup('file', 'vault/password.yml')|from_yaml }}"
    

    给出相同的结果

      msg: 'admin: my_secret_password'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2021-11-10
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2019-01-02
      • 2018-07-12
      相关资源
      最近更新 更多