انتقل إلى المحتوى الرئيسي

أسرار العملاء

كل مخزون عميل يحتوي على ملف مشفر للقيم التي يجب عدم تخزينها بشكل واضح: مفاتيح API، كلمات المرور، والتوكنات. الملف هو hosts/<customer>/group_vars/secrets.yml. يتم تشفيره باستخدام Ansible Vault. الأدوار التي تحتاج إلى سر تقوم بتحميل هذا الملف في وقت التشغيل. النص العادي لا يدخل Git أبداً.

كيف يعمل​

  1. يقوم المشغل بإضافة سر إلى الملف باستخدام scripts/vault_secrets.py. يقوم الأداة بتشفير الملف باستخدام ansible-vault.
  2. الدور الذي يحتاج إلى سر يتضمن الدور common/secrets. يقوم الدور بفك تشفير الملف مرة واحدة لكل مضيف ويحمّل كل اسم على مستوى أعلى كمتغير عادي.
  3. يؤكد الدور أن الأسماء التي يحتاجها موجودة. إذا كان اسم مفقود، تفشل العملية مع الأمر الدقيق الذي ينشئه.

يتم فك تشفير الملف فقط على وحدة التحكم 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
omniwebOmniWeboam
omnihlrOmniSS7 HLR interworkinghlr_interworking
omnicrmOmniCRMcrm_provisioning
omniudrOmniUDR (5G core)udr
omnieirOmniEIR (5G core)eir_lookup
ran_simulatorRAN Simulatorran_simulator

يقوم دور omnihss بعرض جميع المفاتيح الستة في تكوين HSS. يقوم كل دور عميل بعرض مفتاحه الخاص فقط. يجب أن يكون المفتاح لا يقل عن 32 حرفًا، ولا يجوز أن يتشارك عميلان مفتاحًا. تفشل العملية إذا تم كسر أي من القاعدتين.

المعاملالنوعمطلوبالافتراضيالوصف
omnihss_api_authسلسلةلاrbacrbac: كل عميل يرسل مفتاحه من omnihss_api_keys، وsecrets.yml مطلوب. disabled: تقدم OmniHSS الخدمة لكل متصل بدون مفتاح، ولا حاجة لملف الأسرار. قم بتعيينه في ملف المضيف تحت all.vars.

استكشاف الأخطاء وإصلاحها​

تفشل العملية مع "يجب أن توجد وتكون مشفرة باستخدام ansible-vault"​

الأعراض: يتوقف دور عند "تأكيد وجود ملف الأسرار وأنه مشفر".

الأسباب المحتملة:

  • العميل ليس لديه group_vars/secrets.yml بعد.
  • تم كتابة الملف بنص عادي.

الحل:

  1. قم بتشغيل الأمر set الموضح في رسالة الخطأ. يقوم بإنشاء الملف مشفرًا.
  2. إذا كان هناك ملف نص عادي موجود، قم بحذفه. ثم أعد إنشائه باستخدام الأداة.

تفشل العملية مع "تعذر فك التشفير"​

الأعراض: يتوقف دور عند "شرح فشل تحميل الأسرار".

الأسباب المحتملة:

  • تم تشغيل الـ playbook بدون --ask-vault-pass أو --vault-password-file.
  • لا تتطابق كلمة المرور مع إدخال OmniCore vault لهذا العميل.

الحل:

  1. قم بتشغيل الـ playbook مرة أخرى مع كلمة مرور vault.
  2. تحقق من كلمة المرور باستخدام ansible-vault view hosts/<customer>/group_vars/secrets.yml > /dev/null && echo VAULT-OK.

يحصل عميل على 401 من OmniHSS API​

الأعراض: يسجل OmniWeb أو OmniCRM أو عميل آخر 401 Unauthorized من HSS بعد تدوير المفتاح.

الأسباب المحتملة:

  • حصل HSS على المفاتيح الجديدة ولكن العميل لم يحصل عليها، أو العكس.

الحل:

  1. قم بتشغيل Playbook لـ HSS وPlaybook العميل بنفس secrets.yml.
  2. تأكد من أن كلا المضيفين قد أعادا تشغيل خدمتهما.

الوثائق ذات الصلة​