নিরাপদ বিল্ড & ক্লাউড বিল্ড, আর্টিফ্যাক্ট রেজিস্ট্রি এবং GKE এর সাথে স্থাপন করুন

1. ভূমিকা

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

দুর্বলতা স্ক্যানিং স্বয়ংক্রিয়ভাবে বা চাহিদা অনুযায়ী ঘটতে পারে:

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

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

আপনি কি শিখবেন

  • কীভাবে স্বয়ংক্রিয় স্ক্যানিং সক্ষম করবেন
  • কিভাবে অন-ডিমান্ড স্ক্যানিং করতে হয়
  • কিভাবে একটি বিল্ড পাইপলাইনে স্ক্যানিং সংহত করবেন
  • অনুমোদিত চিত্রগুলি কীভাবে স্বাক্ষর করবেন
  • ছবি ব্লক করতে GKE ভর্তি নিয়ন্ত্রক কিভাবে ব্যবহার করবেন
  • শুধুমাত্র স্বাক্ষরিত অনুমোদিত চিত্রগুলিকে অনুমতি দেওয়ার জন্য GKE কনফিগার করবেন

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

ক্লাউডশেল এডিটর শুরু করুন

এই ল্যাবটি ডিজাইন করা হয়েছে এবং Google ক্লাউড শেল এডিটরের সাথে ব্যবহারের জন্য পরীক্ষা করা হয়েছে। সম্পাদক অ্যাক্সেস করতে,

  1. https://console.cloud.google.com- এ আপনার গুগল প্রকল্প অ্যাক্সেস করুন।
  2. উপরের ডানদিকের কোণায় ক্লাউড শেল এডিটর আইকনে ক্লিক করুন

8560cc8d45e8c112.png

  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 

আর্টিফ্যাক্ট রেজিস্ট্রি সংগ্রহস্থল তৈরি করুন

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

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

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

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

3. স্বয়ংক্রিয় স্ক্যানিং

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

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

mkdir vuln-scan && cd vuln-scan

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

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

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

ছবিটি তৈরি করুন এবং AR-তে পুশ করুন

তৈরি করতে ক্লাউড বিল্ড ব্যবহার করুন এবং স্বয়ংক্রিয়ভাবে আপনার কন্টেইনারটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করুন। ইমেজ bad ট্যাগ নোট. এটি আপনাকে পরবর্তী পদক্ষেপগুলির জন্য এটি সনাক্ত করতে সহায়তা করবে।

gcloud builds submit . -t us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:bad

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

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

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

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

361be7b3bf293fca.png

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

4. অন-ডিমান্ড স্ক্যানিং

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

একটি চিত্র তৈরি করুন

এই ধাপে আপনি আপনার স্থানীয় ক্যাশে ইমেজ তৈরি করতে স্থানীয় ডকার ব্যবহার করবেন।

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

5. পাইপলাইন স্ক্যানিং তৈরি করুন

এই বিভাগে আপনি একটি স্বয়ংক্রিয় বিল্ড পাইপলাইন তৈরি করবেন যা আপনার কন্টেইনার ইমেজ তৈরি করবে, এটি স্ক্যান করবে তারপর ফলাফলগুলি মূল্যায়ন করবে। যদি কোন ক্রিটিকাল দুর্বলতা পাওয়া না যায় তবে এটি চিত্রটিকে সংগ্রহস্থলে ঠেলে দেবে। যদি CRITICAL দুর্বলতা পাওয়া যায় তাহলে বিল্ড ব্যর্থ হবে এবং প্রস্থান করবে।

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

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

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 পাইপলাইন চালান

যখন একটি গুরুতর তীব্রতা দুর্বলতা পাওয়া যায় তখন বিল্ড ব্রেকগুলি যাচাই করতে প্রক্রিয়াকরণের জন্য বিল্ড জমা দিন।

gcloud builds submit

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

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

ক্লাউড বিল্ড ইতিহাস পৃষ্ঠায় বিল্ড ব্যর্থতা পর্যালোচনা করুন

দুর্বলতা ঠিক করুন

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

নিম্নলিখিত কমান্ড দিয়ে ডেবিয়ান 10 ইমেজ ব্যবহার করতে ডকারফাইলটি ওভাররাইট করুন

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 প্রক্রিয়া চালান

বিল্ডটি প্রসেসিংয়ের জন্য জমা দিন যে বিল্ডটি সফল হবে যখন কোনও গুরুতর তীব্রতা দুর্বলতা পাওয়া যায় না।

