אבטח את הסודות שלך עם 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 עבור המשתמש המחובר כרגע. משתנה זה מבטיח שהעורך הטקסט המועדף ייבחר בכל פעם שאתה פותח מסוף חדש.

אפשר להגדיר כל עורך טקסט אחר שאתה מעדיף, אך המדריך הזה משתמש בעורך הטקסט nano.

export EDITOR=nano
Setting the Default Text Editor

4. לבסוף, הפעל את הפקודות הבאות כדי להחיל את השינויים (source) בלעדייך להתנתק ולהתחבר מחדש, ולהדפיס (echo) את העורך הטקסט המועדף במערכת שלך.

# טוען את משתנה הסביבה למסוף הנוכחי שלך.
source ~/.bashrc
# מדפיס את העורך הטקסט המועדף במערכת שלך.
echo $EDITOR

וודא שהמשתנה EDITOR מוגדר לעורך הטקסט המועדף עליך, כפי שמוצג למטה.

Applying and Verifying Changes

יצירת והצפנת ה-Vault הראשונה שלך עם 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. הרץ את הפקודה cat נסה להציג את תוכן הקובץ 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 כבר קיים. במקום זאת, תקבלו את הודעת ההצפנה הצליחה המציינת ש-Ansible הציפה את הקובץ, כפי שמוצג למטה.

Encrypting an Existing File (vars.yml)

עכשיו, הריצו את פקודת ה-cat למטה כדי לוודא ש-Ansible הציפה את הקובץ vars.yml.

cat vars.yml
Verifying Encrypted Existing File

פיענוח נתונים מ-Ansible Vault

ראית כיצד להצפין קבצים, כך שהם יהיו מאובטחים. אך כאשר תרצה לצפות בתוכן של הקבצים שלך, כיצד תפעיל פענוח על הקבצים שלך? פענוח קובץ שימושי כאשר ברצונך לערוך קובץ מוצפן או לקרוא את התוכן שלו מבלי לספק את הסיסמה בכל פעם. והפקודה המשנית decrypt של Ansible תהיה מועילה.

1. הפעל את הפקודה הבאה כדי לפענח את הקובץ secret.yml.

הפקודה המשנית decrypt מקבלת את נתיב הקובץ המוצפן כפרמטר היחיד שלה.

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. פקודת המשנה הזו מאפשרת לך לשנות את סיסמת הקובץ שלך לפי רצונך.

הרץ את הפקודה הבאה כדי לעדכן את הסיסמה עבור קובץ secret.yml.

הפקודה המשנה rekey לוקחת את נתיב הקובץ המוצפן כפרמטר היחיד שלה.

ansible-vault rekey secret.yml

ספק את הסיסמה הנוכחית עבור הקובץ ואחריה את הסיסמה החדשה, כפי שמוצג למטה.

בנקודה זו, הסיסמה הישנה לא תעבוד יותר לפענח את הקובץ.

Updating Ansible Vault’s Password

כעת, הפעל את הפקודה למטה כדי לנסות ולפענח את secret.yml.

ansible-vault decrypt secret.yml

ספק את הסיסמה הישנה כאשר יתבקש, ותראה הודעת שגיאה אומרת שהפענוח נכשל (Decryption failed), כפי שמוצג למטה. הפלט הזה מאשר שהסיסמה עבור הקובץ עודכנה בהצלחה.

Verifying New Password is in Effect

שימוש בנתונים מאובטחים ב Playbooks וב Modules

ראית שהפעלת פקודות להצפנה ופענוח קבצים עובדת. אך אם אתה מתכוון לאוטומטיזציה בצורה מאובטחת עבור היישום שלך, יהיה עליך להשתמש ב- playbooks ו- modules.

1. פתח את קובץ התצורה של Ansible (~/.ansible.cfg) בעורך שלך, אשר מכיל את ההגדרות של Ansible.

העתק והדבק את הקוד הבא בסוף קובץ ~/.ansible.cfg, שמור את השינויים וסגור את העורך. קוד זה אומר ל- Ansible לחפש את קובץ המלאי (~/.ansible-hosts).

