بینش امنیتی زمان اجرا

۱. مقدمه

در این آزمایش، شما یک برنامه را در Cloud Run و خوشه GKE مستقر خواهید کرد و بینش‌های امنیتی را برای استقرار در Software Delivery Shield Security مشاهده خواهید کرد.

آنچه یاد خواهید گرفت

  • بینش‌های امنیتی رجیستری مصنوعات
  • بینش‌های امنیتی Cloud Run
  • وضعیت امنیتی GKE

۲. تنظیمات و الزامات

راه‌اندازی پروژه ابری

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. می‌توانید آن را در هر زمانی به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاه‌های کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان PROJECT_ID شناخته می‌شود). اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، می‌توانید منابعی را که ایجاد کرده‌اید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

تنظیمات محیط

با کلیک روی آیکون سمت راست نوار جستجو، Cloud Shell را فعال کنید.

ecdc43ada29e91b.png

از Cloud Shell، API های مورد نیاز برای این آزمایشگاه را فعال کنید:

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

اگر از شما خواسته شد که مجوز دهید، برای ادامه روی «مجوز» کلیک کنید.

6356559df3eccdda.png

این باید یک پیام موفقیت‌آمیز مشابه این ایجاد کند:

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

دستور زیر را برای ایجاد خوشه GKE به صورت ناهمگام اجرا کنید. این دستور در ادامه‌ی آزمایشگاه مورد استفاده قرار خواهد گرفت:

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

۳. آماده‌سازی درخواست

ابتدا، یک برنامه ساده Node.js مبتنی بر اکسپرس آماده خواهید کرد که به درخواست‌های HTTP پاسخ می‌دهد.

در Cloud Shell یک دایرکتوری جدید به نام starter-nodejs ایجاد کنید، سپس به آن دایرکتوری بروید:

mkdir starter-nodejs
cd starter-nodejs

با اجرای دستورات زیر، یک فایل package.json ایجاد کنید:

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

فایل بالا شامل یک دستور اسکریپت شروع و یک وابستگی به چارچوب برنامه وب Express است.

سپس، در همان دایرکتوری، با اجرای دستورات زیر، یک فایل index.js ایجاد کنید:

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

این کد یک وب سرور پایه ایجاد می‌کند که به پورت تعریف شده توسط متغیر محیطی PORT گوش می‌دهد. اکنون برنامه شما تکمیل شده و آماده کانتینریزه شدن و استقرار است.

۴. اجرای برنامه ابری را مستقر کنید

برای استقرار برنامه خود، دستور زیر را اجرا کنید:

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

ایجاد مخزن رجیستری مصنوعات را تأیید کنید:

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

۵. بینش‌های امنیتی در مورد رجیستری مصنوعات و ساخت ابری

چند دقیقه طول می‌کشد تا ساخت کامل شود.

Cloud Build را باز کنید و مصنوعات ساخت آخرین نسخه را بررسی کنید.

رابط کاربری Cloud Build در کنسول Google Cloud شامل پنل بینش‌های امنیتی Software Delivery Shield است که اطلاعات امنیتی مربوط به ساخت مانند سطح SLSA، هرگونه آسیب‌پذیری در وابستگی‌ها و منشأ ساخت را نمایش می‌دهد.

7d9fd2213f3704c4.png

بررسی بینش‌های امنیتی برای تصویر کانتینر ایجاد شده. برای مشاهده جزئیات آسیب‌پذیری‌های این تصویر در رجیستری مصنوعات، پیوند مصنوعات اسکن شده را دنبال کنید.

به کنسول Cloud Shell برگردید و تأیید کنید که استقرار برنامه Cloud Run کامل شده است.

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. بینش‌های امنیتی Cloud Run

Cloud Run شامل یک پنل امنیتی (پیش‌نمایش) است که بینش‌های امنیتی زنجیره تأمین نرم‌افزار مانند اطلاعات انطباق سطح ساخت SLSA، منشأ ساخت و آسیب‌پذیری‌های موجود در سرویس‌های در حال اجرا را نمایش می‌دهد.

Cloud Run را باز کنید و Security Insights را در تب REVISIONS / SECURITY بررسی کنید.

62a9f5d26207e58e.png

این پنل اطلاعات زیر را نمایش می‌دهد:

  • هویت و رمزگذاری: آدرس ایمیل حساب کاربری پیش‌فرض سرویس Compute Engine و کلید رمزگذاری مورد استفاده برای استقرار.
  • سطح SLSA: این ساخت در سطح SLSA 3 قرار دارد که سطح بلوغ فرآیند ساخت نرم‌افزار را مطابق با مشخصات SLSA مشخص می‌کند.
  • آسیب‌پذیری‌ها: هرگونه آسیب‌پذیری که در وابستگی‌های برنامه یافت شود.
  • جزئیات ساخت: جزئیات ساخت مانند سازنده و پیوند مشاهده گزارش‌ها.
  • منشأ ساخت: منشأ ساخت، که مجموعه‌ای از فراداده‌های قابل تأیید در مورد یک ساخت است. این شامل جزئیاتی مانند خلاصه تصاویر ساخته شده، مکان‌های منبع ورودی، زنجیره ابزار ساخت، مراحل ساخت و مدت زمان ساخت می‌شود.

۷. وضعیت امنیتی GKE

GKE می‌تواند وضعیت امنیتی کانتینر شما را ارزیابی کرده و در مورد تنظیمات کلاستر، پیکربندی بار کاری و آسیب‌پذیری‌ها راهنمایی‌های فعال ارائه دهد. این شامل داشبورد وضعیت امنیتی (پیش‌نمایش) است که کلاسترها و بارهای کاری GKE شما را اسکن می‌کند تا توصیه‌های عملی و دقیقی را برای بهبود وضعیت امنیتی شما ارائه دهد.

