انتقل إلى المحتوى
تواصل معنا

Moatgator Vault

مكان واحد لأسرار خادمك الخلفي وCI وتطبيق الجوال الخاص بك

ضع مرجع mg:// حيث كانت القيمة. تحلّه CLI وGitHub Actions وSDK الجوال عند التشغيل، ولا يتلقى تطبيقك السرّ إلا على جهاز اجتاز Attest.

مضمَّن بدءًا من خطة Startup.

terminalمثال
$ moatgator secrets run --env-file .env.tpl -- npm start$ moatgator secrets inject -i .env.tpl -o .env$ moatgator secrets get mg://api/prod/DATABASE_URL

مراجع mg://

احفظ المرجع في Git، لا القيمة

يسمّي المرجع مشروعًا وبيئة وسرًّا، كما في mg://api/prod/DATABASE_URL. من الآمن الاحتفاظ به في Git: فلا تحوّله إلى قيمة إلا هوية لديها صلاحية الوصول.

  1. 01

    ملف .env.tpl في مستودعك

    احتفظ بقالب واحد يحتوي على المراجع. يكتب moatgator secrets inject ملف .env بأذونات 0600، ولا يستبدل ملفًا موجودًا دون --force.

    .env.tplمثال
    # .env.tpl: safe to commitDATABASE_URL=mg://api/prod/DATABASE_URLSTRIPE_KEY=mg://api/prod/STRIPE_KEYSENTRY_DSN=mg://api/prod/SENTRY_DSN
  2. 02

    moatgator secrets run

    يشغّل أمرك مع الأسرار كمتغيرات بيئة ويخفي قيمها في مخرجات الأمر. أما moatgator secrets get فيقرأ مرجعًا واحدًا.

    terminalمثال
    $ moatgator secrets run --env-file .env.tpl -- npm start$ moatgator secrets inject -i .env.tpl -o .env$ moatgator secrets get mg://api/prod/DATABASE_URL
  3. 03

    المرجع نفسه في التطبيق

    في SDK الخاص بـ Android، يقرأ Moatgator.vault.get("mg://mobile/prod/PARTNER_KEY") البيئة المرتبطة بالتطبيق في لوحة التحكم. ولا تُشحن القيمة أبدًا داخل APK.

    Kotlinمثال
    // Android (Kotlin), off the main threadMoatgator.startSession(playIntegrityProvider)val key = Moatgator.vault.get("mg://mobile/prod/PARTNER_KEY")

المشاريع والبيئات والإصدارات

  • المشاريع والبيئات

    يبدأ كل مشروع بـ dev وstaging وprod. أضف بيئاتك الخاصة عندما تحتاج إليها.

  • الوراثة والتجاوز

    يمكن لبيئة أن ترث من بيئة أخرى، حتى ثلاثة مستويات. والسرّ الذي يحمل الاسم نفسه يتجاوز السرّ الموروث.

  • البيئات المحمية

    تبدأ prod محمية: لا يستطيع قراءة قيمها أو الكتابة فيها إلا المالكون والمسؤولون.

  • الإصدارات والتراجع

    كل تغيير ينشئ إصدارًا له سجل. والتراجع ينشئ إصدارًا جديدًا، فلا يُعاد كتابة السجل أبدًا.

  • الإبطال الفوري

    أبطِل سرًّا أو رمز خدمة فتُرفض القراءة التالية، دون انتظار تاريخ انتهاء الصلاحية.

  • الأدوار

    تحدد أدوار المالك والمسؤول والمطوّر والقارئ من يرى القيم ومن يغيّرها.

على الأجهزة المصدَّق عليها فقط

السرّ نفسه، يُسلَّم إلى تطبيق الجوال فقط على جهاز اجتاز Attest

تخدم أدوات إدارة الأسرار عادةً الخوادم والمطورين وCI. أما Vault فيخدم أيضًا التطبيق الموجود في أيدي مستخدميك: يطلب SDK السرّ وقت التشغيل، وتتحقق API من Attest الخاص بالجهاز (Play Integrity أو App Attest، إضافة إلى إشارات RASP من Moatgator) وترسل القيمة مشفّرة لمفتاح مؤقت خاص بتلك الجلسة. لا يدخل أي شيء في الملف الثنائي.

يحتفظ SDK بالقيمة في الذاكرة فقط، ولا يكتبها أبدًا على القرص أو في السجلات. مراجع mg:// متاحة في SDK الخاص بـ Android.

سياسات لكل سرّ

  • الحد الأدنى للحكماختر أدنى حكم من Attest يُسمح له باستلام كل سرّ.
  • اشتراط تصديق المنصةاشترط نتيجة تصديق من المنصة، لا إشارات SDK نفسه فقط.
  • الحد الأقصى لعمر التصديقارفض تسليم السرّ عندما يكون تصديق الجهاز أقدم مما تسمح به.

