কনটেইনার বিল্ড সুরক্ষিত করা

১. ভূমিকা

ead1609267034bf7.png

সফটওয়্যার দুর্বলতা হলো এমন ত্রুটি যা আকস্মিকভাবে সিস্টেম বিকল করে দিতে পারে অথবা দুষ্কৃতকারীদের আপনার সফটওয়্যারের নিরাপত্তা বিঘ্নিত করার সুযোগ করে দেয়। কন্টেইনার অ্যানালাইসিস কন্টেইনারের দুর্বলতা খুঁজে বের করার জন্য দুই ধরনের ওএস স্ক্যানিং প্রদান করে:

  • অন-ডিমান্ড স্ক্যানিং এপিআই আপনাকে আপনার কম্পিউটারে স্থানীয়ভাবে অথবা দূরবর্তীভাবে কন্টেইনার রেজিস্ট্রি বা আর্টিফ্যাক্ট রেজিস্ট্রি থেকে কন্টেইনার ইমেজগুলোকে ওএস দুর্বলতার জন্য ম্যানুয়ালি স্ক্যান করার সুযোগ দেয়।
  • কন্টেইনার স্ক্যানিং এপিআই আপনাকে ওএস-এর দুর্বলতা শনাক্তকরণ স্বয়ংক্রিয় করতে দেয়, যা প্রতিবার কন্টেইনার রেজিস্ট্রি বা আর্টিফ্যাক্ট রেজিস্ট্রি-তে একটি ইমেজ পুশ করার সময় স্ক্যান করে। এই এপিআই সক্রিয় করলে গো এবং জাভা ভাষার প্যাকেজগুলোর দুর্বলতা শনাক্ত করার জন্যও স্ক্যান চালু হয়।

অন-ডিমান্ড স্ক্যানিং এপিআই আপনাকে আপনার কম্পিউটারে স্থানীয়ভাবে, অথবা দূরবর্তীভাবে কন্টেইনার রেজিস্ট্রি বা আর্টিফ্যাক্ট রেজিস্ট্রি-তে সংরক্ষিত ইমেজ স্ক্যান করার সুযোগ দেয়। এটি আপনাকে দুর্বলতার জন্য স্ক্যান করতে চান এমন কন্টেইনারগুলোর উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে। কোনো রেজিস্ট্রি-তে ইমেজ সংরক্ষণ করার সিদ্ধান্ত নেওয়ার আগে, আপনি আপনার CI/CD পাইপলাইনে ইমেজ স্ক্যান করতে অন-ডিমান্ড স্ক্যানিং ব্যবহার করতে পারেন।

আপনি যা শিখবেন

এই ল্যাবে আপনি যা শিখবেন:

  • ক্লাউড বিল্ড দিয়ে ছবি তৈরি করুন
  • কন্টেইনারগুলির জন্য আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করুন
  • স্বয়ংক্রিয় দুর্বলতা স্ক্যানিং ব্যবহার করুন
  • অন-ডিমান্ড স্ক্যানিং কনফিগার করুন
  • ক্লাউড বিল্ডে CICD-তে ইমেজ স্ক্যানিং যোগ করুন

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর প্রয়োজন হয় না। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

পরিবেশ সেটআপ

ক্লাউড শেলে, আপনার প্রজেক্টের জন্য প্রজেক্ট আইডি এবং প্রজেক্ট নম্বর সেট করুন। এগুলোকে PROJECT_ID এবং PROJECT_ID ভেরিয়েবল হিসেবে সংরক্ষণ করুন।

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
    --format='value(projectNumber)')

পরিষেবাগুলি সক্ষম করুন

সকল প্রয়োজনীয় পরিষেবা সক্রিয় করুন:

gcloud services enable \
  cloudkms.googleapis.com \
  cloudbuild.googleapis.com \
  container.googleapis.com \
  containerregistry.googleapis.com \
  artifactregistry.googleapis.com \
  containerscanning.googleapis.com \
  ondemandscanning.googleapis.com \
  binaryauthorization.googleapis.com 

৩. ক্লাউড বিল্ড দিয়ে ইমেজ তৈরি করা