gcloud builds submit

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

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

ক্লাউড বিল্ড ইতিহাস পৃষ্ঠায় বিল্ড সাফল্য পর্যালোচনা করুন

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

আর্টিফ্যাক্ট রেজিস্ট্রি ভাল ইমেজ পর্যালোচনা

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

6. সাইনিং ইমেজ

একটি অ্যাটেস্টর নোট তৈরি করুন

একটি অ্যাটেস্টর নোট হ'ল একটি ছোট ডেটা যা প্রয়োগ করা স্বাক্ষরের প্রকারের জন্য একটি লেবেল হিসাবে কাজ করে। উদাহরণস্বরূপ একটি নোট দুর্বলতার স্ক্যান নির্দেশ করতে পারে, অন্যটি QA সাইন অফের জন্য ব্যবহার করা যেতে পারে। নোটটি স্বাক্ষর প্রক্রিয়ার সময় উল্লেখ করা হবে।

একটি নোট তৈরি করুন

cat > ./vulnz_note.json << EOM
{
  "attestation": {
    "hint": {
      "human_readable_name": "Container Vulnerabilities attestation authority"
    }
  }
}
EOM

নোট সংরক্ষণ করুন

NOTE_ID=vulnz_note

curl -vvv -X POST \
    -H "Content-Type: application/json"  \
    -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    --data-binary @./vulnz_note.json  \
    "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/?noteId=${NOTE_ID}"

নোট যাচাই করুন

curl -vvv  \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/${NOTE_ID}"

একজন অ্যাটেস্টর তৈরি করা

প্রত্যয়নকারীরা প্রকৃত চিত্র স্বাক্ষর প্রক্রিয়া সম্পাদন করতে ব্যবহৃত হয় এবং পরবর্তী যাচাইকরণের জন্য ইমেজের সাথে নোটের একটি ঘটনা সংযুক্ত করবে। পরে ব্যবহারের জন্য অ্যাটেস্টর তৈরি করুন।

অ্যাটেস্টর তৈরি করুন

ATTESTOR_ID=vulnz-attestor

gcloud container binauthz attestors create $ATTESTOR_ID \
    --attestation-authority-note=$NOTE_ID \
    --attestation-authority-note-project=${PROJECT_ID}

অ্যাটেস্টর যাচাই করুন

gcloud container binauthz attestors list

মনে রাখবেন শেষ লাইনটি NUM_PUBLIC_KEYS: 0 আপনি পরবর্তী ধাপে কী প্রদান করবেন

এছাড়াও মনে রাখবেন যে ক্লাউড বিল্ড স্বয়ংক্রিয়ভাবে আপনার প্রকল্পে built-by-cloud-build অ্যাটেস্টর তৈরি করে যখন আপনি একটি বিল্ড চালান যা ইমেজ তৈরি করে। সুতরাং উপরের কমান্ড দুটি প্রত্যয়ক প্রদান করে, vulnz-attestor এবং built-by-cloud-build । ছবিগুলি সফলভাবে নির্মিত হওয়ার পরে, ক্লাউড বিল্ড স্বয়ংক্রিয়ভাবে স্বাক্ষর করে এবং তাদের জন্য প্রত্যয়ন তৈরি করে৷

আইএএম ভূমিকা যোগ করা হচ্ছে

বাইনারি অনুমোদন পরিষেবা অ্যাকাউন্টের প্রত্যয়নমূলক নোটগুলি দেখার অধিকারের প্রয়োজন হবে। নিম্নলিখিত API কল দিয়ে অ্যাক্সেস প্রদান করুন

PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}"  --format="value(projectNumber)")

BINAUTHZ_SA_EMAIL="service-${PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"


cat > ./iam_request.json << EOM
{
  'resource': 'projects/${PROJECT_ID}/notes/${NOTE_ID}',
  'policy': {
    'bindings': [
      {
        'role': 'roles/containeranalysis.notes.occurrences.viewer',
        'members': [
          'serviceAccount:${BINAUTHZ_SA_EMAIL}'
        ]
      }
    ]
  }
}
EOM

আইএএম নীতি তৈরি করতে ফাইলটি ব্যবহার করুন

curl -X POST  \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-binary @./iam_request.json \
    "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/${NOTE_ID}:setIamPolicy"

একটি KMS কী যোগ করা হচ্ছে