CI والخوادم

لا رمز طويل الأمد مخزَّن في CI الخاص بك

يستبدل الإجراء moatgator-hq/github-action/vault على GitHub Actions رمز OIDC الخاص بالمهمة برمز قراءة صالح لمدة 15 دقيقة. لا تتلقى pull requests رمزًا أبدًا. وحيث لا يتوفر OIDC، استخدم رمز خدمة.

  • رموز الخدمة (mgvt_…) للقراءة فقط، ومرتبطة بمشروع واحد وبالبيئات التي تختارها.
  • انتهاء الصلاحية إلزامي: 90 يومًا افتراضيًا، وسنة واحدة كحد أقصى.
  • تُخفى القيم في سجل المهمة ولا تصبح أبدًا مخرجات للخطوات.
  • المرجع الذي لا يمكن حلّه يُفشل الخطوة دون تصدير أي شيء.
.github/workflows/deploy.ymlمثال
permissions: { contents: read, id-token: write }steps:  - uses: moatgator-hq/github-action/vault@v1    with:      project-id: vpj_…      secrets: |        DATABASE_URL=mg://api/prod/DATABASE_URL  - run: ./deploy.sh   # $DATABASE_URL, *** in the log

المزامنة والتدوير

انقل الأسرار إلى حيث تنشر تطبيقك، ودوّرها وفق جدول زمني

تُبقي المزامنة بيئةً، مع ما ترثه، منسوخةً إلى أسرار GitHub Actions أو Railway أو Vercel. وهي تعمل عند إنشائها، ثم مرة أخرى بعد كل تغيير في تلك البيئة أو في بيئة ترث منها.

  • أسرار GitHub Actions

    زامِن مع مستودع أو مع بيئة على GitHub. تُشفَّر كل قيمة بالمفتاح العام للمستودع قبل أن تغادر Moatgator.

  • Railway

    زامِن مع متغيرات مشروع وبيئة على Railway، أو مع متغيرات خدمة واحدة.

  • Vercel

    زامِن مع متغيرات production أو preview أو development لمشروع على Vercel، وتُحفظ كمتغيرات مشفَّرة.

  • إذن صريح وحالة واضحة

    تؤكد كل وجهة وتمنحها رمزًا خاصًا بتلك الوجهة وحدها، يُخزَّن مشفَّرًا. وتعرض كل مزامنة آخر وقت تشغيل لها، وعدد الأسرار التي كتبتها، وأي خطأ.

التدوير المجدول

  • قيمة عشوائية جديدة في موعدهاللأسرار التي لا تستخدمها إلا شركتك، مثل مفاتيح HMAC وأسرار الجلسات: تولّد Moatgator قيمة جديدة، وتنشئ إصدارًا، وتشغّل المزامنات.
  • تذكير لمفاتيح المزوّدين الآخرينللمفتاح الصادر عن خدمة أخرى، يتلقى المالكون والمسؤولون رسالة بريد إلكتروني عند حلول موعده، وتعرض لوحة التحكم التدوير على أنه متأخر حتى تُحفظ قيمة جديدة.

المزامنة تكتب في الوجهة فقط، ولا تحذف منها إلا الأسرار التي كتبتها بنفسها. وحذف المزامنة يترك الوجهة كما هي.

مشفَّر لكل مؤسسة، ومدقَّق عند كل قراءة

  • تشفير مغلَّف لكل مستأجر

    لكل مؤسسة مفتاحها الخاص، مغلَّف بمفتاح رئيسي.

  • نص مشفَّر مرتبط بمكانه

    يرتبط كل نص مشفَّر بمشروعه وبيئته واسمه وإصداره، فلا يمكن نقله إلى سرّ آخر.

  • القيم تبقى خارج السجلات

    لا تُكتب قيم الأسرار أبدًا في سجلاتنا، ويخفيها CLI والإجراء (Action) في مخرجاتك.

  • سجل تدقيق لكل قراءة

    لكل قراءة: من قرأ، ومن أين، وأي إصدار، والنتيجة.

المقارنة

Moatgator Vault و1Password وDoppler

1Password وDoppler أداتان راسختان لإدارة الأسرار، وكلتاهما تؤدي كثيرًا مما يؤديه Vault. يوضح الجدول موقع كل منها، مع مصدر عام وتاريخ تحققنا منه لكل خانة تخصهما. Vault ليس مدير كلمات مرور للأشخاص: بل يركّز على التطبيقات وCI وأجهزة الجوال.

