قم بتأمين أسرارك مع Ansible Vault

الاحتفاظ بأسرارك من الوقوع في أيدي خاطئة هو أولوية قصوى. ولكن كيف يمكنك تأمين أسرارك بالضبط؟ هل تقوم بحفظها في ملف نصي محلي؟ بدون تشفير، هذا الخيار مخاطرة كبيرة جدًا. لماذا لا تستخدم Ansible Vault لتشفير المتغيرات والملفات الخاصة بك؟

في هذا البرنامج التعليمي، ستتعلم كيفية تأمين المحتوى الحساس، مثل كلمات المرور أو المفاتيح الخاصة بك، باستخدام Ansible Vault.

تابع القراءة واحمي أسرارك من العيون الفضولية!

الشروط الأساسية

سيكون هذا البرنامج التعليمي عرضًا عمليًا. إذا كنت ترغب في المتابعة، تأكد من أن لديك ما يلي.

  • A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
  • Ansible مثبت على جهازك.

تكوين محرر Ansible Vault الافتراضي

كمسؤول نظام، قد تعمل على مجموعة متنوعة من سكربتات Ansible تحتوي على أسماء مستخدمين وكلمات مرور لخوادم مختلفة. لا يمكنك القيام بتعهدات هذه الملفات إلى نظام التحكم بالإصدارات بتنسيق نص عادي لأنه غير آمن. ولهذا السبب، يأتي Ansible Vault بمساعدة.

تم تصميم Ansible Vault ليتم دمجه في سير عملك الحالي لتخزين بياناتك في ملف مشفر. ولكن قبل إنشاء أول Ansible Vault لديك، سيتعين عليك ضبط محرر Ansible Vault الافتراضي الخاص بك.

1. قم بفتح الطرفية الخاصة بك وتوصيل SSH بجهازك.

2. بعد ذلك، افتح ملف ~/.bashrc باستخدام محرر نصوص. ملف ~/.bashrc هو نص برمجي للشل يشغل في كل مرة يبدأ فيها جلسة تيرمنال جديدة. يقوم هذا النص البرمجي بتهيئة جلسة شل تفاعلية وتحديد متغيرات البيئة.

3. أضف السطر التالي في نهاية ملف ~/.bashrc، ثم احفظ التغييرات واخرج من المحرر.

هذا السطر يضبط متغير الـ EDITOR للمستخدم المسجل حاليًا. يضمن متغير الـ EDITOR استخدام محرر النص المفضل لديك في كل مرة تقوم فيها بفتح جلسة تيرمنال جديدة.

يمكنك تعيين أي محرر نص آخر تفضله، ولكن هذا البرنامج التعليمي يستخدم محرر النص nano.

export EDITOR=nano
Setting the Default Text Editor

4. في النهاية، قم بتشغيل الأوامر التالية لتطبيق التغييرات (source) دون تسجيل الخروج وتسجيل الدخول مرة أخرى، واطبع (echo) محرر النص الافتراضي الحالي لنظامك.

# يحمل المتغيرات البيئية إلى جلسة الشل الحالية الخاصة بك.
source ~/.bashrc
# يطبع محرر النص الافتراضي الحالي لنظامك.
echo $EDITOR

تحقق من أن متغير الـ EDITOR مُعين على المحرر الذي تفضله، كما هو موضح أدناه.

Applying and Verifying Changes

إنشاء وتشفير المخبأ الخاص بـ Ansible الأول الخاص بك

لقد قمت بتعيين محرر الخزنة الافتراضي الخاص بك، لذا حان الوقت لإنشاء خزنتك الأولى. ستقوم بإنشاء ملف وتشفيره يحتوي على معلومات حساسة، مثل اسم المستخدم، وكلمات المرور، ومفاتيح الوصول السرية، وما إلى ذلك.

ستقوم بتشغيل الأمر ansible-vault، وهو الواجهة الرئيسية للتفاعل مع خزنات Ansible.

