پست مهمان توسط Liran Tal ، مدیر Snyk برای حمایت از توسعه دهنده

Docker در مجموع بیش از 318 میلیارد بار بارگیری تصاویر کانتینر دارد. با میلیون ها برنامه موجود در Docker Hub ، برنامه های مبتنی بر کانتینر محبوب هستند و راهی آسان برای مصرف و انتشار برنامه ها می شوند.

گفته شد ، روش ساده لوحانه ساخت برنامه های وب Docker Node.js شما ممکن است با بسیاری از موارد همراه باشد خطرات امنیتی بنابراین ، چگونه می توانیم امنیت را به بخشی مهم از Docker برای توسعه دهندگان Node.js تبدیل کنیم؟

بسیاری از مقالات در این زمینه نوشته شده اند ، اما متأسفانه ، بدون در نظر گرفتن بهترین روش های امنیتی و تولید برای ساخت تصاویر Node.js Docker. این محور مقاله من در اینجا و نسخه های نمایشی است که در این نمایش اخیر Docker Build با پیتر مک کی به اشتراک گذاشتم.

قبل از اینکه بخواهیم به Docker برای Node.js بپردازیم و تصاویر Docker را بسازیم ، بیایید نگاهی به برخی از سوالات متداول در مورد این موضوع بیندازیم.

چگونه می توانم برنامه های Node.js را docker کنم؟

اجرای برنامه Node.js در ظرف Docker می تواند به سادگی کپی کردن از فهرست پروژه و نصب همه بسته های npm مورد نیاز باشد ، اما نگرانی های زیادی در رابطه با امنیت و تولید وجود دارد که ممکن است از دست آنها برود. این نکات مربوط به درجه تولید در راهنمای زیر برای کانتینر کردن برنامه های وب Node.js با Docker آورده شده است ، که شامل همه چیز از انتخاب تصویر مناسب Docker و استفاده از ساخت های چند مرحله ای تا مدیریت اسرار با ایمنی و امکان مناسب چارچوب مربوط به تولید است. پیکربندی.

این مقاله بر روی اطلاعاتی است که شما برای درک بهتر تأثیر انتخاب تصویر مناسب Node.js Docker برای برنامه وب خود متمرکز هستید و به شما کمک می کند تا ایمن ترین تصویر Docker موجود برای برنامه خود را پیدا کنید.

Docker برای توسعه دهندگان Node.js چگونه مفید است؟

بسته بندی برنامه Node.js در یک ظرف به شما امکان می دهد برنامه کامل خود را از جمله زمان اجرا ، پیکربندی و وابستگی های سطح سیستم عامل ، و هر آنچه برای اجرای برنامه وب شما در سیستم عاملها و ساختارهای CPU مختلف مورد نیاز است. این تصاویر به عنوان مصنوعات قابل اجرا به نام تصاویر کانتینر بسته بندی شده اند. این تصاویر Docker بسته های نرم افزاری هستند که به راحتی امکان ساخت مجدد را دارند و به توسعه دهندگان Node.js راهی می دهد تا پروژه یا محصول مشابه را در همه محیط ها اجرا کنند.

سرانجام ، کانتینرهای Docker به شما امکان می دهد بدون نیاز به مجوزهای ویژه ، یا ایجاد یک محیط اختصاصی برای اجرای یک پروژه ، با نسخه های جدید سیستم عامل یا سایر تغییرات راحت تر آزمایش کنید.

1. تصویر پایه Node.js Docker مناسب برای برنامه خود انتخاب کنید

هنگام ایجاد تصویر Docker برای یک پروژه Node.js ، ما تصویر برنامه خود را بر اساس تصویر Docker دیگری که از Docker Hub می کشیم ، می سازیم. این همان چیزی است که ما از آن به عنوان تصویر پایه یاد می کنیم. تصویر پایه بلوک ساختاری تصویر جدید Docker است که می خواهید برای برنامه Node.js خود بسازید.

انتخاب یک تصویر پایه بسیار مهم است زیرا به طور قابل توجهی بر همه چیز از سرعت ساخت تصویر Docker و همچنین تأثیر می گذارد. امنیت و عملکرد برنامه وب شما. این بسیار حیاتی است و Docker و Snyk به طور مشترک این راهنمای عملی را که بر روی امنیت تصویر کانتینر برای تیم های سازنده متمرکز است ، نوشتند.