إمكانات إدارة الأسرار جنبًا إلى جنب
الإمكانيةMoatgator Vault1PasswordDoppler
مراجع بدلًا من القيم

mg://project/environment/NAME، وكذلك في SDK الجوال

1

op://vault/item/field

جزئيًا23

مراجع ${…} داخل Doppler؛ وقوالب {{.NAME}} للملفات

تشغيل أمر مع الأسرار كمتغيرات بيئة

القيم مخفية في المخرجات

4

op run، مع إخفاء القيم في المخرجات افتراضيًا

56

doppler run؛ إخفاء المخرجات غير موثَّق لـ CLI

إنشاء ملف من قالب

الملف يُكتب بأذونات 0600

7

op inject

3

secrets substitute و--mount

بيئات مع الوراثة

حتى 3 مستويات، والتجاوز حسب الاسم

جزئيًا8

Environments موجودة، مستقلة عن بعضها

910

ترث branch configs من الإعداد الجذري؛ وراثة الإعدادات في Team وEnterprise

سجل الإصدارات والتراجع

التراجع ينشئ إصدارًا جديدًا

11

سجل العناصر والاستعادة

12

التراجع من السجلات

رموز آلية محددة النطاق مع انتهاء صلاحية

للقراءة فقط، لكل مشروع وبيئة، وانتهاء الصلاحية إلزامي

1314

service accounts بأذونات لكل vault وانتهاء صلاحية اختياري

15

service tokens لكل config، وانتهاء صلاحية اختياري

إبطال فوري للرموز1615
CI مع OIDC، دون رمز مخزَّن

GitHub Actions، رمز صالح لمدة 15 دقيقة

جزئيًا1718

يستخدم load-secrets-action رمزًا مخزَّنًا؛ Credential Broker مع OIDC في معاينة عامة

196

service account identities، في خطتي Team وEnterprise

المزامنة مع GitHub Actions وRailway وVercel

بعد كل تغيير؛ تكتب فقط، ولا تحذف إلا ما كتبته

جزئيًا820

مزامنة Environments مع AWS Secrets Manager (beta)؛ لم يُعثر على GitHub وRailway وVercel

2122

تكاملات GitHub وVercel وRailway ترسل الأسرار تلقائيًا

التدوير المجدولجزئيًا

قيمة عشوائية جديدة لأسرارك الخاصة؛ وتذكير بالبريد الإلكتروني لمفاتيح الأطراف الأخرى

غير موجود في الوثائق العامة2316

رموز service account تُدوَّر يدويًا؛ لم يُعثر على تدوير مجدول للأسرار المخزَّنة

24

تدوير تلقائي للخدمات المدعومة، مثل قواعد البيانات، في Team وEnterprise

الأدوار وحماية بيئة الإنتاج

مالك ومسؤول ومطوّر وقارئ؛ prod محمية

258

أذونات vault وEnvironment

26

أدوار على مستوى المشروع والبيئة

تدقيق كل قراءة لسرّ

من، ومن أين، والإصدار، والنتيجة

27

تقارير الاستخدام في 1Password Business

جزئيًا28

سجل الوصول يحتفظ بأول قراءة وآخرها لكل جهة فاعلة

التسليم إلى تطبيق جوال على جهاز مصدَّق عليه فقط

Attest مع RASP، مشفَّر لكل جلسة

غير موجود في الوثائق العامة2930

غير موجود في وثائق SDK وConnect

غير موجود في الوثائق العامة3121

غير موجود في وثائق SDK والتكاملات

نقاط قوة 1Password

  • تشفير من طرف إلى طرف، مع Secret Key لا يُرسَل أبدًا إلى 1Password.3233
  • يخفي op run قيم الأسرار في مخرجات الأمر افتراضيًا.4
  • SDKs رسمية للغات Go وJavaScript وPython.29

نقاط قوة Doppler

  • قائمة موثَّقة من التكاملات الأصلية مع منصات السحابة وCI.21
  • يقدّم doppler run --mount الأسرار عبر أنبوب مسمّى مؤقت بدلًا من ملف على القرص.5
  • مفتاح تشفير لكل مساحة عمل، ومفاتيح يديرها العميل (EKM) في خطة Enterprise.3435

