In: Genel


Bu yazıda, temel bir Ansible Inventory’nin nasıl kurulacağını öğreneceksiniz. Bunun yanı sıra, Ansible Vault aracılığıyla hassas bilgileri nasıl şifreleyeceğinizi öğreneceksiniz. Zevk almak!

1. Giriş

İçinde önceki yazı, bir Ansible test ortamının nasıl kurulacağını öğrendiniz. Bu gönderide, test ortamını kullanmaya başlayacaksınız. Bir hatırlatma olarak, ortam bir Kontrolör ve iki Hedef makineden oluşur. Denetleyici ve Hedef makineler bir VirtualBox VM’de çalışır. Ansible betiklerinin geliştirilmesi, ana makinede IntelliJ ile yapılır. Dosyalar, bir komut dosyası aracılığıyla ana makineden Denetleyiciye senkronize edilir.

Bu blogda bir envanter dosyası oluşturacaksınız. Envanter dosyası, Kontrolörün görevleri yürütmek için makineleri bulması ve bunlara erişmesi için Hedef makineler hakkında bilgiler içerir. Envanter dosyası ayrıca Hedef makinelere erişmek için kullanılan parola gibi hassas bilgileri de içerecektir. Bu blogun ikinci bölümünde bu güvenlik sorununu Ansible Vault ile çözeceksiniz.

Bu blogda kullanılan dosyalar şu adresteki ilgili git deposunda mevcuttur: GitHub.

2. Önkoşullar

Bu blog için aşağıdaki ön koşullar geçerlidir:

  • Ansible test ortamına ihtiyacınız var, bkz. önceki blog test ortamı nasıl kurulur;
  • Kendi ortamınızı kullanıyorsanız, Denetleyici ve Hedef makineler için Ubuntu 22.04 LTS ve Ansible sürüm 2.13.3’ün kullanıldığını bilmelisiniz;
  • Temel Linux bilgisi.

3. Bir Envanter Dosyası Oluşturun

Ansible Controller, görevleri yerine getirebilmek için Hedefler hakkında bazı bilgilere ihtiyaç duyacaktır. Bu bilgiler bir envanter dosyası aracılığıyla kolaylıkla sağlanabilir. Bir envanter içinde Hedefin adını, IP adresini, Hedefe nasıl bağlanılacağını vb. belirteceksiniz. Yanıtlanabilir belgeler tüm detaylar için. Bu bölümde, bazı envanter özelliklerini deneyeceksiniz.

Varsayılan olarak, Ansible envanteri şurada arayacaktır: /etc/ansible/hosts ancak Ansible’ı çalıştırırken envanter için özel bir konum da sağlayabilirsiniz. Bu bölümde yapacağınız şey budur.

Deponun kökünde bir dizin oluşturun inventory ve bir oluştur inventory.ini dosya. Dosyaya aşağıdaki içeriği ekleyin:

target1
target2
 
[targets]
target1
target2
 
[target1_group]
target1
 
[target2_group]
target2
 
[target_groups:children]
target1_group
target2_group

İlk iki satır, Hedef makinelerin adlarını içerir. Buna istediğiniz herhangi bir isim verebilirsiniz, ancak bu durumda, sadece onları arayın. target1 ve target2.

Aynı anda birden fazla makineye adres vermek istediğinizde gruplar oluşturabilirsiniz. Köşeli parantezler arasında bir grup ve ardından bu gruba ait makinelerin listesi tanımlanır. Yukarıdaki envanterde, grubu tanıyabilirsiniz targets içeren target1 ve target2. Bu grup gerçekten gerekli değildir, çünkü varsayılan olarak bir grup all gruba eşit olan var targets bu durumda. gruplar target1_group ve target2_group açıklama amaçlıdır ve sadece bir makine içerdikleri için pek bir anlam ifade etmezler. Bununla birlikte, gerçek hayatta, uygulama makineleri, veritabanı makineleri vb. için gruplara sahip olduğunuzu hayal edebilir veya örneğin makineleri bölgeye göre gruplamak isteyebilirsiniz.