1. قم بتشغيل الأمر التالي لإنشاء ملف secret.yml . تستخدم Ansible تنسيق YAML، وهو تنسيق أكثر قراءة للإنسان مقارنة بتنسيقات البيانات الأخرى مثل JSON.

ansible-vault create secret.yml

ستُطلب منك إدخال كلمة مرور للملف وتأكيدها. ستستخدم هذه الكلمة المرورية لتشفير وفك تشفير ملف secret.yml لاحقًا، لذا تأكد من اختيار كلمة مرور قوية يمكنك تذكرها.

Creating the secret.yml File with a Password

2. بعد تعيين كلمة مرور الخزنة، يفتح محرر النص الافتراضي ملفًا فارغًا. أدخل المعلومات الحساسة التي ترغب في تخزينها في الملف، ثم احفظها وأغلق المحرر.

يخزن هذا البرنامج التعليمي متغيرات aws_access_key و aws_secret_key في ملف secret.yml . في هذه النقطة، يقوم Ansible بتشفير الملف secret.yml، ولا يستطيع أحد آخر قراءة محتوى الخزانة ما لم يكن يعرف كلمة مرور الخزنة.

Providing Sensitive Information (secrets)

3. قم بتشغيل أمر القطة لمحاولة عرض محتويات secret.yml دون كلمة المرور.

cat secret.yml

يمكنك التحقق من أن محتوى الملف مشفر إذا رأيت أرقامًا عشوائية، كما هو موضح أدناه. يشير رأس الملف $ANSIBLE_VAULT;1.1;AES256 في أعلى الملف إلى أن الملف مشفر باستخدام Ansible Vault باستخدام التشفير AES256.

معيار التشفير المتقدم (AES) هو خوارزمية متماثلة المفتاح تستخدم نفس المفتاح لتشفير وفك تشفير البيانات.

Viewing the secret.yml file Without the Vault’s Password

تشفير الملفات الحالية

لقد قمت بإنشاء ملف من البداية والذي يتم تشفيره تلقائيًا. ولكن كيف يمكن تشفير الملفات الحالية؟ تقدم Ansible أيضًا الأمر الفرعي encrypt لتشفير ملف محدد. لرؤية كيفية تشفير ملف موجود، ستقوم بتشفير ملف محدد يحتوي على متغيرات Ansible.

قم بتشغيل الأمر التالي لتشفير ملف (vars.yml).

ansible-vault encrypt vars.yml

مثل عند إنشاء ملف secret.yml للمرة الأولى، سيُطلب منك توفير كلمة مرور لملف vars.yml.

لن يتم فتح المحرر الافتراضي هذه المرة لأن ملف vars.yml موجود بالفعل. بدلاً من ذلك، ستحصل على رسالة Encryption successful تشير إلى أن Ansible قام بتشفير الملف، كما هو موضح أدناه.

Encrypting an Existing File (vars.yml)

الآن، قم بتشغيل أمر cat أدناه للتحقق من أن Ansible قد قام بتشفير ملف vars.yml.

cat vars.yml
Verifying Encrypted Existing File

فك تشفير البيانات من Ansible Vault

لقد رأيت كيفية تشفير الملفات، مما يجعلها آمنة. ولكن عندما تحتاج إلى عرض محتوى ملفاتك، كيف تقوم بفك تشفير ملفاتك؟ فك تشفير ملف مفيد عندما تريد تحرير ملف مشفر أو قراءة محتوياته بدون توفير كلمة المرور في كل مرة. وسيكون الأمر مفيدًا لـ فك التشفير الفرعي لـ Ansible.

1. قم بتشغيل الأمر التالي لفك تشفير ملف secret.yml.

يأخذ الأمر الفرعي لفك التشفير مسار ملف مشفر كمعامل وحيد.

ansible-vault decrypt secret.yml

قدم كلمة المرور للملف، وسيتم فك تشفير محتويات الملف وكتابتها على القرص بنص عادي.