নোটটি সংযুক্ত করতে এবং যাচাইযোগ্য স্বাক্ষর প্রদান করতে অ্যাটেস্টরের ক্রিপ্টোগ্রাফিক কীগুলির প্রয়োজন৷ এই ধাপে আপনি পরে অ্যাক্সেস করার জন্য ক্লাউড বিল্ডের জন্য KMS-এ কী তৈরি এবং সংরক্ষণ করবেন।

নতুন কী বর্ণনা করতে প্রথমে কিছু পরিবেশ ভেরিয়েবল যোগ করুন

KEY_LOCATION=global
KEYRING=binauthz-keys
KEY_NAME=codelab-key
KEY_VERSION=1

কীগুলির একটি সেট ধরে রাখতে একটি কীরিং তৈরি করুন

gcloud kms keyrings create "${KEYRING}" --location="${KEY_LOCATION}"

অ্যাটেস্টরের জন্য একটি নতুন অসমম্যাট্রিক সাইনিং কী জোড়া তৈরি করুন

gcloud kms keys create "${KEY_NAME}" \
    --keyring="${KEYRING}" --location="${KEY_LOCATION}" \
    --purpose asymmetric-signing   \
    --default-algorithm="ec-sign-p256-sha256"

আপনি Google ক্লাউড কনসোলের KMS পৃষ্ঠায় আপনার কী দেখতে পাবেন।

এখন, gcloud binauthz কমান্ডের মাধ্যমে আপনার অ্যাটেস্টরের সাথে কীটি সংযুক্ত করুন:

gcloud beta container binauthz attestors public-keys add  \
    --attestor="${ATTESTOR_ID}"  \
    --keyversion-project="${PROJECT_ID}"  \
    --keyversion-location="${KEY_LOCATION}" \
    --keyversion-keyring="${KEYRING}" \
    --keyversion-key="${KEY_NAME}" \
    --keyversion="${KEY_VERSION}"

আপনি যদি আবার কর্তৃপক্ষের তালিকা মুদ্রণ করেন, তাহলে আপনি এখন নিবন্ধিত একটি কী দেখতে পাবেন:

gcloud container binauthz attestors list

একটি স্বাক্ষরিত প্রত্যয়ন তৈরি করা

এই মুহুর্তে আপনার কাছে এমন বৈশিষ্ট্যগুলি কনফিগার করা আছে যা আপনাকে চিত্রগুলিতে স্বাক্ষর করতে সক্ষম করে। আপনি যে কন্টেইনার ইমেজটির সাথে কাজ করছেন সেটিতে সাইন ইন করতে আপনি পূর্বে তৈরি করা অ্যাটেস্টর ব্যবহার করুন

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

DIGEST=$(gcloud container images describe ${CONTAINER_PATH}:latest \
    --format='get(image_summary.digest)')

এখন, আপনি আপনার প্রত্যয়ন তৈরি করতে gcloud ব্যবহার করতে পারেন। আপনি স্বাক্ষর করার জন্য যে কীটি ব্যবহার করতে চান তার বিবরণ এবং আপনি যে নির্দিষ্ট কন্টেইনার ইমেজটি অনুমোদন করতে চান তা কমান্ডটি সহজভাবে নেয়।

gcloud beta container binauthz attestations sign-and-create  \
    --artifact-url="${CONTAINER_PATH}@${DIGEST}" \
    --attestor="${ATTESTOR_ID}" \
    --attestor-project="${PROJECT_ID}" \
    --keyversion-project="${PROJECT_ID}" \
    --keyversion-location="${KEY_LOCATION}" \
    --keyversion-keyring="${KEYRING}" \
    --keyversion-key="${KEY_NAME}" \
    --keyversion="${KEY_VERSION}"

ধারক বিশ্লেষণের শর্তাবলীতে, এটি একটি নতুন ঘটনা তৈরি করবে এবং এটি আপনার প্রমাণকারীর নোটে সংযুক্ত করবে। সবকিছু আশানুরূপ কাজ করেছে তা নিশ্চিত করতে, আপনি আপনার প্রত্যয়ন তালিকাভুক্ত করতে পারেন

gcloud container binauthz attestations list \
   --attestor=$ATTESTOR_ID --attestor-project=${PROJECT_ID}

7. ক্লাউড বিল্ড দিয়ে স্বাক্ষর করা