gibi bir grup grubu da tanımlayabilirsiniz. target_groups. eklemeniz gerekiyor :children tanımlayabilir ve ardından birkaç grubu yeni bir grup halinde birleştirebilirsiniz. Grup target_groups gruptan oluşur target1_group ve target2_group. Bu aslında o grup anlamına gelir target_groups makinelerden oluşur target1 ve target2.

4. Değişkenleri Tanımlayın

Oluşturduğunuz envanter dosyası sadece makine ve grup adlarını içerir. Ancak bu bilgi, Ansible’ın makineleri bulabilmesi ve makinelere bağlanabilmesi için yeterli değildir. Bir yaklaşım, bu bilgileri içeren envanter dosyasına değişkenler eklemektir. Daha iyi bir yaklaşım, bir dizin tanımlamaktır. host_vars değişkenleri içeren her makine için alt dizinler içerir. Ansible, her makine için değişkenleri bulmak için bu dizinleri tarar. Gruplar için değişkenler de tanımlayabilirsiniz. Bu durumda, bir dizin oluşturursunuz group_vars.

Dizinde oluştur inventory bir dizin host_vars dizinleri içeren target1 ve target2. Dizinin dizin ağacı inventory aşağıdaki gibi görünüyor:

├── host_vars
│   ├── target1
│   └── target2
└── inventory.ini

Dizinde oluştur target1 bir dosya vars aşağıdaki içeriklerle:

ansible_host: 192.168.2.12
ansible_connection: ssh
ansible_user: osboxes
ansible_ssh_pass: osboxes.org

Burada tanımlanan değişkenler, Ansible’ın makineyi bulabilmesi ve makineye bağlanabilmesi için bazı özel değişkenlerdir:

  • ansible_host: IP adresi target1 makine;
  • ansible_connection: bağlanmak istediğiniz yol target1;
  • ansible_user: sistem kullanıcısı Ansible, görevleri makinede yürütmek için kullanabilir;
  • ansible_ssh_pass: şifresi ansible_user. Parolaları gerçek hayatta düz metin olarak saklamayın! Bu sadece test amaçlı yapılır ve bu gönderide daha sonra uygun bir çözüm sağlanır.

Bu değişkenleri, makinenin adını tanımladığınız aynı satırdaki envanter dosyasında da tanımlayabileceğinizi unutmayın. Bu durumda değişkenler şu şekilde tanımlanmalıdır: key=value (eşittir işaretiyle, iki nokta üst üste ile değil).

Ekle vars dizine dosya target2 benzer içeriklere sahip ancak bağlantı değerlerine sahip target2.

5. Envanter Ayarlarını Test Edin

Şimdi, çalışıp çalışmadığını doğrulamak için bazı testler yapmanın zamanı geldi. Denetleyiciyi ve iki Hedef makineyi başlatın. Oluşturduğunuz dosyaları Controller makinesiyle senkronize edin ve bir terminal penceresinde şuraya gidin: MyAnsiblePlanet dizin. SSH parmak izinin Kontrolör makinesinde mevcut olması için her iki Hedef makineye bir kez manuel olarak bağlanın, aksi takdirde Ansible Hedef makinelere bağlanmaya çalıştığında bir hata mesajı alırsınız.

$ ssh osboxes@192.168.2.12
$ ssh osboxes@192.168.2.13

Aşağıdaki komut ile ping işlemi yapacaksınız. target1 makine. Komut aşağıdaki öğelerden oluşur:

  • cevaplayıcı: Ansible yürütülebilir dosyası;
  • hedef1: Görevi yürütmek istediğiniz makinenin adı. Bu, envanterdeki isme karşılık gelir;
  • -m ping: Ping komutunu yürütün;
  • -i envanter/envanter.ini: Envanter dosyasının yolu.

Yürütülecek komut:

$ ansible target1 -m ping -i inventory/inventory.ini
target1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}

Yanıt bir başarıyı gösterir. Aynı komutu yürütün, ancak target2 makine. Sonuç aynı zamanda bir başarı yanıtı olmalıdır.

Bir görevi tek bir makinede yürütebildiğiniz gibi, bir görevi bir grup üzerinde de yürütebilirsiniz. için komutu yürütün targets grup:

$ ansible targets -m ping -i inventory/inventory.ini
target2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}
target1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}

Gördüğünüz gibi, komut beklendiği gibi her iki Hedef makinede de yürütülür.

Komutu diğer gruplar için de yürütün.

6. Şifreyi Şifrele

Artık envanter konfigürasyonunun beklendiği gibi çalıştığını bildiğinize göre, düz metin probleminde şifreye geri dönme zamanı. Bu kullanılarak çözülebilir Yanıtlanabilir Kasa. Ansible Vault muhtemelen kendi blogunu hak ediyor, ancak bu bölümde hassas bilgileri şifrelemenin bir yolunu uygulayacaksınız. için şifreleme yapılacaktır. target1 makine.

Dizinde oluştur inventory/target1 bir dosya vault ve kopyala ansible_ssh_pass buna değişken vault dosya. Değişken adını şuradan değiştirin: ansible_ssh_pass içine vault_ansible_ssh_pass.

vault_ansible_ssh_pass: osboxes.org

vars dosyasında, düz metin şifresini bu yeni referansla değiştirirsiniz. vault_ansible_ssh_pass kullanarak değişken Jinja2 sözdizimi. Referansın etrafına çift tırnak eklenmesi gerektiğini de unutmayın.

ansible_host: 192.168.2.12
ansible_connection: ssh
ansible_user: osboxes
ansible_ssh_pass: "{{ vault_ansible_ssh_pass }}"

şifrele vault şifreli dosya itisniceweather (veya istediğiniz herhangi bir şifre).

$ ansible-vault encrypt inventory/host_vars/target1/vault
New Vault password: 
Confirm New Vault password: 
Encryption successful

bu vault dosya içeriği artık şifrelenmiştir.

$ANSIBLE_VAULT;1.1;AES256
34353662643861663663363161366239343633636561663564653030663134623266323363353433
6233383939396335343639623165306330393031383836320a616430336132643638333862363965
36303837313239386566633332326165663336363464623437383638333936613038663366343833
3737316665323230620a343163356138656535363837646566643962393366353266613462616437
32346531613637396666623864333330643261366139306162373038633636633934326165616438
6565363034333137623539643539666234386339393965663362

Dosyayı şifrelemek için kullandığınız parola, bir parola yöneticisine kaydedilmelidir. Ansible, şifrenin şifresini çözmek için buna ihtiyaç duyacaktır.

için ping komutunu çalıştırmayı deneyin. target1 daha önce yaptığın gibi.

$ ansible target1 -m ping -i inventory/inventory.ini 
ERROR! Attempting to decrypt but no vault secrets found

Bu başarısız olur çünkü Ansible parola alanının şifresini çözemez.

parametreyi ekle --ask-vault-pass Ansible’ın sizden kasa parolasını istemesi için komuta.

$ ansible target1 -m ping -i inventory/inventory.ini --ask-vault-pass 
Vault password: 
target1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Ve şimdi tekrar çalışıyor! Bu, Ansible dosyalarınızdaki hassas bilgileri işlemenin daha iyi bir yoludur. Hassas bilgileri işlemenin birkaç yolu daha vardır. Daha önce de belirtildiği gibi, Ansible Vault kendi blogunu hak ediyor. Bu arada, daha fazla bilgi bulunabilir Yanıtlanabilir belgeler.

7. Karar

Bu gönderide, bir Ansible Inventory dosyasının temellerini öğrendiniz ve envanter dosyasındaki hassas bilgilerin nasıl şifreleneceğini öğrendiniz. Ortamınız için kendiniz bir envanter dosyası oluşturmaya başlamak için temel becerileri kazandınız.

Bir cevap yazın

Ready to Grow Your Business?

We Serve our Clients’ Best Interests with the Best Marketing Solutions. Find out More

How Can We Help You?

Need to bounce off ideas for an upcoming project or digital campaign? Looking to transform your business with the implementation of full potential digital marketing?

For any career inquiries, please visit our careers page here.
[contact-form-7 404 "Bulunamadı"]