Decrypting File Data

2. بعد ذلك، قم بتشغيل أمر cat لعرض المحتوى المفكك للملف secret.yml.

cat secret.yml

يمكنك رؤية محتوى ملف secret.yml الذي يتم طباعته على الطرفية بدون أي تشفير. في هذه النقطة، يمكنك إضافة، أو تحرير، أو حذف أي سطور في الملف على نحو كامل.

file to your heart’s content

3. وأخيرًا، قم بتشغيل الأمر التالي لتشفير ملف secret.yml وقدم كلمة مرور للحفاظ على محتوى الملف آمنًا.

ansible-vault encrypt secret.yml
Encrypting a Decrypted File (secret.yml)

تحديث كلمة مرور خزانة Ansible

لقد رأيت أنه عليك إدخال كلمة مرور في كل مرة تقوم فيها بتشفير وفك تشفير الملفات. ولكن ربما، ترغب فقط في تحديث كلمة مرور الملف دون فك تشفير الملف. إذا كان الأمر كذلك، عليك استخدام الأمر الفرعي rekey. يتيح لك هذا الأمر الفرعي تغيير كلمة مرور ملفك كما تشاء.

قم بتشغيل الأمر التالي لتحديث كلمة المرور لملف \code{secret.yml}.

يأخذ الفرع الفرعي للأمر مسارًا لملف مشفر كمدخل وحيد له.

ansible-vault rekey secret.yml

قدم كلمة المرور الحالية للملف تليها كلمة المرور الجديدة، كما هو موضح أدناه.

في هذه النقطة، لن تعمل كلمة المرور القديمة بعد الآن لفك تشفير الملف.

Updating Ansible Vault’s Password

الآن، قم بتشغيل الأمر أدناه لمحاولة فك تشفير \code{secret.yml}.

ansible-vault decrypt secret.yml

قم بتقديم كلمة المرور القديمة عند الطلب، وسترى رسالة خطأ تقول “فشل التشفير”، كما هو موضح أدناه. يؤكد هذا الإخراج تحديث كلمة المرور للملف بنجاح.

Verifying New Password is in Effect

استخدام البيانات المؤمنة في السيناريوهات والوحدات التعليمية.

لقد رأيت أن تشغيل الأوامر لتشفير وفك تشفير الملفات يعمل. ولكن إذا كنت تخطط لتأمين العملية بشكل آمن لتطبيقك، ستحتاج إلى استخدام السيناريوهات والوحدات التعليمية.

1. افتح ملف تكوين Ansible (\diy12{~/.ansible.cfg}) في محرر النصوص الخاص بك، الذي يحتوي على الإعدادات الخاصة بـ Ansible.

انسخ والصق الشيفرة التالية في نهاية ملف \diy14{~/.ansible.cfg}، احفظ التغييرات، وأغلق المحرر. تُخبر هذه الشيفرة Ansible بالبحث عن ملف الجرد (\diy15{~/.ansible-hosts}).

[defaults]
hostfile = ~/.ansible-hosts

2. بعد ذلك، افتح ملف \diy17{~/.ansible-hosts}، الذي يحتوي على جرد الأجهزة التي يمكن لـ Ansible السيطرة عليها.

املأ ملف \diy19{~/.ansible-hosts} بالسطر التالي من الشيفرة، احفظ التغييرات، وأغلق الملف. تُخبر هذه الشيفرة Ansible بأنه يمكنه السيطرة على المضيف المحلي عبر نوع الاتصال المحلي.

localhost ansible_connection=local

3. قم بتشغيل الأمر أدناه لإنشاء ملف مشفر جديد. يمكنك تسمية الملف بأي اسم، ولكن في هذا البرنامج التعليمي، يتم تسمية الملف بـ helloworld.yml.

ansible-vault create helloworld.yml
Creating Ansible Playbook (helloworld.yml)

املأ الكود أدناه في ملف helloworld.yml، احفظ التغييرات وأغلق المحرر.