এই অংশে আপনি একটি স্বয়ংক্রিয় বিল্ড পাইপলাইন তৈরি করবেন যা আপনার কন্টেইনার ইমেজ বিল্ড করবে, সেটিকে স্ক্যান করবে এবং তারপর ফলাফল মূল্যায়ন করবে। যদি কোনো গুরুতর দুর্বলতা (CRITICAL vulnerabilities) না পাওয়া যায়, তবে এটি ইমেজটি রিপোজিটরিতে পুশ করবে। আর যদি গুরুতর দুর্বলতা পাওয়া যায়, তবে বিল্ডটি ব্যর্থ হবে এবং বন্ধ হয়ে যাবে।

ক্লাউড বিল্ড সার্ভিস অ্যাকাউন্টের জন্য অ্যাক্সেস প্রদান করুন

অন-ডিমান্ড স্ক্যানিং এপিআই অ্যাক্সেস করার জন্য ক্লাউড বিল্ডের অধিকার প্রয়োজন হবে। নিম্নলিখিত কমান্ডগুলো ব্যবহার করে অ্যাক্সেস প্রদান করুন।

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
        --role="roles/iam.serviceAccountUser"
        
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
        --role="roles/ondemandscanning.admin"

কাজের ডিরেক্টরি তৈরি করুন এবং পরিবর্তন করুন

mkdir vuln-scan && cd vuln-scan

একটি নমুনা চিত্র সংজ্ঞায়িত করুন

Dockerfile নামে একটি ফাইল তৈরি করুন এবং তাতে নিম্নলিখিত বিষয়বস্তু অন্তর্ভুক্ত করুন।

cat > ./Dockerfile << EOF
FROM gcr.io/google-appengine/debian9@sha256:ebffcf0df9aa33f342c4e1d4c8428b784fc571cdf6fbab0b31330347ca8af97a

# System
RUN apt update && apt install python3-pip -y

# App
WORKDIR /app
COPY . ./

RUN pip3 install Flask==1.1.4
RUN pip3 install gunicorn==20.1.0

CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

EOF

main.py নামে একটি ফাইল তৈরি করুন এবং তাতে নিম্নলিখিত বিষয়বস্তু যোগ করুন।

cat > ./main.py << EOF
import os
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    name = os.environ.get("NAME", "Worlds")
    return "Hello {}!".format(name)

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
EOF

ক্লাউড বিল্ড পাইপলাইন তৈরি করুন

নিম্নলিখিত কমান্ডটি আপনার ডিরেক্টরিতে একটি cloudbuild.yaml ফাইল তৈরি করবে যা স্বয়ংক্রিয় প্রক্রিয়ার জন্য ব্যবহৃত হবে। এই উদাহরণের জন্য, ধাপগুলি শুধুমাত্র কন্টেইনার বিল্ড প্রক্রিয়ার মধ্যে সীমাবদ্ধ। তবে বাস্তবে, কন্টেইনারের ধাপগুলির পাশাপাশি অ্যাপ্লিকেশন-নির্দিষ্ট নির্দেশাবলী এবং পরীক্ষাও অন্তর্ভুক্ত করতে হবে।

নিম্নলিখিত কমান্ড ব্যবহার করে ফাইলটি তৈরি করুন।

cat > ./cloudbuild.yaml << EOF
steps:

# build
- id: "build"
  name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
  waitFor: ['-']


EOF

CI পাইপলাইনটি চালান

প্রক্রিয়াকরণের জন্য বিল্ডটি জমা দিন।

gcloud builds submit

বিল্ডের বিবরণ পর্যালোচনা করুন

বিল্ড প্রক্রিয়া শুরু হয়ে গেলে ক্লাউড বিল্ড ড্যাশবোর্ডে এর অগ্রগতি পর্যালোচনা করুন।

  1. ক্লাউড কনসোলে ক্লাউড বিল্ড খুলুন
  2. বিষয়বস্তু দেখতে বিল্ডটিতে ক্লিক করুন।

৪. কন্টেইনারের জন্য আর্টিফ্যাক্ট রেজিস্ট্রি

আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করুন

এই ল্যাবে আপনি আপনার ইমেজগুলো সংরক্ষণ ও স্ক্যান করার জন্য আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করবেন। নিম্নলিখিত কমান্ডটি ব্যবহার করে রিপোজিটরিটি তৈরি করুন।

gcloud artifacts repositories create artifact-scanning-repo \
  --repository-format=docker \
  --location=us-central1 \
  --description="Docker repository"

আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাক্সেস করার সময় আপনার gcloud ক্রেডেনশিয়াল ব্যবহার করার জন্য ডকার কনফিগার করুন।