در مراحل بعدی، برنامه را در خوشه GKE مستقر کرده و بینش‌های امنیتی را در داشبورد وضعیت امنیتی GKE بررسی خواهید کرد.

با اجرای دستور زیر، تأیید کنید که کلاستر آماده است:

gcloud beta container clusters list

خروجی نمونه:

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

دریافت اعتبارنامه‌ها و پیکربندی برای کلاستر GKE:

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

دستور زیر را برای استقرار برنامه با استفاده از ایمیجی که در مرحله قبل ساخته شده است، اجرا کنید:

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

بارهای کاری GKE در حالت ایده‌آل باید پیکربندی مقاومی داشته باشند که سطح حمله آنها را محدود کند. بررسی دستی بارهای کاری در سراسر خوشه‌ها برای یافتن مشکلات پیکربندی در مقیاس بزرگ می‌تواند دشوار باشد. می‌توانید از داشبورد وضعیت امنیتی برای اسکن خودکار پیکربندی تمام بارهای کاری در حال اجرا در چندین خوشه استفاده کنید و نتایج قابل اجرا، امتیازدهی شده و توصیه‌های نظری را برای بهبود وضعیت امنیتی خود ارائه دهید.

فعال کردن اسکن پیکربندی بار کاری:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

علاوه بر اسکن پیکربندی بار کاری، می‌توانید اسکن آسیب‌پذیری بار کاری را نیز فعال کنید و نتایج را در داشبورد وضعیت امنیتی بررسی کنید که مجموعه‌ای از ویژگی‌هایی است که اطلاعات و توصیه‌های نظری را برای بهبود امنیت خوشه‌ها و بارهای کاری GKE شما ارائه می‌دهد.

GKE به طور خودکار تصاویر کانتینر را در هر Pod واجد شرایط که در خوشه GKE شما اجرا می‌شود، برای یافتن آسیب‌پذیری‌های شناخته شده اسکن می‌کند و از داده‌های آسیب‌پذیری از پایگاه‌های داده CVE عمومی مانند NIST استفاده می‌کند.

اگر آسیب‌پذیری در تصاویر کانتینر شما یافت شود، GKE یک رتبه‌بندی شدت اختصاص می‌دهد و نتایج را در داشبورد وضعیت امنیتی در کنسول Google Cloud نمایش می‌دهد. GKE همچنین ورودی‌هایی را برای حسابرسی و ردیابی به Cloud Logging اضافه می‌کند.

اسکن آسیب‌پذیری بار کاری را فعال کنید:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

صفحه وضعیت امنیتی GKE را باز کنید.

چند دقیقه صبر کنید تا ممیزی حجم کار کامل شود و سپس نتایج را بررسی کنید.

5b1b8158bc55ce67.png

بررسی نگرانی‌های مربوط به پیکربندی و حجم کاری تحت تأثیر آن.

58e6f4b6d8eaa99a.png

چرا از داشبورد وضعیت امنیتی استفاده کنیم؟

داشبورد وضعیت امنیتی یک اقدام امنیتی اساسی است که می‌توانید برای هر کلاستر واجد شرایط GKE فعال کنید. گوگل کلود به دلایل زیر استفاده از داشبورد وضعیت امنیتی را در تمام کلاسترهای شما توصیه می‌کند:

  • حداقل اختلال: ویژگی‌ها در حجم کار در حال اجرا تداخل یا اختلالی ایجاد نمی‌کنند.
  • توصیه‌های عملی: در صورت وجود، داشبورد وضعیت امنیتی، موارد عملی را برای رفع نگرانی‌های کشف‌شده ارائه می‌دهد. این اقدامات شامل دستوراتی است که می‌توانید اجرا کنید، نمونه‌هایی از تغییرات پیکربندی که باید انجام دهید و توصیه‌هایی در مورد اقدامات لازم برای کاهش آسیب‌پذیری‌ها.
  • تجسم: داشبورد وضعیت امنیتی، تجسم سطح بالایی از نگرانی‌های مؤثر بر خوشه‌های مختلف پروژه شما را ارائه می‌دهد و شامل نمودارها و گراف‌هایی برای نشان دادن پیشرفت شما و تأثیر بالقوه هر نگرانی است.
  • نتایج مورد نظر: GKE بر اساس تخصص تیم‌های امنیتی گوگل و استانداردهای صنعتی، به نگرانی‌های کشف‌شده رتبه‌بندی شدت اختصاص می‌دهد.
  • گزارش‌های رویداد قابل حسابرسی: GKE تمام موارد کشف‌شده را برای گزارش‌پذیری و مشاهده‌پذیری بهتر به گزارش‌گیری اضافه می‌کند.

۸. تبریک می‌گویم!

تبریک می‌گویم! شما آزمایشگاه کد را تمام کردید.

آنچه ما پوشش داده‌ایم:

  • اطلاعات بینش‌های امنیتی برای مصنوعات ساخت و برنامه‌های در حال اجرا بر روی Cloud Run و GKE

تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب گوگل کلود خود برای منابع استفاده شده در این آموزش، یا پروژه‌ای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید.

حذف پروژه

ساده‌ترین راه برای حذف هزینه‌ها، حذف پروژه‌ای است که برای آموزش ایجاد کرده‌اید.

آخرین به‌روزرسانی: 21/3/23