আপনি ইমেজ সাইনিং সক্ষম করেছেন এবং আপনার নমুনা ইমেজ সাইন করার জন্য ম্যানুয়ালি অ্যাটেস্টর ব্যবহার করেছেন। বাস্তবে আপনি সিআই/সিডি পাইপলাইনের মতো স্বয়ংক্রিয় প্রক্রিয়ার সময় প্রত্যয়ন প্রয়োগ করতে চাইবেন।

এই বিভাগে আপনি ক্লাউড বিল্ড কনফিগার করবেন যাতে স্বয়ংক্রিয়ভাবে ছবিগুলিকে সত্যায়িত করা যায়

ভূমিকা

ক্লাউড বিল্ড পরিষেবা অ্যাকাউন্টে বাইনারি অনুমোদন অ্যাটেস্টর দর্শকের ভূমিকা যুক্ত করুন:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
  --role roles/binaryauthorization.attestorsViewer

ক্লাউড বিল্ড সার্ভিস অ্যাকাউন্টে ক্লাউড কেএমএস ক্রিপ্টোকি স্বাক্ষরকারী/যাচাইকারী ভূমিকা যুক্ত করুন (কেএমএস-ভিত্তিক স্বাক্ষর):

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
  --role roles/cloudkms.signerVerifier

ক্লাউড বিল্ড পরিষেবা অ্যাকাউন্টে কন্টেইনার বিশ্লেষণ নোট অ্যাটাচারের ভূমিকা যুক্ত করুন:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
  --role roles/containeranalysis.notes.attacher

কাস্টম বিল্ড ক্লাউড বিল্ড ধাপ প্রস্তুত করুন

আপনি ক্লাউড বিল্ডে একটি কাস্টম বিল্ড ধাপ ব্যবহার করবেন যাতে প্রত্যয়ন প্রক্রিয়া সহজ হয়। Google এই কাস্টম বিল্ড ধাপ প্রদান করে যাতে প্রক্রিয়াটিকে স্ট্রিমলাইন করার জন্য সহায়ক ফাংশন রয়েছে। ব্যবহারের আগে, কাস্টম বিল্ড ধাপের কোডটি একটি পাত্রে তৈরি করতে হবে এবং ক্লাউড বিল্ডে পুশ করতে হবে। এটি করার জন্য, নিম্নলিখিত কমান্ডগুলি চালান:

git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
cd cloud-builders-community/binauthz-attestation
gcloud builds submit . --config cloudbuild.yaml
cd ../..
rm -rf cloud-builders-community

আপনার cloudbuild.yaml-এ একটি স্বাক্ষর করার ধাপ যোগ করুন

এই ধাপে আপনি আপনার ক্লাউড বিল্ড পাইপলাইনে প্রমাণীকরণের ধাপটি যোগ করবেন যা আপনি আগে তৈরি করেছেন।

  1. আপনি যে নতুন পদক্ষেপ যোগ করবেন তা পর্যালোচনা করুন।

শুধুমাত্র পর্যালোচনা. কপি করবেন না

#Sign the image only if the previous severity check passes
- id: 'create-attestation'
  name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
  args:
    - '--artifact-url'
    - 'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image'
    - '--attestor'
    - 'projects/${PROJECT_ID}/attestors/$ATTESTOR_ID'
    - '--keyversion'
    - 'projects/${PROJECT_ID}/locations/$KEY_LOCATION/keyRings/$KEYRING/cryptoKeys/$KEY_NAME/cryptoKeyVersions/$KEY_VERSION'
  1. আপডেট করা সম্পূর্ণ পাইপলাইন দিয়ে আপনার 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']


#Sign the image only if the previous severity check passes
- id: 'create-attestation'
  name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
  args:
    - '--artifact-url'
    - 'us-central1-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good'
    - '--attestor'
    - 'projects/${PROJECT_ID}/attestors/$ATTESTOR_ID'
    - '--keyversion'
    - 'projects/${PROJECT_ID}/locations/$KEY_LOCATION/keyRings/$KEYRING/cryptoKeys/$KEY_NAME/cryptoKeyVersions/$KEY_VERSION'



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

বিল্ড চালান

gcloud builds submit

ক্লাউড বিল্ড ইতিহাসে বিল্ড পর্যালোচনা করুন

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

8. ভর্তি নিয়ন্ত্রণ নীতি

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

এই ক্ষমতা বোঝার জন্য আপনি একটি কঠোর অনুমোদনের নিয়ম প্রয়োগ করতে ডিফল্ট GKE নীতি পরিবর্তন করবেন।