gcloud auth configure-docker us-central1-docker.pkg.dev

ক্লাউড বিল্ড পাইপলাইন আপডেট করুন

ফলাফলস্বরূপ ইমেজটি আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করার জন্য আপনার বিল্ড পাইপলাইনটি পরিবর্তন করুন।

cat > ./cloudbuild.yaml << EOF
steps:

# build
- id: "build"
  name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
  waitFor: ['-']

# push to artifact registry
- id: "push"
  name: 'gcr.io/cloud-builders/docker'
  args: ['push',  'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image']

images:
  - us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF

CI পাইপলাইনটি চালান

প্রক্রিয়াকরণের জন্য বিল্ডটি জমা দিন।

gcloud builds submit

৫. স্বয়ংক্রিয় দুর্বলতা স্ক্যানিং

আপনি যখনই আর্টিফ্যাক্ট রেজিস্ট্রি বা কন্টেইনার রেজিস্ট্রি-তে একটি নতুন ইমেজ পুশ করেন, তখনই আর্টিফ্যাক্ট স্ক্যানিং স্বয়ংক্রিয়ভাবে চালু হয়। নতুন দুর্বলতা আবিষ্কৃত হলে দুর্বলতার তথ্য ক্রমাগত আপডেট করা হয়। এই বিভাগে আপনি এইমাত্র তৈরি করে আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করা ইমেজটি পর্যালোচনা করবেন এবং দুর্বলতার ফলাফলগুলো খতিয়ে দেখবেন।

ছবির বিবরণ পর্যালোচনা করুন

পূর্ববর্তী বিল্ড প্রক্রিয়াটি সম্পন্ন হয়ে গেলে আর্টিফ্যাক্ট রেজিস্ট্রি ড্যাশবোর্ডে ইমেজ এবং ভালনারেবিলিটি ফলাফলগুলো পর্যালোচনা করুন।

  1. ক্লাউড কনসোলে আর্টিফ্যাক্ট রেজিস্ট্রি খুলুন
  2. বিষয়বস্তু দেখতে আর্টিফ্যাক্ট-স্ক্যানিং-রেপো-তে ক্লিক করুন।
  3. ছবির বিবরণে ক্লিক করুন
  4. আপনার ছবির সর্বশেষ সারসংক্ষেপে ক্লিক করুন
  5. স্ক্যান শেষ হয়ে গেলে ইমেজটির জন্য ভালনারেবিলিটি ট্যাবে ক্লিক করুন।

ভালনারেবিলিটি ট্যাব থেকে আপনি এইমাত্র তৈরি করা ইমেজটির স্বয়ংক্রিয় স্ক্যানিংয়ের ফলাফল দেখতে পাবেন।

361be7b3bf293fca.png

স্বয়ংক্রিয় স্ক্যানিং ডিফল্টরূপে সক্রিয় থাকে। আপনি কীভাবে স্বয়ংক্রিয় স্ক্যানিং চালু বা বন্ধ করতে পারেন তা দেখতে আর্টিফ্যাক্ট রেজিস্ট্রি সেটিংস দেখুন।

৬. চাহিদা অনুযায়ী স্ক্যানিং

বিভিন্ন পরিস্থিতিতে রিপোজিটরিতে ইমেজ পুশ করার আগে আপনার একটি স্ক্যান করার প্রয়োজন হতে পারে। উদাহরণস্বরূপ, একজন কন্টেইনার ডেভেলপার সোর্স কন্ট্রোলে কোড পুশ করার আগে একটি ইমেজ স্ক্যান করে তার সমস্যাগুলো সমাধান করতে পারেন। নিচের উদাহরণে, আপনি ফলাফলের উপর ভিত্তি করে কোনো পদক্ষেপ নেওয়ার আগে ইমেজটি স্থানীয়ভাবে বিল্ড এবং বিশ্লেষণ করবেন।

একটি ভাবমূর্তি তৈরি করুন

এই ধাপে আপনি আপনার লোকাল ক্যাশে ইমেজটি বিল্ড করার জন্য লোকাল ডকার ব্যবহার করবেন।

docker build -t us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image .

ছবিটি স্ক্যান করুন

