أسرار العملاء
كل مخزون عميل يحتوي على ملف مشفر للقيم التي يجب عدم تخزينها بشكل واضح: مفاتيح API، كلمات المرور، والتوكنات. الملف هو hosts/<customer>/group_vars/secrets.yml. يتم تشفيره باستخدام Ansible Vault. الأدوار التي تحتاج إلى سر تقوم بتحميل هذا الملف في وقت التشغيل. النص العادي لا يدخل Git أبداً.
كيف يعمل
- يقوم المشغل بإضافة سر إلى الملف باستخدام
scripts/vault_secrets.py. يقوم الأداة بتشفير الملف باستخدامansible-vault. - الدور الذي يحتاج إلى سر يتضمن الدور
common/secrets. يقوم الدور بفك تشفير الملف مرة واحدة لكل مضيف ويحمّل كل اسم على مستوى أعلى كمتغير عادي. - يؤكد الدور أن الأسماء التي يحتاجها موجودة. إذا كان اسم مفقود، تفشل العملية مع الأمر الدقيق الذي ينشئه.
يتم فك تشفير الملف فقط على وحدة التحكم Ansible. فقط التكوين المعروض يصل إلى مضيف الهدف.
تنسيق الملف
الملف هو خريطة YAML من الأسماء إلى القيم. القيمة هي سلسلة أو خريطة من السلاسل.
omnihss_api_keys:
omniweb: "<64 hex characters>"
omnihlr: "<64 hex characters>"
omnicrm: "<64 hex characters>"
omniudr: "<64 hex characters>"
omnieir: "<64 hex characters>"
ran_simulator: "<64 hex characters>"
| الاسم | النوع | مطلوب بواسطة | الوصف |
|---|---|---|---|
omnihss_api_keys | خريطة | omnihss_api_auth: rbac (الافتراضي) | مفتاح API واحد لكل عميل في OmniHSS. كل مفتاح هو سر عشوائي لا يقل عن 32 حرفًا. يجب ألا يتشارك عميلان مفتاحًا. انظر مفاتيح OmniHSS API. |
تقوم الأدوار الأخرى بتوثيق الأسماء التي تقرأها في أقسامها الخاصة من هذا الدليل عند اعتماد الملف.
إدارة الأسرار
استخدم scripts/vault_secrets.py لكل تغيير. لا تعدل الملف باستخدام ansible-vault edit: الأداة تحتفظ بالنص العادي في أنبوب ولا تكتبه على القرص.
scripts/vault_secrets.py hosts/<customer> list [vault options]
scripts/vault_secrets.py hosts/<customer> set NAME [--random-hex N] [--map K1,K2,...] [--force] [vault options]
| الوسيط | الوصف |
|---|---|
hosts/<customer> | دليل مخزون العميل. يجب أن يحتوي على host_files/. |
list | طباعة أسماء الأسرار. بالنسبة لخريطة، اطبع مفاتيحها أيضًا. لا تطبع قيمة أبدًا. |
set NAME | إضافة NAME إلى الملف. أنشئ الملف إذا لم ي��ن موجودًا. |
--random-hex N | تعيين القيمة إلى سلسلة عشوائية من N بايت، مكتوبة كـ 2N حرف سداسي. يجب أن يكون N على الأقل 16. |
--map K1,K2,... | مع --random-hex، تعيين القيمة إلى خريطة تحتوي على سلسلة عشوائية واحدة لكل مفتاح. |
--force | استبدال NAME الذي موجود بالفعل. بدونها، ترفض الأداة. |
| خيارات vault | تمرر إلى ansible-vault، على سبيل المثال --ask-vault-pass أو --vault-password-file FILE. |
إذا لم يتم إعطاء --random-hex، تقرأ الأداة سطرًا واحدًا من الإدخال القياسي وتستخدمه كقيمة.
مع --ask-vault-pass، تطلب الأداة كلمة المرور مرة واحدة. عند إنشاء ملف جديد، تطلب مرتين للتأكيد.
أمثلة
إنشاء الملف ومفاتيح OmniHSS API لعميل جديد:
scripts/vault_secrets.py hosts/ExampleCustomer set omnihss_api_keys --random-hex 32 \
--map omniweb,omnihlr,omnicrm,omniudr,omnieir,ran_simulator --ask-vault-pass
إضافة سر من قيمة لديك بالفعل:
echo 'the-api-key' | scripts/vault_secrets.py hosts/ExampleCustomer set example_api_key --ask-vault-pass
رؤية الأسرار التي يمتلكها العميل:
scripts/vault_secrets.py hosts/ExampleCustomer list --ask-vault-pass
تدوير مفاتيح OmniHSS API:
scripts/vault_secrets.py hosts/ExampleCustomer set omnihss_api_keys --random-hex 32 \
--map omniweb,omnihlr,omnicrm,omniudr,omnieir,ran_simulator --force --ask-vault-pass
ثم قم بتشغيل الـ playbooks لـ HSS ولكل عميل API، بحيث يحصل الجميع على المفاتيح الجديدة.
تشغيل الـ Playbooks
كل Playbook يصل إلى دور يحتوي على سر يحتاج إلى كلمة مرور vault. قدمها بإحدى طريقتين:
| الطريقة | الأمر | الاستخدام |
|---|---|---|
| المطالبة | ansible-playbook ... --ask-vault-pass | عمليات تفاعلية |
| ملف كلمة المرور | ansible-playbook ... --vault-password-file ~/.ansible/<customer>_vault_pass | عمليات غير مراقبة، CI |
كلمة مرور vault لكل عميل هي إدخال OmniCore في مدير كلمات المرور المشترك. احتفظ بملف كلمة المرور خارج المستودع مع وضع 0600.
قم بالتزام secrets.yml إلى مستودع مخزون العميل. من الآمن الالتزام: الملف هو نص مشفر. تحقق من ذلك قبل الدفع:
head -c 14 hosts/ExampleCustomer/group_vars/secrets.yml # prints $ANSIBLE_VAULT
مفاتيح OmniHSS API
تحمي OmniHSS واجهة برمجة التطبيقات REST الخاصة بها بمفتاح واحد لكل عميل. لكل عميل دور ثابت في OmniHSS، لذا فإن مفتاح مسروق يمنح فقط حقوق ذلك العميل.
| المفتاح | العميل | دور OmniHSS |
|---|---|---|
omniweb | OmniWeb | oam |
omnihlr | OmniSS7 HLR interworking | hlr_interworking |
omnicrm | OmniCRM | crm_provisioning |
omniudr | OmniUDR (5G core) | udr |
omnieir | OmniEIR (5G core) | eir_lookup |
ran_simulator | RAN Simulator | ran_simulator |
يقوم دور omnihss بعرض جميع المفاتيح الستة في تكوين HSS. يقوم كل دور عميل بعرض مفتاحه الخاص فقط. يجب أن يكون المفتاح لا يقل عن 32 حرفًا، ولا يجوز أن يتشارك عميلان مفتاحًا. تفشل العملية إذا تم كسر أي من القاعدتين.
| المعامل | النوع | مطلوب | الافتراضي | الوصف |
|---|---|---|---|---|
omnihss_api_auth | سلسلة | لا | rbac | rbac: كل عميل يرسل مفتاحه من omnihss_api_keys، وsecrets.yml مطلوب. disabled: تقدم OmniHSS الخدمة لكل متصل بدون مفتاح، ولا حاجة لملف الأسرار. قم بتعيينه في ملف المضيف تحت all.vars. |
استكشاف الأخطاء وإصلاحها
تفشل العملية مع "يجب أن توجد وتكون مشفرة باستخدام ansible-vault"
الأعراض: يتوقف دور عند "تأكيد وجود ملف الأسرار وأنه مشفر".
الأسباب المحتملة:
- العميل ليس لديه
group_vars/secrets.ymlبعد. - تم كتابة الملف بنص عادي.
الحل:
- قم بتشغيل الأمر
setالموضح في رسالة الخطأ. يقوم بإنشاء الملف مشفرًا. - إذا كان هناك ملف نص عادي موجود، قم بحذفه. ثم أعد إنشائه باستخدام الأداة.
تفشل العملية مع "تعذر فك التشفير"
الأعراض: يتوقف دور عند "شرح فشل تحميل الأسرار".
الأسباب المحتملة:
- تم تشغيل الـ playbook بدون
--ask-vault-passأو--vault-password-file. - لا تتطابق كلمة المرور مع إدخال OmniCore vault لهذا العميل.
الحل:
- قم بتشغيل الـ playbook مرة أخرى مع كلمة مرور vault.
- تحقق من كلمة المرور باستخدام
ansible-vault view hosts/<customer>/group_vars/secrets.yml > /dev/null && echo VAULT-OK.
يحصل عميل على 401 من OmniHSS API
الأعراض: يسجل OmniWeb أو OmniCRM أو عميل آخر 401 Unauthorized من HSS بعد تدوير المفتاح.
الأسباب المحتملة:
- حصل HSS على المفاتيح الجديدة ولكن العميل لم يحصل عليها، أو العكس.
الحل:
- قم بتشغيل Playbook لـ HSS وPlaybook العميل بنفس
secrets.yml. - تأكد من أن كلا المضيفين قد أعادا تشغيل خدمتهما.
الوثائق ذات الصلة
- تكوين المتغيرات الجماعية - ملفات أخرى لكل عميل تحت
group_vars/ - مرجع التكوين - معلمات المضيف
- نظرة عامة