کاملاً ممکن است که شما یک تصویر سیستم عامل مبتنی بر Debian یا Ubuntu را انتخاب کنید ، زیرا این امکان را برای شما فراهم می کند تا از تمام ابزارها و کتابخانه های موجود در این تصاویر استفاده کنید. با این حال ، این قیمت دارد. وقتی یک تصویر پایه دارای یک آسیب پذیری امنیتی باشد ، شما آن را در تصویر تازه ایجاد شده خود به ارث می برید. چرا می خواهید با پیش فرض قرار دادن یک تصویر بزرگ پایه که شامل بسیاری از آسیب پذیری ها است ، شرایط بد را شروع کنید؟

وقتی به تصاویر پایه نگاه می کنیم ، بسیاری از آسیب پذیری های امنیتی مربوط به لایه سیستم عامل (سیستم عامل) این تصویر پایه است استفاده می کند تحقیقات Snyk در سال 2019 که Shifting Docker Security را ترک کرد ، نشان داد که آسیب پذیری های لایه سیستم عامل می تواند بسته به نوع عطر و طعمی که انتخاب می کنید ، تا حد زیادی متفاوت باشد.

2. تصویر Docker Node.js خود را در حین توسعه اسکن کنید

ایجاد یک تصویر Docker بر اساس تصاویر دیگر و همچنین بازسازی آنها می تواند آسیب پذیری های جدیدی را ایجاد کند ، اما راهی وجود دارد که شما بالای آن باشید.

فرآیند ساخت تصویر داکر دقیقاً مانند هر فعالیت مرتبط با توسعه. همانطور که کدی را که می نویسید آزمایش می کنید ، باید تصاویر داکر را که می سازید نیز آزمایش کنید.

این آزمایشات شامل بررسی فایلهای استاتیک – که به عنوان پرزها نیز شناخته می شوند – برای اطمینان از جلوگیری از مشکلات امنیتی و سایر الگوهای بد موجود در Dockerfile. ما برخی از این موارد را در بهترین شیوه های امنیتی تصویر Docker شرح داده ایم. اگر شما یک توسعه دهنده برنامه Node.js هستید ، می خواهید این 10 گام به گام را برای بسته بندی برنامه های وب Node.js با Docker بخوانید.

اتصال مخازن git به Snyk نیز بسیار عالی است. انتخاب Snyk از ادغام های بومی با GitHub ، GitLab ، Bitbucket و Azure Repos پشتیبانی می کند. داشتن یکپارچه سازی git به این معنی است که در صورت مشاهده نقاط ضعف امنیتی ، می توانیم درخواست های کشش شما را اسکن کرده و با اطلاعات امنیتی حاشیه نویسی کنیم. این به شما امکان می دهد در صورت ایجاد آسیب پذیری های امنیتی جدید ، درگاه هایی را وارد کرده و ادغام کنید.