GKE ক্লাস্টার তৈরি করুন

GKE ক্লাস্টার তৈরি করুন:

gcloud beta container clusters create binauthz \
    --zone us-central1-a  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE

ক্লাউড বিল্ডকে এই ক্লাস্টারে স্থাপন করার অনুমতি দিন:

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

সমস্ত নীতির অনুমতি দিন

প্রথমে ডিফল্ট নীতির অবস্থা এবং যেকোনো ছবি স্থাপন করার আপনার ক্ষমতা যাচাই করুন

  1. বিদ্যমান নীতি পর্যালোচনা করুন
gcloud container binauthz policy export
  1. লক্ষ্য করুন যে এনফোর্সমেন্ট নীতি ALWAYS_ALLOW এ সেট করা আছে

evaluationMode: ALWAYS_ALLOW

  1. আপনি যে কোনও কিছু স্থাপন করতে পারেন তা যাচাই করতে নমুনা স্থাপন করুন
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
  1. ডিপ্লোয় কাজ করেছে যাচাই করুন
kubectl get pods

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন

161db370d99ffb13.png

  1. স্থাপনা মুছুন
kubectl delete pod hello-server

সমস্ত নীতি অস্বীকার করুন

এখন সমস্ত ছবি অননুমোদিত করার জন্য নীতি আপডেট করুন।

  1. একটি সম্পাদনাযোগ্য ফাইলে বর্তমান নীতি রপ্তানি করুন
gcloud container binauthz policy export  > policy.yaml
  1. নীতি পরিবর্তন করুন

একটি পাঠ্য সম্পাদকে, মূল্যায়ন মোড ALWAYS_ALLOW থেকে ALWAYS_DENY তে পরিবর্তন করুন।

edit policy.yaml

নীতি YAML ফাইলটি নিম্নরূপ উপস্থিত হওয়া উচিত:

globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: ALWAYS_DENY
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy
  1. টার্মিনাল খুলুন এবং নতুন নীতি প্রয়োগ করুন এবং পরিবর্তনটি প্রচারের জন্য কয়েক সেকেন্ড অপেক্ষা করুন
gcloud container binauthz policy import policy.yaml
  1. নমুনা কাজের চাপ স্থাপনার চেষ্টা করুন
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
  1. নিম্নলিখিত বার্তার সাথে স্থাপনা ব্যর্থ হয়৷
Error from server (VIOLATES_POLICY): admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image gcr.io/google-samples/hello-app:1.0 denied by Binary Authorization default admission rule. Denied by always_deny admission rule

সমস্ত অনুমতি দিতে নীতি প্রত্যাবর্তন করুন

পরবর্তী বিভাগে যাওয়ার আগে নীতির পরিবর্তনগুলি প্রত্যাবর্তন করতে ভুলবেন না

  1. নীতি পরিবর্তন করুন

একটি পাঠ্য সম্পাদকে, মূল্যায়ন মোডকে ALWAYS_DENY থেকে ALWAYS_ALLOW এ পরিবর্তন করুন।

edit policy.yaml

নীতি YAML ফাইলটি নিম্নরূপ উপস্থিত হওয়া উচিত:

globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: ALWAYS_ALLOW
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy
  1. প্রত্যাবর্তিত নীতি প্রয়োগ করুন
gcloud container binauthz policy import policy.yaml

9. GKE-তে দুর্বলতা ব্লক করুন

এই বিভাগে আপনি ক্লাউড বিল্ডের সাথে একটি CI/CD পাইপলাইন প্রয়োগ করে এখন পর্যন্ত যা শিখেছেন তা একত্রিত করবেন যা চিত্রগুলি স্ক্যান করে, তারপরে চিত্রটিতে স্বাক্ষর করার আগে এবং স্থাপন করার চেষ্টা করার আগে দুর্বলতাগুলি পরীক্ষা করে৷ ছবি চালানোর অনুমতি দেওয়ার আগে ভালনারেবিলিটি স্ক্যানিং থেকে একটি স্বাক্ষর আছে তা যাচাই করতে GKE বাইনারি অনুমোদন ব্যবহার করবে।

d5c41bb89e22fd61.png

সত্যায়নের প্রয়োজনে GKE নীতি আপডেট করুন

আপনার GKE BinAuth নীতিতে ক্লাস্টারঅ্যাডমিশন রুলস যোগ করে আপনার অ্যাটেস্টর দ্বারা ছবিগুলি স্বাক্ষর করা প্রয়োজন

