Kimlik bilgilerini dosyalarda saklamaktan kaçınırken Ansible Azure oyun kitaplarını nasıl çalıştırabilirim?


13

Arka fon

  1. Ansible'ı Azure altyapısını sağlamak ve yönetmek için kullanıyoruz. Şu anda Ansible'ı "manuel" olarak çalıştırıyoruz, yani çeşitli otomatik görevler için manuel olarak el kitapları yürütüyoruz . CI altyapısı yok.
  2. Muhtemelen alakalı değil, ancak envanterimizi dinamik komut dosyası kullanarak yönetiyoruz azure_rm.py.
  3. Mümkün olduğunca güvenli olmaya teşvik ediyoruz yani
    1. Apps Kasası şifrelerini ~/.vault_passhiçbir yerel dosyada veya herhangi bir dosyada saklamayın
    2. Azure sırlarını içinde saklamayın ~/.azure/credentials
    3. Güvenli bir şey saklamayın .bashrc.

Böyle bir senaryoda, yukarıdaki kılavuzları takip ederken oyun kitaplarımın Azure sırlarına erişebilmesini sağlamak için tutarlı bir strateji bulmakta sorun yaşıyorum.

Soru

Oynatma kitaplarımın bunlara erişebilmesini sağlarken Ansible Vault ve Azure kimlik bilgilerini dosyalarda depolamaktan nasıl kaçınabilirim?

Ne denedim

Şimdiye kadar bir sarmalayıcı senaryosu buldum

  1. kullanıcıdan Apps Kasası şifresi ister
  2. Tonozlu Kabuk betiğinin şifresini çözmek için bunu kullanır
  3. Azure ortam değişkenlerini ortama yükleyen komut dosyasını değerlendirir;
  4. Bu şekilde ayarlanan ortam üzerinde çalışma kitabını çalıştırır.

Orada daha iyi (daha zarif, daha az karmaşık, daha "Ansible") çözümler var mı?


Bu iş akışında sizi en çok ne rahatsız ediyor?
Konstantin Suvorov

1
@KonstantinSuvorov esas olarak, uyumluluk gerektiren ağır işletmelerde oldukça yaygın bir gereklilik (en azından bana göre) elde etmek için atlamam gereken halka sayısıdır.
Vish

Yanıtlar:


8

Kasa şifresi

Her şeyden önce, kasa şifre dosyasının yürütülebilir komut dosyası olabileceği gerçeğini öğrenmelisiniz. Bu durumda Ansible bunu yürütür ve çıktı olarak şifre almayı bekler.

Örneğin , gerçek parolanızı saklamak için gpg-agentveya keychaintuşlarını kullanabilir ve gerektiğinde kilidini açabilirsiniz. Bu blog gönderisinde daha fazlasını okuyun: https://benincosa.com/?p=3235

Biraz paranoyaksanız, şifre komut dosyanız çağrıldığında aşağıdaki gibi bildirim ekleyebilirsiniz:

#!/bin/bash
PARENT_PROCESS=$(ps -p $PPID -o args | tail -n 1)
osascript -e "display notification \"Vault password used by ${PARENT_PROCESS}\" with title \"Ansible\" sound name \"default\""
gpg --batch --use-agent --no-tty --decrypt key.gpg 2>/dev/null

Bu kasa parolası komut dosyası, key.gpggerçek kasa anahtarı olarak kullanılır ve komut dosyası kullanıldığında üst işlem adıyla birlikte açılır pencere bildirimini (MacOS için) gösterir. Gpg-aracı önbellekleri bir süre şifre kilidini açar, bu nedenle playbook'u her başlattığınızda şifre girmenize gerek yoktur.

Sadece set vault_password_file = ./vault_pass.shSepetinde ansible.cfg.

çevre

azure_rm.pyDinamik envanter betiği olarak kullandığınızı söylediniz . Bu, ansible-playbook'u kullanabilmeniz için başlamadan önce ortam değişkenlerinize kimlik bilgileri ayarlamanız gerektiği anlamına gelir.

İki dosya yapabilirsiniz:

secure_env (kasa ile şifrelenmiş):

export AZURE_SECRET=xxx;export AZURE_SUBSCRIPTION_ID=xxx;