[defaults]
hostfile = ~/.ansible-hosts

2. לאחר מכן, פתח את קובץ ~/.ansible-hosts, אשר מכיל את המלאי של המארחים שה- Ansible שלך יכול לנהל.

מלא את קובץ ~/.ansible-hosts בשורת הקוד הבאה, שמור את השינויים וסגור את הקובץ. קוד זה אומר ל- Ansible שהוא יכול לנהל את המחשב המקומי דרך סוג החיבור המקומי.

localhost ansible_connection=local

3. להריץ את הפקודה הבאה כדי ליצור קובץ מוצפן חדש. אתה יכול לתת שם לקובץ בכל שם שתרצה, אך במדריך זה הקובץ יקרא helloworld.yml.

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

מלא את הקוד למטה לקובץ helloworld.yml, שמור את השינויים וסגור את העורך.

הקוד הזה הוא פלייבוק בסיסי של Ansible שמדפיס את ההודעת 'שלום עולם' על כל המארחים ברשימת האינוונטורי שלך. הסמל — בראש הבלוק הקוד מציין את תחילת מסמך YAML.

---

- hosts: all # מגדיר לבצע את המשימה לכל המארחים ברשימת האינוונטורי
  tasks: # מגדיר את המשימות לבצע
    - shell: echo 'hello world' # מדפיס הודעת 'שלום עולם'

4. לבסוף, הריץ את פקודת ה-ansible-playbook למטה עם האפשרויות –ask-vault-pass כדי להריץ את פלייבוק ה-helloworld.yml על כל המארחים ברשימת האינוונטורי שלך.

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

ספק את הסיסמה עבור קובץ helloworld.yml כאשר יתבקש. כפי שאתה יכול לראות למטה, הרצת הפלייבוק שלך הצליחה.

  • ok=2 – מציין ששני המשימות שלך הוצלחו בהצלחה.
  • changed=1 – מציין שהמשימה שלך עשתה שינוי אחד במצב המערכת שלך. במקרה זה, כתבה הודעת 'שלום עולם' לשלט.
  • 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 בסיסמת ה־Vault האמיתית שלכם.

echo 'my_vault_password' > .vault_pass

2. לאחר מכן, הריצו כל פקודה למטה כדי לשנות את הבעלות (chown) של הקובץ לroot ולשנות את ההרשאות של קובץ .vault_pass. פקודות אלו מבטיחות כי רק אתם (משתמש ה־root) תוכלו לקרוא ולכתוב בקובץ.

# שינוי בעלות של הקובץ למשתמש root
chown root:root .vault_pass
# שינוי הרשאות הקובץ לרוט בלבד (הרשאות קריאה וכתיבה בלבד)
chmod 700 .vault_pass

3. לבסוף, הריצו את הפקודה ansible-playbook למטה, עם האפשרות –vault-password-file כדי לבצע playbook (helloworld.yml) באמצעות קובץ סיסמה (.vault_pass).

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

שימו לב ש־Ansible ביצע את ה־playbook בלי לשאול אחר סיסמת הקובץ המוצפן.

Running Playbook using a Password File

סיכום

במדריך זה, למדתם כיצד להשתמש ב־Ansible Vault כדי להצפין ולפענח נתונים רגישים עבור playbook ומשימות של Ansible. הצפנתם את סיסמת ה־Ansible Vault במיקום מאובטח באמצעות קובץ סיסמה. התנהגות זו מועילה למינימום התערבות מהמשתמש בעת ביצוע playbook.

עם הידע החדש שלך, אתה יכול כעת להצפין נתונים רגישים בביטחון ולשתף את המדריכים שלך עם אחרים בלי לדאוג לביטחון הנתונים שלך.

אם אתה משתמש ב-LastPass לניהול סיסמאות, למה לא לאחסן את סיסמת ה-Vault שלך ב-Ansible ב-LastPass ולתת ל-Ansible לאחזר אותה אוטומטית כאשר נדרש?

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