Soru Şifreleri syslog'a sızmamak için bazı Ansible görevlerinin ayrıntılarını nasıl azaltabilirim?


Bazen Ansible’ı kullanmak isterim lineinfile veya blockinfile Bazı yapılandırma dosyalarına bir şifre yazmak için modüller. Bunu yaparsam, tüm satır veya blok, şifre dahil, syslog.

Düşünmediğim gibi syslog Şifrelerimi saklamak için güvenli bir yer olmak için Ansible'a şifremi unuttum. syslog? Umarım bunu yapmanın bir yolu vardır, aksi takdirde Ansible'da büyük bir güvenlik sorunu olarak düşünebilirim.

Örneğin, bu ad hoc komutuyla çoğaltabilirsiniz:

ansible localhost -m blockinfile -a 'dest=/tmp/ansible_password_leak create=yes block="Password = {{password}}"' -e 'password=secret'

İşte sonuçta ne var syslog:

ansible-blockinfile: Invoked with directory_mode=None force=None remote_src=None insertafter=None owner=None follow=False marker=# {mark} ANSIBLE MANAGED BLOCK group=None insertbefore=None create=True setype=None content=None serole=None state=present dest=/tmp/ansible_password_leak selevel=None regexp=None validate=None src=None seuser=None delimiter=None mode=None backup=False block=Password = secret

Örnek için Ansible 2.0.0.2'yi kullanıyorum. resmi Ansible Ubuntu PPA Bir Debian "Jessie" 8 sisteminde.


8
2018-02-08 22:38


Menşei




Cevaplar:


no_log  nitelik verileri syslog içinde gizler. Tek bir göreve uygulanabilir

- name: secret task
  shell: /usr/bin/do_something --value={{ secret_value }}
  no_log: True

veya oyun kitabı:

- hosts: all
  no_log: True

Hata ayıklama etkinleştirildiğinde gerçekten mümkün değildir, bu nedenle yalnızca tek görevler için kullanılması önerilir. Bu özellik 1.5 sürümünden beri kullanılabilir yanıtlayıcı '. 1.5 sürümünün yayınlanma bildirisinde belirtildiği gibi:

Görevler, artık hassas görevlerin syslog'a vurmasını önlemek için "no_log = True" seçeneğine de sahip olabilir. (Şifreler gibi görünen parametreler zaten filtrelendi)

şifreler çoğu durumda filtrelenmelidir.


2
2018-02-09 08:25



Bu, şifreleri etkili bir şekilde gizler. syslog ancak aynı zamanda konsol çıktısında günlüğe kaydetme çıktısını devre dışı bırakır. Bunu değiştirmenin bir yolu var mı? - aef
Üzgünüm. Bu konuda çok az bilgi buldum. Özelliği yalnızca görevler için ayarlamanızı ve yalnızca oyununuzu hata ayıkladığınızda öneririm. Belirtildiği gibi Ansible zaten parola gibi görünen parametreleri filtrelemelidir. Yani belki de bir böcek. Yine de Ansible bir parametrenin şifre olup olmadığını nasıl belirlediğini bilmiyorum. Belki bir hata / eksik özelliği gizlemek password = XXX. - Henrik Pingel
Ansible'da parolaların varsayılan olarak gizli kalması gerektiği izlenimini nereden aldınız? Bu belgelerde bir yerde belirtiliyor mu? - aef
Cevabımdaki son alıntı (Şifreler gibi görünen parametreler zaten filtrelenmişti). Ama bu işlevsellik için başka bir kaynak bulamadım - Henrik Pingel


Varsayılan çıktılar için parolaları gizlemek için bir geri arama eklentisi geliştirdim, içeren anahtar için sözdizimi sözlüğünü ayrıştırıyor parolaHer biri için, değeri ******** ile değiştirir.

Adlı bir dosya oluştur protect_data.py klasörde ./plugins/callback Bu kodu ekle:

from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
import os, collections

class CallbackModule(CallbackModule_default):
    CALLBACK_VERSION = 2.0
    CALLBACK_TYPE = 'stdout'
    CALLBACK_NAME = 'protect_data'

    def __init__(self, display=None):
        super(CallbackModule, self).__init__(display)

    def hide_password(self, result):
        ret = {}
        for key, value in result.iteritems():
            if isinstance(value, collections.Mapping):
                ret[key] = self.hide_password(value)
            else:
                if "password" in key:
                    ret[key] = "********"
                else:
                    ret[key] = value
        return ret

    def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False):
        return super(CallbackModule, self)._dump_results(self.hide_password(result), indent, sort_keys, keep_invocation)

Dosyada ansible.cfg:

  • uncomment hattı ile stdout_callback ve bu eklenti adını bir değer olarak ayarla (stdout_callback=protect_data)
  • uncomment hattı ile callback_plugins ve set değeri ./plugins/callback

Çıkışı görüntülemek için başka bir eklenti kullanırsanız, çıktı sadece bu eklenti için değiştirilir.logentries...), aynısını onunla yapmak zorundasın


1
2017-10-17 11:43



Oh, vay, bu harika. Ancak, bu bir sır içeren her şey için 'parola' anahtar adı ile bir dict ayarlamanızı gerektirir. Bir değişkenin yerine bir sır içerdiğini göstermek için bir meta bayrağa bayılırdım, ama teşekkürler! Diğer S: Bu da çıktıdaki sırları gizler mi? ansible-playbook --diff(dosya değişiklikleri değişir)? - gertvdijk
Bilmiyorum, hiç denemedim - Nelson G.


Birisi, Apps Kasası'nı kullanarak sorunun ortadan kaldırılmasını önerebilir.


-2
2018-02-16 01:16



Bu soruya bir cevap vermemektedir. Yeterli olduğunda itibar yapabileceksin herhangi bir gönderiye yorum; yerine, askerden açıklama gerektirmeyen cevaplar sağlamak. - Yorumdan - chicks
Vault, verileri dinlenme sırasında şifrelemeye yardımcı olur, ancak parolalar kullanımdayken, günlük dosyalarında kolayca görünebilir. - Konstantin Suvorov
@chicks Bu bir yanlış cevapdeğil olmayan cevap. - Michael Hampton♦
İnceleme araçlarında bu seçeneği görmedim. Bu bir cevaptan ziyade bir yoruma benzediğinden, mantıklı bir şekilde ele aldığımı hissediyorum. - chicks
Bayrağım da reddedildi ve yukarıdaki cümlenin nasıl azaltılacağına dair bir cevap olduğunu hala görmüyorum. yanıtlayıcı ' ayrıntı. Bu, başka bir fikri öne süren bir yorumdur, kesinlikle soruyu cevaplamamaktadır. - Patrick Mevzek