নীচের কমান্ডটি ব্যবহার করে আপডেট করা কনফিগারেশনের সাথে নীতিটি ওভাররাইট করুন।

COMPUTE_ZONE=us-central1-a

cat > binauth_policy.yaml << EOM
defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
clusterAdmissionRules:
  ${COMPUTE_ZONE}.binauthz:
    evaluationMode: REQUIRE_ATTESTATION
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    requireAttestationsBy:
    - projects/${PROJECT_ID}/attestors/vulnz-attestor
EOM

নীতি প্রয়োগ করুন

gcloud beta container binauthz policy import binauth_policy.yaml

স্বাক্ষরবিহীন ছবি স্থাপন করার চেষ্টা করুন

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

জিকেই ভর্তি নিয়ন্ত্রকদের স্বাক্ষরটি ধারাবাহিকভাবে যাচাই করার জন্য স্থাপন করা সঠিক চিত্রটি জানতে হবে। এটি সম্পন্ন করার জন্য আপনাকে বরং ইমেজ ডাইজেস্ট এবং একটি সাধারণ ট্যাগ ব্যবহার করতে হবে।

খারাপ ছবির জন্য ইমেজ ডাইজেস্ট পান

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


DIGEST=$(gcloud container images describe ${CONTAINER_PATH}:bad \
    --format='get(image_summary.digest)')

Kubernetes কনফিগারেশনে ডাইজেস্ট ব্যবহার করুন

cat > deploy.yaml << EOM
apiVersion: v1
kind: Service
metadata:
  name: deb-httpd
spec:
  selector:
    app: deb-httpd
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deb-httpd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deb-httpd
  template:
    metadata:
      labels:
        app: deb-httpd
    spec:
      containers:
      - name: deb-httpd
        image: ${CONTAINER_PATH}@${DIGEST}
        ports:
        - containerPort: 8080
        env:
          - name: PORT
            value: "8080"

EOM

অ্যাপটি GKE-তে স্থাপন করার চেষ্টা করুন

kubectl apply -f deploy.yaml

কনসোলে কাজের চাপ পর্যালোচনা করুন এবং ডিপ্লয়মেন্ট অস্বীকার করা হয়েছে উল্লেখ করে ত্রুটিটি নোট করুন:

No attestations found that were valid and signed by a key trusted by the attestor

একটি স্বাক্ষরিত ছবি স্থাপন করুন

খারাপ ছবির জন্য ইমেজ ডাইজেস্ট পান

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


DIGEST=$(gcloud container images describe ${CONTAINER_PATH}:good \
    --format='get(image_summary.digest)')

Kubernetes কনফিগারেশনে ডাইজেস্ট ব্যবহার করুন

cat > deploy.yaml << EOM
apiVersion: v1
kind: Service
metadata:
  name: deb-httpd
spec:
  selector:
    app: deb-httpd
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deb-httpd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deb-httpd
  template:
    metadata:
      labels:
        app: deb-httpd
    spec:
      containers:
      - name: deb-httpd
        image: ${CONTAINER_PATH}@${DIGEST}
        ports:
        - containerPort: 8080
        env:
          - name: PORT
            value: "8080"

EOM

অ্যাপটি GKE-তে স্থাপন করুন

kubectl apply -f deploy.yaml

কনসোলে কাজের চাপ পর্যালোচনা করুন এবং চিত্রটির সফল স্থাপনার নোট করুন।

10. অভিনন্দন!

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

আমরা যা কভার করেছি:

  • কীভাবে স্বয়ংক্রিয় স্ক্যানিং সক্ষম করবেন
  • কিভাবে অন-ডিমান্ড স্ক্যানিং করতে হয়
  • কিভাবে একটি বিল্ড পাইপলাইনে স্ক্যানিং সংহত করবেন
  • অনুমোদিত চিত্রগুলি কীভাবে স্বাক্ষর করবেন
  • ছবি ব্লক করতে GKE ভর্তি নিয়ন্ত্রক কিভাবে ব্যবহার করবেন
  • শুধুমাত্র স্বাক্ষরিত অনুমোদিত চিত্রগুলিকে অনুমতি দেওয়ার জন্য GKE কনফিগার করবেন

এরপর কি:

পরিষ্কার করুন

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

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

বিলিং দূর করার সবচেয়ে সহজ উপায় হল আপনি টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।