اگر برای یکپارچه سازی مداوم (CI) یا انعطاف پذیری بیشتری برای توسعه دهنده نیاز دارید ، با Snyk CLI مطابقت داشته باشید. CLI به شما امکان می دهد تصویر ظرف Docker را به راحتی آزمایش کنید. بیایید بگوییم شما در حال ساخت یک تصویر داکر به صورت محلی هستید و آن را به عنوان nodejs: notification-v99.9 برچسب گذاری کرده اید – آن را به صورت زیر تست می کنیم:

  1. Snyk CLI را نصب کنید:
    $ npm نصب -g snyk
  2. سپس اجازه دهید Snyk CLI به طور خودكار رمز API را برای شما بدست آورد: سپس نتایج آزمون همراه با اطلاعات مربوط به CVE ، مسیری که آسیب پذیری را به شما معرفی می کند ، روی صفحه چاپ می شوند ، بنابراین شما می دانید که کدام یک از سیستم های عامل وابسته به آن هستند.

    در زیر مثالی برای تست تصویر پایه Docker آورده شده است گره: 15 :

     ✗ آسیب پذیری با شدت بالا در binutils یافت می شود
      توضیحات: خارج از محدوده
      اطلاعات: https://snyk.io/vuln/SNYK-DEBIAN9-BINUTILS-404153
      معرفی شده از طریق: dpkg/[email protected] ، [email protected]
      از: dpkg/[email protected]> [email protected]
      از: [email protected]> gcc-defaults / gcc @ 4: 6.3.0-4> [email protected]+deb9u1> [email protected]
      معرفی شده توسط تصویر پایه شما (گره: 15)
    
    vuln آسیب پذیری شدت بالا در binutils یافت می شود
      توضیحات: Integer Overflow یا Wraparound
      اطلاعات: https://snyk.io/vuln/SNYK-DEBIAN9-BINUTILS-404253
      معرفی شده از طریق: dpkg/[email protected] ، [email protected]
      از: dpkg/[email protected]> [email protected]
      از: [email protected]> gcc-defaults / gcc @ 4: 6.3.0-4> [email protected]+deb9u1> [email protected]
      معرفی شده توسط تصویر پایه شما (گره: 15)
    
    
    
    سازمان: snyk-demo-567
    مدیر بسته: deb
    پرونده هدف: Dockerfile
    نام پروژه: docker-image | گره
    تصویر داکر: گره: 15
    بستر های نرم افزاری: linux / amd64
    تصویر پایه: گره: 15
    مجوزها: فعال است
    
    412 مورد وابستگی را برای موضوعات شناخته شده آزمایش کرد ، 554 مسئله پیدا شد.
    
    شدت آسیب پذیری تصویر پایه
    گره: 15 554 56 بالا ، 63 متوسط ​​، 435 کم
    
    توصیه هایی برای ارتقا image تصویر پایه:
    
    انواع تصویر جایگزین
    شدت آسیب پذیری تصویر پایه
    گره: current-buster-slim 53 10 بالا ، 4 متوسط ​​، 39 کم
    گره: 15.5 باریک 72 18 بلند ، 7 متوسط ​​، 47 کم
    گره: جریان شکن 304 33 بالا ، 43 متوسط ​​، 228 کم
    

    3. آسیب پذیری های زمان اجرا Node.js را در تصاویر Docker خود برطرف کنید

    جزئیاتی که اغلب نادیده گرفته می شوند ، هنگام کنترل خطر عکس های ظرف Docker ، خود زمان اجرا بودن برنامه است. چه Docker را برای جاوا تمرین کنید ، و چه Docker را برای برنامه های وب Node.js اجرا کنید ، ممکن است زمان اجرا شدن برنامه Node.js آسیب پذیر باشد.

    شما باید آگاه باشید و نسخه های امنیتی Node.js و Node را دنبال کنید سیاست امنیتی .js. به جای اینکه به صورت دستی با این موارد همراه شوید ، از Snyk استفاده کرده و نقاط ضعف امنیتی Node.js را نیز پیدا کنید.

    برای اینکه زمینه های بیشتری درباره آسیب پذیری های امنیتی در برچسب های مختلف تصویر پایه Node.js ارائه دهید ، برخی از آنها را با Snyk اسکن کردم CLI و نتایج را در نمودار مقیاس لگاریتمی زیر ترسیم کرد:

    می بینید که: بیش از 500 آسیب پذیری امنیتی ، اما همچنین 2 آسیب پذیری امنیتی را در زمان اجرا Node.js معرفی می کند. اگر در حال حاضر نسخه Node.js 15 را در دست اجرا دارید و آن را وصله یا اصلاح نکرده اید ، باید شما را نگران کند.

  3. گره گره: alpine برچسب تصویر ممکن است دارای سیستم عامل آسیب پذیر نباشد وابستگی ها در تصویر پایه – به همین دلیل است که یک نوار آبی وجود ندارد – اما هنوز یک نسخه آسیب پذیر از آخرین زمان اجرا Node.js (نسخه 15) دارد.
  4. اگر نسخه پشتیبانی نشده Node.js را اجرا می کنید – به عنوان مثال ، Node.js 10 – آسیب پذیر است و می توانید دریافت کنید که هیچ به روزرسانی امنیتی دریافت نمی کند.

اگر می خواهید Node.js نسخه 15 را انتخاب کنید ، که آخرین نسخه منتشر شده است ، در زمان با نوشتن این مقاله ، واقعاً خود را در معرض 561 آسیب پذیری امنیتی موجود در این ظرف ، بلکه همچنین در معرض دو آسیب پذیری امنیتی در زمان اجرا Node.js قرار می دهید.