المصادر

  1. 1. 1Password CLI — Secret references · تم التحقق في
  2. 2. Doppler — Secrets (referencing) · تم التحقق في
  3. 3. Doppler — Secret injection with templates · تم التحقق في
  4. 4. 1Password CLI — op run · تم التحقق في
  5. 5. Doppler — Accessing secrets (run, --mount) · تم التحقق في
  6. 6. Doppler — GitHub OIDC examples · تم التحقق في
  7. 7. 1Password — Load secrets into config files (op inject) · تم التحقق في
  8. 8. 1Password Environments · تم التحقق في
  9. 9. Doppler — Branch configs · تم التحقق في
  10. 10. Doppler — Config inheritance · تم التحقق في
  11. 11. 1Password — View and restore previous versions of items · تم التحقق في
  12. 12. Doppler — Versioning · تم التحقق في
  13. 13. 1Password CLI — op service-account · تم التحقق في
  14. 14. 1Password CLI — op connect · تم التحقق في
  15. 15. Doppler — Service tokens · تم التحقق في
  16. 16. 1Password — Manage service accounts · تم التحقق في
  17. 17. 1Password — GitHub Actions (load-secrets-action) · تم التحقق في
  18. 18. 1Password Credential Broker — GitHub Actions (public preview) · تم التحقق في
  19. 19. Doppler — Service account identities (OIDC) · تم التحقق في
  20. 20. 1Password — Sync Environments to AWS Secrets Manager (beta) · تم التحقق في
  21. 21. Doppler — Integrations · تم التحقق في
  22. 22. Doppler — GitHub Actions integration · تم التحقق في
  23. 23. 1Password Secrets Automation · تم التحقق في
  24. 24. Doppler — Secrets rotation · تم التحقق في
  25. 25. 1Password — Create, share, and manage vaults · تم التحقق في
  26. 26. Doppler — Project permissions · تم التحقق في
  27. 27. 1Password — Reports (usage reports) · تم التحقق في
  28. 28. Doppler — Access logs · تم التحقق في
  29. 29. 1Password SDKs · تم التحقق في
  30. 30. 1Password Connect · تم التحقق في
  31. 31. Doppler — Future SDKs and integration roadmap · تم التحقق في
  32. 32. 1Password — About the 1Password security model · تم التحقق في
  33. 33. 1Password — About your Secret Key · تم التحقق في
  34. 34. Doppler — Security fact sheet · تم التحقق في
  35. 35. Doppler — Pricing · تم التحقق في

1Password وDoppler علامتان تجاريتان لمالكيهما، ذُكرتا فقط لتعريف المنتجات المقارَنة. ما نقوله عنهما مأخوذ من وثائقهما العامة في التاريخ المبيَّن. «غير موجود» يعني أننا لم نجده في الصفحات المذكورة، لا أن المنتج يفتقر إليه. إذا تغيّر شيء، راسلنا وسنصحّحه.

الخطط

Vault مضمَّن في خطط Startup وScale وEnterprise.

الخطةالمشاريع لكل مؤسسةالأسرار لكل بيئة
Startup5100
Scale50500
Enterprise2001,000
عرض جميع الخطط

الأسئلة الشائعة

هل أحتاج إلى تغيير الشيفرة لاستخدام Vault؟

ليس على الخوادم وCI: تواصل شيفرتك قراءة متغيرات البيئة، وتبدأ العملية باستخدام moatgator secrets run أو GitHub Action. وفي تطبيق Android، استدعِ Moatgator.vault.get مع المرجع.

هل يمكن لمن يملك ملف APK الخاص بي قراءة سرّ من Vault؟

القيمة ليست في APK. ترسلها API فقط إلى جهاز اجتاز Attest وفق سياسة السرّ، مشفَّرة لتلك الجلسة، ويحتفظ بها SDK في الذاكرة فقط. يظل من الممكن اختراق الجهاز بعد اجتيازه، لذا احتفظ بفحوصات على جانب الخادم لكل ما يتضمن تحريك الأموال.

ماذا يحدث إذا تسرّب رمز خدمة؟

أبطِله في لوحة التحكم فيُرفض الطلب التالي. رموز الخدمة للقراءة فقط، ومحصورة في مشروع واحد والبيئات التي اخترتها، وتنتهي صلاحيتها بعد 90 يومًا افتراضيًا.

هل يحل Vault محل 1Password أو Doppler؟

ليس بالضرورة. إذا كنت تستخدم أحدهما بالفعل للخوادم وCI، فيمكنه البقاء. يضيف Vault التسليم إلى تطبيق الجوال على الأجهزة المصدَّق عليها، ويمكنه تغطية الخوادم وCI أيضًا إذا فضّلت أداة واحدة.

أي الخطط تتضمن Vault؟

Startup وScale وEnterprise. المشاريع لكل مؤسسة: 5 و50 و200. الأسرار لكل بيئة: 100 و500 و1,000.

ابدأ بسرّ واحد

أنشئ مشروعًا، وأضف سرًّا، وحُلَّه من CLI أو من CI أو من تطبيقك.