هذا الكود هو كتابة Ansible الأساسية التي تقوم بطباعة رسالة hello world على جميع الخوادم في جدول المخزون الخاص بك. الرمز – في أعلى كتلة الشيفرة يشير إلى بداية وثيقة YAML.

---

- hosts: all # يقوم بتعيين أداء المهمة لجميع الخوادم في المخزون
  tasks: # يقوم بتعيين المهام للقيام بها
    - shell: echo 'hello world' # يقوم بطباعة رسالة 'hello world'

4. في النهاية، قم بتشغيل أمر ansible-playbook أدناه تتبعه خيارات -ask-vault-pass لتنفيذ سيناريو helloworld.yml على جميع الخوادم في جدول المخزون الخاص بك.

ansible-playbook --ask-vault-pass helloworld.yml

قدم كلمة المرور لملف helloworld.yml عندما يُطلب منك ذلك. كما يمكن رؤية أدناه، تم تنفيذ سيناريوك بنجاح.

  • ok=2 – يشير إلى أن كل من المهام الخاصة بك تم تنفيذها بنجاح.
  • changed=1 – يشير إلى أن مهمتك قامت بتغيير واحد في حالة النظام الخاص بك. في هذه الحالة، قامت بكتابة رسالة hello world إلى الشيفرة.
  • unreachable و failed هما على حد سواء 0 – يشير إلى عدم وجود خوادم كانت غير قابلة للوصول أو فشلت خلال التشغيل.
Running your playbook

استخدام Ansible Vault مع ملف كلمة المرور

في حين أن إدخال كلمة مرور يدوياً عند تشغيل المهام لمرة واحدة يعمل، إلا أنه غير عملي للاستخدام في العالم الحقيقي.

A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.

1. قم بتشغيل الأمر أدناه لتخزين كلمة مرور Ansible Vault في ملف بالاسم .vault_pass. قم بتبديل “my_vault_password” بكلمة المرور الفعلية الخاصة بك.

echo 'my_vault_password' > .vault_pass

2. بعد ذلك، قم بتشغيل كل أمر أدناه لتغيير ملكية الملف (chown) إلى المستخدم root وتغيير أذونات الملف .vault_pass. تضمن هذه الأوامر أن يكون بإمكانك (المستخدم root) فقط قراءة وكتابة الملف.


# تغيير ملكية الملف إلى مستخدم root
chown root:root .vault_pass
# تغيير أذونات الملف لـ root فقط (أذونات القراءة والكتابة)
chmod 700 .vault_pass

3. في الختام، قم بتشغيل أمر ansible-playbook أدناه، تبعه خيار –vault-password-file لتنفيذ سيناريو (helloworld.yml) باستخدام ملف كلمة المرور .vault_pass.

ansible-playbook --vault-password-file=.vault_pass helloworld.yml

لاحظ أن Ansible قامت بتنفيذ السيناريو دون طلب كلمة المرور للملف المشفر.

Running Playbook using a Password File

الختام

في هذا البرنامج التعليمي، تعلمت كيفية استخدام Ansible Vault لتشفير وفك تشفير البيانات الحساسة في مهام وسيناريوهات Ansible. لقد قمت بتخزين كلمة مرور Ansible Vault في موقع آمن باستخدام ملف كلمة المرور. يكون هذا السلوك مفيدًا للحد من تداخل المستخدم عند تنفيذ سيناريو.

بهذه المعرفة الجديدة، يمكنك الآن تشفير البيانات الحساسة بثقة ومشاركة دفاتر اللعب مع الآخرين دون القلق بشأن أمان بياناتك.

إذا كنت تستخدم LastPass لإدارة كلمات المرور، لماذا لا تقوم بـ تخزين كلمة مرور خزانة Ansible الخاصة بك في LastPass والسماح لـ Ansible بالحصول عليها تلقائيًا عند الحاجة؟

Source:
https://adamtheautomator.com/ansible-vault/