ইমেজটি তৈরি হয়ে গেলে, ইমেজটি স্ক্যান করার জন্য অনুরোধ করুন। স্ক্যানের ফলাফল একটি মেটাডেটা সার্ভারে সংরক্ষিত হয়। মেটাডেটা সার্ভারে ফলাফলের অবস্থান জানানোর মাধ্যমে কাজটি সম্পন্ন হয়।

gcloud artifacts docker images scan \
    us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
    --format="value(response.scan)" > scan_id.txt

আউটপুট ফাইল পর্যালোচনা করুন

scan_id.txt ফাইলে সংরক্ষিত পূর্ববর্তী ধাপের আউটপুটটি পর্যালোচনা করতে একটু সময় নিন। মেটাডেটা সার্ভারে স্ক্যান ফলাফলের রিপোর্টের অবস্থানটি লক্ষ্য করুন।

cat scan_id.txt

বিস্তারিত স্ক্যান ফলাফল পর্যালোচনা করুন।

স্ক্যানের প্রকৃত ফলাফল দেখতে, আউটপুট ফাইলে উল্লিখিত রিপোর্ট লোকেশনে list-vulnerabilities কমান্ডটি ব্যবহার করুন।

gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt) 

আউটপুটটিতে ইমেজটিতে থাকা সমস্ত দুর্বলতা সম্পর্কে উল্লেখযোগ্য পরিমাণ ডেটা রয়েছে।

গুরুতর সমস্যা চিহ্নিত করুন

মানুষ খুব কমই রিপোর্টে সংরক্ষিত ডেটা সরাসরি ব্যবহার করে। সাধারণত ফলাফলগুলো একটি স্বয়ংক্রিয় প্রক্রিয়া দ্বারা ব্যবহৃত হয়। রিপোর্টের বিস্তারিত বিবরণ পড়তে এবং কোনো গুরুতর দুর্বলতা পাওয়া গেলে তা লগ করতে নিচের কমান্ডগুলো ব্যবহার করুন।

export SEVERITY=CRITICAL

gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt) --format="value(vulnerability.effectiveSeverity)" | if grep -Fxq ${SEVERITY}; then echo "Failed vulnerability check for ${SEVERITY} level"; else echo "No ${SEVERITY} Vulnerabilities found"; fi

এই কমান্ডের আউটপুট হবে

Failed vulnerability check for CRITICAL level

৭. ক্লাউড বিল্ড ব্যবহার করে সিআইসিডি-তে স্ক্যানিং

ক্লাউড বিল্ড সার্ভিস অ্যাকাউন্টের জন্য অ্যাক্সেস প্রদান করুন

অন-ডিমান্ড স্ক্যানিং এপিআই অ্যাক্সেস করার জন্য ক্লাউড বিল্ডের অধিকার প্রয়োজন হবে। নিম্নলিখিত কমান্ডগুলো ব্যবহার করে অ্যাক্সেস প্রদান করুন।

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
        --role="roles/iam.serviceAccountUser"
        
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
        --role="roles/ondemandscanning.admin"

ক্লাউড বিল্ড পাইপলাইন আপডেট করুন

নিম্নলিখিত কমান্ডটি আপনার ডিরেক্টরিতে একটি cloudbuild.yaml ফাইল তৈরি করবে যা স্বয়ংক্রিয় প্রক্রিয়ার জন্য ব্যবহৃত হবে। এই উদাহরণের জন্য, ধাপগুলি শুধুমাত্র কন্টেইনার বিল্ড প্রক্রিয়ার মধ্যে সীমাবদ্ধ। তবে বাস্তবে, কন্টেইনারের ধাপগুলির পাশাপাশি অ্যাপ্লিকেশন-নির্দিষ্ট নির্দেশাবলী এবং পরীক্ষাও অন্তর্ভুক্ত করতে হবে।

নিম্নলিখিত কমান্ড ব্যবহার করে ফাইলটি তৈরি করুন।

cat > ./cloudbuild.yaml << EOF
steps:

# build
- id: "build"
  name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
  waitFor: ['-']

#Run a vulnerability scan at _SECURITY level
- id: scan
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    (gcloud artifacts docker images scan \
    us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
    --location us \
    --format="value(response.scan)") > /workspace/scan_id.txt

#Analyze the result of the scan
- id: severity check
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
      gcloud artifacts docker images list-vulnerabilities \$(cat /workspace/scan_id.txt) \
      --format="value(vulnerability.effectiveSeverity)" | if grep -Fxq CRITICAL; \
      then echo "Failed vulnerability check for CRITICAL level" && exit 1; else echo "No CRITICAL vulnerability found, congrats !" && exit 0; fi