ما می توانیم نتایج آزمون اسکن Docker را در این تصویر عمومی ببینیم تست URL: https://snyk.io/test/docker/node:15.5.5.0. شما می توانید سایر برچسب های تصویر پایه Node.js را که با این سرویس اسکن Docker عمومی و رایگان استفاده می کنید آزمایش کنید: https://snyk.io/test.cepts19659043^ امنیت اکنون بخشی جدایی ناپذیر از روند کار Docker است ، با استفاده از اسنیک در حال اسکن کانتینر در Docker Hub و Docker Desktop. در واقع ، اگر از Docker به عنوان یک پلتفرم توسعه استفاده می کنید ، باید صفحه فهرست آسیب پذیری Snyk و Docker ما را مرور کنید.

اگر قبلاً یک حساب کاربری Docker دارید ، می توانید از آن برای اتصال به Snyk و وارد کردن سریع Docker Hub خود استفاده کنید. مخازن با حداکثر 200 اسکن رایگان در ماه.

4. تصاویر Docker مستقر شده خود را برای برنامه های Node.js خود کنترل کنید

هنگامی که تصاویر Docker را ساختید ، احتمالاً آنها را به یک رجیستری Docker هدایت می کنید که تصاویر را ردیابی می کند ، بنابراین می توان آنها را به عنوان یک کاربردی مستقر و چرخاند. برنامه کانتینر.

چرا باید تصاویر پایه Docker را کنترل کنیم؟

اگر تمام دستورالعمل های امنیتی را که تاکنون با اسکن و اصلاح تصاویر پایه پوشش داده ایم ، انجام می دهید ، بسیار خوب است. با این حال ، به خاطر داشته باشید که آسیب پذیری های امنیتی جدید همیشه کشف می شوند. اگر اکنون 78 آسیب پذیری امنیتی در تصویر خود دارید ، به این معنی نیست که فردا صبح که CVE های جدید گزارش می شود ، 100 مورد ندارید و بر کانتینرهای موجود در تولید تأثیر می گذارد. به همین دلیل نظارت بر رجیستری تصاویر کانتینر شما – آنهایی که برای استقرار کانتینرها استفاده می کنید – بسیار مهم است تا اطمینان حاصل کنید که به زودی درباره مسائل امنیتی اطلاعات خواهید یافت و می توانید آنها را اصلاح کنید.

اگر از یک رجیستری پولی Docker Hub برای استفاده می کنید تصاویر شما ، ممکن است قبلاً اسکن امنیتی یکپارچه Docker توسط Snyk را در Docker Hub مشاهده کرده باشید.

همچنین می توانید به طور مستقیم با بسیاری از ثبت تصاویر Docker از برنامه Snyk ادغام شوید. به عنوان مثال ، می توانید تصاویر را از Docker Hub ، ACR ، ECR ، GCR یا Artifactory وارد کرده و سپس Snyk این موارد را به طور مرتب برای شما اسکن کرده و از طریق Slack یا ایمیل در مورد هرگونه مسائل امنیتی به شما هشدار می دهد:

5. برای یک Node.js Docker ایمن و ایمن ، دستورالعمل های امنیتی را دنبال کنید.

تبریک می گوییم که تاکنون با تمام دستورالعمل های امنیتی همگام بوده اید!

برای جمع بندی ، اگر می خواهید در بهترین روش های امنیتی غوطه ور شوید برای ساخت تصاویر بهینه Docker برای Node.js و برنامه های جاوا ، این منابع را بررسی کنید:

  1. 10 بهترین روش امنیتی Docker – اقدامات امنیتی دقیق که باید هنگام ساخت تصاویر پایه Docker و هنگام کشیدن آنها نیز دنبال کنید ، زیرا همچنین معرفی می کند خواننده اعتماد به محتوای Docker.
  2. آیا شما یک توسعه دهنده جاوا هستید؟ این منبع را با ارزش می دانید: Docker برای توسعه دهندگان جاوا: 5 نکته ای که باید بدانید تا امنیت شما را بهم نریزد.
  3. 10 بهترین روش برای نگهداری برنامه های وب Node.js با Docker – اگر شما یک توسعه دهنده Node.js هستید شما می خواهید این گام به گام را دوست داشته باشید ، و به شما نشان می دهد چگونه می توانید تصاویر پایه Docker را برای برنامه های Node.js خود ایجاد کنید.

با Snyk و شناسه Docker خود ، آزمایش و اصلاح تصاویر کانتینر خود را شروع کنید.