set_env (düz metin):

echo -n "Setting secure vars... "
eval $(ansible-vault view secure_env)
echo "done."

Otomasyon görevlerinizi yürütmek için yeni terminal açtığınızda, şunu çalıştırmanız gerekir:

source set_env

Şu anda bash değerlendirir set_envve secure_env(ansible tonoz ile şifresi çözülür). Bu komuttan sonra geçerli kabuk için Azure kimlik bilgileriniz tanımlanmıştır, böylece her zamanki gibi playbook'ları yürütebilirsiniz:

ansible-playbook provision-my-azure-instances.yml

Bu iki yaklaşımı kullanarak deponuzda key.gpgve secure_envdeponuzda saklayabilirsiniz ; daha sonra yeni terminal çağrısına bir source set_envkez gpg şifresini bir kez girin (key.gpg'nin ileride kullanılmasının kilidini açmak için); sonra ansible-playbookherhangi bir şifre olmadan istediğiniz kadar çağrı yapın .


Cevabınız için teşekkür ederim. Bunu bir hafta boyunca deneyeyim.
Vish

Orijinal yaklaşımımın temel avantajı, önbelleğe alma avantajları getiren GPG kullanmasıdır - değil mi? Çevre yaklaşımı benim bulduğum şeye benziyor.
Vish

1
OP'nizden, playbook'u her çalıştırdığınızda sarıcı kullandığınızı anlıyorum. sourceYaklaşım ile, her terminal oturumu için bir kez ortam ayarlarsınız ve tüm araçları ayrı ayrı kullanabilirsiniz: ansible-playbooks, envanter komut dosyaları, masmavi cli, sarıcı olmadan.
Konstantin Suvorov

Ah, anladım. Bunu ekibime sunacağım. Cevabınızı daha uygun bir çözüm olarak kabul etmek. Araştırma ve açıklama için teşekkürler! Ayrıca, blogunuzu beğendim :)
Vish

GPG (veya macOS veya Linux'ta bir anahtarlık) kullanmanın ana yararı, her ekip üyesinin kendilerine özgü özel bir anahtarın kilidini açmak için kendi kimlik doğrulamasına sahip olmasıdır. Bu anahtar daha sonra paylaşılan bir sır olan Ansible Vault şifresinin kilidini açmak için kullanılır. Ansible Vault parolası da dahil olmak üzere birileri takımdan ayrılırsa tüm sırlarınızı döndürmeniz gerekir, ancak en azından GPG / anahtarlık parolalarının değiştirilmesi gerekmez.
RichVel

2

Lütfen https://docs.ansible.com/ansible/2.4/vault.html Ansible 2.4 'ün kullanabileceği için okuyun --vault-id @prompt.

Bir dosyayı ansible-vault kullanarak şifreleyin:

ansible-vault encrypt /path/to/encrypted/file

Başucu kitabını çalıştırın;

fatal: [localhost]: FAILED! => {"msg": "A vault password or secret must be
specified to decrypt /path/to/encrypted/file"}

Dosyaların şifresini çözmek için aşağıdakiler de dahil olmak üzere birden çok seçenek vardır @prompt:

ansible-playbook some-playbook --vault-id @prompt

isteyecektir:

Vault password (default):

Kasa şifresi girildikten sonra, oynatma kitabı başarılı olmalıdır.


1
Sayfayı okumak orada bir çözüm var gibi görünüyor, ancak sadece bağlantıyı kullanarak anlayamıyorum. Lütfen biraz açıklayabilir misiniz?
Vish

Detaylandırdığınız için teşekkürler. Ben gerçekten eski --ask-vault-passseçeneği kullanarak kullanıcıdan bir kasa şifresi istiyoruz . Ve bunun yerine --vault-id, daha iyi bir iş akışı sorusunun daha büyük sorusunu nasıl cevaplayacağını anlayamıyorum .
Vish

Bağlantıya bana anılacaktır zaman yoktu bir ilginç seçenek görürsünüz: ansible-playbook --vault-id my-vault-password.py. Belki de bir python betiği kullanma konusunda bir çözümün olduğunu düşündüm :) Ben de bu konuda biraz düşünme yapıyorum.
Vish
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.