#Retag
- id: "retag"
  name: 'gcr.io/cloud-builders/docker'
  args: ['tag',  'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', 'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']


#pushing to artifact registry
- id: "push"
  name: 'gcr.io/cloud-builders/docker'
  args: ['push',  'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']

images:
  - us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF

CI পাইপলাইনটি চালান

CRITICAL তীব্রতার কোনো দুর্বলতা পাওয়া গেলে বিল্ডটি ভেঙে যায় কিনা, তা যাচাই করার জন্য প্রসেসিংয়ের জন্য বিল্ডটি জমা দিন।

gcloud builds submit

বিল্ড ব্যর্থতা পর্যালোচনা করুন

আপনি এইমাত্র যে বিল্ডটি জমা দিয়েছেন তা ব্যর্থ হবে, কারণ ইমেজটিতে গুরুতর দুর্বলতা রয়েছে।

ক্লাউড বিল্ড হিস্ট্রি পেজে বিল্ড ব্যর্থতা পর্যালোচনা করুন।

দুর্বলতাটি সমাধান করুন

এমন একটি বেস ইমেজ ব্যবহার করার জন্য Dockerfile-টি আপডেট করুন, যেটিতে কোনো গুরুতর দুর্বলতা নেই।

নিম্নলিখিত কমান্ড ব্যবহার করে ডকারফাইলটি ওভাররাইট করুন যাতে ডেবিয়ান ১০ ইমেজটি ব্যবহৃত হয়।

cat > ./Dockerfile << EOF
from python:3.8-slim  

# App
WORKDIR /app
COPY . ./

RUN pip3 install Flask==2.1.0
RUN pip3 install gunicorn==20.1.0

CMD exec gunicorn --bind :\$PORT --workers 1 --threads 8 main:app

EOF

সঠিক ইমেজ দিয়ে CI প্রসেসটি চালান।

প্রক্রিয়াকরণের জন্য বিল্ডটি জমা দিন, যাতে যাচাই করা যায় যে কোনো গুরুতর (CRITICAL) মাত্রার দুর্বলতা না পাওয়া গেলে বিল্ডটি সফল হবে।

gcloud builds submit

বিল্ডের সাফল্য পর্যালোচনা করুন

আপনি এইমাত্র যে বিল্ডটি জমা দিয়েছেন তা সফল হবে, কারণ আপডেট করা ইমেজটিতে কোনো গুরুতর দুর্বলতা নেই।

ক্লাউড বিল্ড হিস্ট্রি পেজে বিল্ডের সাফল্য পর্যালোচনা করুন।

স্ক্যানের ফলাফল পর্যালোচনা করুন

আর্টিফ্যাক্ট রেজিস্ট্রি-তে ভালো ছবিটি পর্যালোচনা করুন।

  1. ক্লাউড কনসোলে আর্টিফ্যাক্ট রেজিস্ট্রি খুলুন
  2. বিষয়বস্তু দেখতে আর্টিফ্যাক্ট-স্ক্যানিং-রেপো-তে ক্লিক করুন।
  3. ছবির বিবরণে ক্লিক করুন
  4. আপনার ছবির সর্বশেষ সারসংক্ষেপে ক্লিক করুন
  5. ইমেজটির জন্য দুর্বলতা ট্যাবে ক্লিক করুন

৮. অভিনন্দন!

অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!

আমরা যা আলোচনা করেছি:

  • ক্লাউড বিল্ড দিয়ে ছবি তৈরি করা
  • কন্টেইনারের জন্য আর্টিফ্যাক্ট রেজিস্ট্রি
  • স্বয়ংক্রিয় দুর্বলতা স্ক্যানিং
  • অন-ডিমান্ড স্ক্যানিং
  • ক্লাউড বিল্ডের সাথে CICD-তে স্ক্যানিং

এরপর কী:

পরিষ্কার করা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।

প্রকল্পটি মুছে ফেলা হচ্ছে

বিলিং বন্ধ করার সবচেয়ে সহজ উপায় হলো টিউটোরিয়ালের জন্য তৈরি করা প্রজেক্টটি ডিলিট করে দেওয়া।

সর্বশেষ হালনাগাদ: ২১/৩/২৩