CodeMender-এর মাধ্যমে আপনার CI/CD পাইপলাইন সুরক্ষিত করুন

১. শুরু করার আগে

CodeMender-এর মাধ্যমে আপনার CI/CD পাইপলাইন সুরক্ষিত করা-এর জন্য হ্যান্ডস-অন কোডল্যাবে স্বাগত।

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

CodeMender (CLI এক্সিকিউটেবল: cm) আপনার CI/CD পাইপলাইন উন্নত করে—বর্তমান SAST টুলের পাশাপাশি কাজ করে—Google-এর Gemini-পরিচালিত নিরাপত্তা সংক্রান্ত যুক্তি প্রদানকারী এজেন্টকে ডেপ্লয় করার মাধ্যমে:

জটিল ব্যবসায়িক লজিকের ত্রুটি খুঁজে বের করা: অনমনীয় স্ট্যাটিক প্যাটার্ন নিয়মের বাইরে অ্যাপ্লিকেশন প্রসঙ্গ এবং আর্কিটেকচারাল ডেটা ফ্লো সম্পর্কে যুক্তি দিন।

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

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

এই কোডল্যাবে, আপনি GitHub অ্যাকশন এবং কী-লেস Google Cloud Workload Identity Federation (WIF) ব্যবহার করে OWASP Juice Shop রিপোজিটরিতে CodeMender ইন্টিগ্রেট করবেন।

পূর্বশর্ত

  • সাজেস্ট করা: CodeMender-এর ধারণা সম্পর্কে প্রাথমিক জ্ঞান (CodeMender-এর মাধ্যমে আপনার অ্যাপ্লিকেশন সুরক্ষিত করুন-এ কভার করা হয়েছে)
  • GitHub অ্যাকশন ওয়ার্কফ্লো, ট্রিগার ও YAML সিনট্যাক্স সম্পর্কে প্রাথমিক ধারণা
  • Git কমান্ড এবং পুল রিকোয়েস্ট রিভিউ ওয়ার্কফ্লো সম্পর্কে প্রাথমিক ধারণা
  • Google Cloud IAM কনসেপ্ট (পরিষেবা অ্যাকাউন্ট, ভূমিকা ও API) সম্পর্কে প্রাথমিক জ্ঞান
  • সাধারণ ওয়েব অ্যাপ্লিকেশন সংক্রান্ত দুর্বলতা (যেমন SQL ইনজেকশন এবং XSS) সম্পর্কে পরিচিতি

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

  • Workload Identity Federation (WIF)-এর মাধ্যমে GitHub অ্যাকশন ও Google Cloud-এর মধ্যে কীভাবে জিরো-ট্রাস্ট কীলেস যাচাইকরণ কনফিগার করবেন
  • CodeMender এবং gemini-3.8-flash ব্যবহার করে কীভাবে একটি অটোমেটেড ভালনারেবিলিটি স্ক্যানিং ওয়ার্কফ্লো তৈরি করবেন
  • OASIS SARIF v2.1.0 এবং নেটিভ GitHub অ্যাকশন জব সামারি ব্যবহার করে কীভাবে অ্যাকশনযোগ্য নিরাপত্তা রিপোর্ট প্রকাশ করবেন
  • কীভাবে একটি অটোনমাস রেমিডিয়েশন ওয়ার্কফ্লো তৈরি করা যায় যা টেস্ট-ভেরিফায়েড কোড প্যাচ তৈরি করে এবং হিউম্যান রিভিউয়ের জন্য পুল রিকোয়েস্ট খোলে
  • কীভাবে অটোমেটেড কোয়ালিটি হার্ড গেট (--fail-on) এবং হাই-স্পিড কন্টিনিউয়াস সিকিউরিটির জন্য পাইপলাইন ক্যাশিং এনফোর্স করতে হয়

আপনার যা প্রয়োজন হবে

  • বিলিং চালু করা এবং প্রোজেক্টের মালিক/এডিটরের অনুমতি সহ একটি Google Cloud প্রোজেক্ট
  • একটি GitHub অ্যাকাউন্ট যার রিপোজিটরি তৈরি, সিক্রেট কনফিগার ও অ্যাকশন ম্যানেজ করার অনুমতি আছে (আপনি GitHub CLI ব্যবহার করে ৩ নম্বর ধাপে OWASP Juice Shop GitHub Repo ফর্ক করেন)।

২. CodeMender CI/CD আর্কিটেকচার সম্পর্কে বোঝা

আধুনিক এন্টারপ্রাইজ DevSecOps-এ, AI-পরিচালিত নিরাপত্তা শুধুমাত্র একটি ম্যানুয়াল ডেস্কটপ টুল হতে পারে না। এটি অবশ্যই একটি অটোমেটেড গেটকিপার (অসুরক্ষিত পুল অনুরোধ ব্লক করা) এবং একটি অটোনোমাস কো-ডেভেলপার (সরাসরি Git-এ যাচাইকৃত প্যাচ প্রস্তাব করা) হিসেবে কাজ করবে।

এটি করার জন্য, আপনি Google Cloud Workload Identity Federation (WIF) এবং Gemini Enterprise রিজনিং মডেল দ্বারা পরিচালিত একটি ডুয়াল-ওয়ার্কফ্লো আর্কিটেকচার প্রয়োগ করবেন।

ডুয়াল-ওয়ার্কফ্লো আর্কিটেকচার

CodeMender অটোনোমাস CI/CD পাইপলাইন আর্কিটেকচার

একটি একক মনোলিথিক স্ক্রিপ্টে শনাক্তকরণ এবং প্রতিকার ক্র্যাম করার পরিবর্তে, পাইপলাইন নিরাপত্তা দুটি ডিকপলড, উদ্দেশ্য-নির্মিত ওয়ার্কফ্লোতে আলাদা করে:

ওয়ার্কফ্লো

প্রাথমিক ট্রিগার

মূল দায়িত্ব

কোয়ালিটি হার্ড গেট

১. ভালনারেবিলিটি স্ক্যানার(codemender-scan.yml)

পুল রিকোয়েস্ট, মেন পুশ, সাপ্তাহিক ক্রন, ম্যানুয়াল ডিসপ্যাচ

• PR-এ দ্রুত ডিফারেনশিয়াল AST স্ক্যান (~১৫ সেকেন্ড), পুশে দ্রুত বেসলাইন স্ক্যান (–quick) এবং শিডিউলে কনকারেন্ট ডিপ অডিট রান করে• cm health –strict-এর মাধ্যমে আগাম প্রস্তুতি যাচাই করে• নেটিভ অ্যাকশন জব সামারি তৈরি করে এবং GitHub নিরাপত্তা ট্যাবে OASIS SARIF আপলোড করে

PR মার্জ ব্লক করে যদি নতুন করে চালু করা হাই বা ক্রিটিক্যাল দুর্বলতা শনাক্ত করা হয় (–fail-on)

২. Autonomous Remediator(codemender-remediate.yml)

ম্যানুয়াল ট্রিগার (workflow_dispatch), নাইটলি ক্রন

• স্ক্যান আর্টিফ্যাক্ট (cm report import) এবং state.db থেকে স্টেট রিজুম করে• Gemini রিজনিং ব্যবহার করে প্যাচ সিন্থেসাইজ করে• ক্লিন ওয়ার্কস্পেস বাউন্ডারি বজায় রাখে এবং রিভিউয়ের জন্য প্রস্তুত পুল রিকোয়েস্ট জমা দেয়

PR খোলার আগে ক্লিন প্রোডাকশন ডিফস নিশ্চিত করে

এন্টারপ্রাইজ ডিজাইনের তিনটি মূল নীতি

পরবর্তী বিভাগে এইসব ওয়ার্কফ্লো তৈরি করার সময়, এই তিনটি মৌলিক আর্কিটেকচারাল স্তম্ভের কথা মাথায় রাখবেন:

🔑 জিরো-ট্রাস্ট কী-লেস যাচাইকরণ ও প্রিফ্লাইট যাচাইকরণ:

GitHub Secrets-এ কোনও দীর্ঘস্থায়ী Google Cloud পরিষেবা অ্যাকাউন্ট JSON কী স্টোর করা নেই। রানার একটি স্বল্পস্থায়ী OIDC টোকেন তৈরি করে যা Google Cloud STS-এর মাধ্যমে ১ ঘণ্টার জন্য একটি ক্ষণস্থায়ী ক্রেডেনশিয়ালের জন্য বিনিময় করা হয়, Git চেকআউটে persist-credentials: false সেট করে এবং মডেল কোটা ব্যবহার করার আগে ক্রেডেনশিয়াল, নেটওয়ার্ক অ্যাক্সেসযোগ্যতা এবং IAM অনুমতি যাচাই করতে cm health --strict রান করে।

⚡ অ্যাডাপ্টিভ স্ক্যান রাউটিং ও লিগ্যাসি নয়েজ সাপ্রেশন:

প্রতিটি পুল অনুরোধে ধীরগতির সম্পূর্ণ-রিপোজিটরি অডিট চালানোর পরিবর্তে, CodeMender প্রতিটি CI ইভেন্টকে সর্বোত্তম স্ক্যান মোডে রুট করে: পুল অনুরোধগুলি ১৫ সেকেন্ডের কম সময়ে পরিবর্তিত ফাইল এবং ১-হপ কলারে ডিফারেনশিয়াল AST বিশ্লেষণ (--diff="origin/$BASE_REF") ট্রিগার করে; প্রধান-শাখা পুশগুলি একক-সেশন দ্রুত বেসলাইন স্ক্যান (--quick) চালায়; এবং সাপ্তাহিক শিডিউলগুলি সমবর্তী ফাইল-বাই-ফাইল গভীর অডিট (ডিফল্ট cm find .) চালায়। PR দ্বারা স্পর্শ না করা পূর্ব-বিদ্যমান কোডবেস দুর্বলতাগুলি [LEGACY / UNTOUCHED] হিসাবে লেবেল করা হয়; সেগুলি দৃশ্যমানতার জন্য SARIF রিপোর্টে উপস্থিত হয়, কিন্তু PR মার্জ গেট ব্লক করে না এবং অটোফিক্স ট্রিগার করে না।

🛡️ রেজিলিয়েন্ট নন-ব্লকিং সিকিউরিটি অবজার্ভেবিলিটি:

এমনকি যখন --fail-on কোড 1-এর সাথে প্রস্থান করে একটি অসুরক্ষিত PR ব্লক করতে, রিপোর্টের এক্সপোর্ট এবং SARIF আপলোড ধাপগুলিকে steps.scan.outputs.completed == 'true' এবং hashFiles('results.sarif') != '' দিয়ে রক্ষা করা নিশ্চিত করে যে OASIS SARIF সতর্কতা এবং কাজের সারাংশ এখনও প্রকাশিত হয়—যদিও এক্সপোর্ট এবং আপলোড পরিষ্কারভাবে এড়িয়ে যায় যদি একটি রান বাতিল হয় বা সেটআপ বা ক্ষমতার ত্রুটির কারণে বন্ধ হয়ে যায় (10–60)।

৩. Cloud Shell-এ টার্গেট রিপোজিটরি যাচাই ও প্রস্তুত করুন

'কী' ছাড়া যাচাইকরণ সেট-আপ করতে এবং অটোমেটিক নিরাপত্তা পাইপলাইন চালাতে, আপনার মালিকানাধীন একটি অ্যাক্সেসযোগ্য টার্গেট GitHub রিপোজিটরি প্রয়োজন। এই কোডল্যাবে, আপনি OWASP Juice Shop—ইচ্ছাকৃতভাবে দুর্বল Node.js ওয়েব অ্যাপ্লিকেশন—টার্নকি নিরাপত্তা প্লেগ্রাউন্ড হিসেবে ব্যবহার করেন।

আপনি GitHub CLI (gh) ব্যবহার করবেন, যা Google Cloud Shell-এ আগে থেকে ইনস্টল করা থাকে, যাতে GitHub-এর মাধ্যমে যাচাই করা যায়, আপনার ব্যবহারকারীর বিবরণ অটোমেটিক ক্যাপচার করা যায় এবং একটি স্ট্রীমলাইনড ফ্লোতে আপনার রিপোজিটরি প্রস্তুত করা যায়।

ধাপ ১: Cloud Shell খুলুন এবং GitHub CLI যাচাই করুন

Google Cloud Console খুলুন এবং Cloud Shell (উপরের নেভিগেশন বারে >_ আইকন) অ্যাক্টিভেট করুন।

Git ক্রেডেনশিয়াল ম্যানেজমেন্ট কনফিগার করতে GitHub CLI (gh) যাচাই করুন:

gh auth login --hostname github.com --git-protocol https --web

স্ক্রিনে দেখানো নির্দেশাবলী অনুসরণ করুন:

Cloud Shell-এ প্রিন্ট করা ৮-অক্ষরের একবার ব্যবহারযোগ্য কোডটি কপি করুন (যেমন, 1234-ABCD)।

আপনার ব্রাউজারে https://github.com/login/device খুলতে Enter প্রেস করুন।

কোড পেস্ট করে github-কে অনুমতি দিন বিকল্পে ক্লিক করুন।

ধাপ ২: ডাইনামিক উপায়ে ভেরিয়েবল এক্সপোর্ট করা এবং OWASP Juice Shop ফর্ক করা

আপনার GitHub ইউজারনেম অটোমেটিক ক্যাপচার করতে এবং রিপোজিটরি প্রস্তুত করতে Cloud Shell-এ নিম্নলিখিত কমান্ডগুলি রান করুন:

# 1. Automatically capture your GitHub username (customize GITHUB_REPO if desired)
export GITHUB_ORG=$(gh api user -q .login)
export GITHUB_REPO="${GITHUB_REPO:-juice-shop}"
export GITHUB_REPOSITORY="${GITHUB_ORG:+${GITHUB_ORG}/${GITHUB_REPO}}"
echo "Authenticated as: ${GITHUB_REPOSITORY}"

# 2. Fork on GitHub server using GITHUB_REPO as the fork name
gh repo fork juice-shop/juice-shop --fork-name "${GITHUB_REPO}" --default-branch-only --clone=false 2>/dev/null || true

# 3. Shallow clone your fork (downloads only ~15 MB in 3-5 seconds, skipping heavy upstream git history)
[ -d ~/"${GITHUB_REPO}" ] || git clone --depth=1 "https://github.com/${GITHUB_REPOSITORY}.git" ~/"${GITHUB_REPO}" || \
 (sleep 2 && git clone --depth=1 "https://github.com/${GITHUB_REPOSITORY}.git" ~/"${GITHUB_REPO}")
cd ~/"${GITHUB_REPO}"

# 4. Confirm you are in the repository directory
git status

৪. gcloud-এর মাধ্যমে Google Cloud Workload Identity Federation কনফিগার করুন

এই ধাপে, আপনি Google Cloud Shell-এ gcloud CLI ব্যবহার করে প্রয়োজনীয় API চালু করবেন, একটি ডেডিকেটেড CI/CD পরিষেবা অ্যাকাউন্ট তৈরি করবেন, ওয়ার্কলোড আইডেন্টিটি পুল সেট-আপ করবেন এবং আপনার GitHub রিপোজিটরির (${GITHUB_REPOSITORY}) সাথে OIDC ট্রাস্ট স্থাপন করবেন।

ধাপ ১: Google Cloud এনভায়রনমেন্ট ভেরিয়েবল সেট করা

আপনার Cloud Shell টার্মিনালে (আপনার ক্লোন করা রিপোজিটরি ওয়ার্কস্পেসের মধ্যে), আপনার অ্যাক্টিভ Google Cloud প্রোজেক্ট আইডি ক্যাপচার করুন, আপনার GitHub রিপোজিটরি ভেরিয়েবল যাচাই করুন এবং WIF রিসোর্সের নাম নির্ধারণ করুন:

# Capture active Google Cloud Project ID and verify GitHub repository
export PROJECT_ID=$(gcloud config get-value project)
export GITHUB_USER=$(gh api user -q ".login")
export GITHUB_REPO="${GITHUB_REPO:-$(git remote get-url origin 2>/dev/null | sed -E 's#^.*/##; s#\.git$##')}"
export GITHUB_REPO="${GITHUB_REPO:-juice-shop}"
export GITHUB_REPOSITORY="${GITHUB_USER:+${GITHUB_USER}/${GITHUB_REPO}}"

# Define WIF and Service Account resource names
export WORKLOAD_IDENTITY_POOL="codemender-github-pool"
export WORKLOAD_IDENTITY_PROVIDER="codemender-github-provider"
export SERVICE_ACCOUNT_NAME="codemender-ci-runner"

if [ -z "${PROJECT_ID}" ] || [ -z "${GITHUB_REPOSITORY}" ]; then
 echo "ERROR: PROJECT_ID ('${PROJECT_ID}') or GITHUB_REPOSITORY ('${GITHUB_REPOSITORY}') is empty. Check 'gcloud config get-value project' and 'gh auth status'."
else
 echo "Project ID:        ${PROJECT_ID}"
 echo "GitHub Repository: ${GITHUB_REPOSITORY}"
fi

ধাপ ২: প্রয়োজনীয় Google Cloud API চালু করা

IAM API, Security Token Service API, IAM Credentials API, Agent Platform API এবং Resource Manager API চালু করুন:

gcloud services enable \
 iam.googleapis.com \
 iamcredentials.googleapis.com \
 sts.googleapis.com \
 aiplatform.googleapis.com \
 cloudresourcemanager.googleapis.com \
 --project=${PROJECT_ID}

ধাপ ৩: একটি নির্দিষ্ট CI/CD পরিষেবা অ্যাকাউন্ট তৈরি করুন

CI/CD পাইপলাইন এক্সিকিউশনের জন্য ডেডিকেট করা সবচেয়ে কম-প্রিভিলেজ Google Cloud পরিষেবা অ্যাকাউন্ট তৈরি করুন (আগে থেকেই থাকলে নিরাপদে এটি আবার ব্যবহার করুন):

export SERVICE_ACCOUNT_EMAIL="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

gcloud iam service-accounts describe "${SERVICE_ACCOUNT_EMAIL}" \
 --project="${PROJECT_ID}" >/dev/null 2>&1 || \
gcloud iam service-accounts create "${SERVICE_ACCOUNT_NAME}" \
 --display-name="CodeMender CI/CD Pipeline Runner" \
 --project="${PROJECT_ID}"

echo "Service Account Email: ${SERVICE_ACCOUNT_EMAIL}"

ধাপ ৪: এজেন্ট প্ল্যাটফর্ম IAM অনুমতি মঞ্জুর করা

পরিষেবা অ্যাকাউন্টকে roles/aiplatform.user (এজেন্ট প্ল্যাটফর্ম ব্যবহারকারী) ভূমিকা দিন যাতে এটি Gemini Enterprise Agent Platform-এর সাথে যোগাযোগ করতে পারে:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
 --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
 --role="roles/aiplatform.user"

ধাপ ৫: ওয়ার্কলোড আইডেন্টিটি পুল তৈরি করুন

GitHub অ্যাকশন আইডেন্টিটি অ্যাসারশন ম্যানেজ করতে ওয়ার্কলোড আইডেন্টিটি পুল তৈরি করুন (অথবা আপনার প্রোজেক্টে এটি আগে থেকেই থাকলে অটোমেটিক রিস্টোর ও চালু করুন):

POOL_STATE=$(gcloud iam workload-identity-pools list \
 --location="global" \
 --show-deleted \
 --project="${PROJECT_ID}" \
 --filter="name ~ /${WORKLOAD_IDENTITY_POOL}$" \
 --format="value(state)")

if [ -z "${POOL_STATE}" ]; then
 gcloud iam workload-identity-pools create "${WORKLOAD_IDENTITY_POOL}" \
   --location="global" \
   --display-name="CodeMender GitHub Pool" \
   --project="${PROJECT_ID}"
else
 [ "${POOL_STATE}" = "DELETED" ] && gcloud iam workload-identity-pools undelete "${WORKLOAD_IDENTITY_POOL}" \
   --location="global" \
   --project="${PROJECT_ID}"
 gcloud iam workload-identity-pools update "${WORKLOAD_IDENTITY_POOL}" \
   --location="global" \
   --no-disabled \
   --project="${PROJECT_ID}"
fi

ধাপ ৬: GitHub OIDC-এর মাধ্যমে ওয়ার্কলোড আইডেন্টিটি প্রোভাইডার তৈরি করুন

পুলে OIDC প্রোভাইডার তৈরি (বা আপডেট) করুন, ইস্যুকারী URL https://token.actions.githubusercontent.com বাইন্ড করুন এবং GitHub টোকেন অ্যাসারশন Google STS অ্যাট্রিবিউটে ম্যাপ করুন:

PROVIDER_STATE=$(gcloud iam workload-identity-pools providers list \
 --workload-identity-pool="${WORKLOAD_IDENTITY_POOL}" \
 --location="global" \
 --show-deleted \
 --project="${PROJECT_ID}" \
 --filter="name ~ /${WORKLOAD_IDENTITY_PROVIDER}$" \
 --format="value(state)")

if [ -z "${GITHUB_REPOSITORY}" ]; then
 echo "ERROR: GITHUB_REPOSITORY is empty. Re-run Step 1 before configuring the OIDC provider."
elif [ -z "${PROVIDER_STATE}" ]; then
 gcloud iam workload-identity-pools providers create-oidc "${WORKLOAD_IDENTITY_PROVIDER}" \
   --workload-identity-pool="${WORKLOAD_IDENTITY_POOL}" \
   --location="global" \
   --display-name="CodeMender GitHub Provider" \
   --issuer-uri="https://token.actions.githubusercontent.com" \
   --attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository,attribute.repository_owner=assertion.repository_owner" \
   --attribute-condition="assertion.repository == '${GITHUB_REPOSITORY}'" \
   --project="${PROJECT_ID}"
else
 [ "${PROVIDER_STATE}" = "DELETED" ] && gcloud iam workload-identity-pools providers undelete "${WORKLOAD_IDENTITY_PROVIDER}" \
   --workload-identity-pool="${WORKLOAD_IDENTITY_POOL}" \
   --location="global" \
   --project="${PROJECT_ID}"
 gcloud iam workload-identity-pools providers update-oidc "${WORKLOAD_IDENTITY_PROVIDER}" \
   --workload-identity-pool="${WORKLOAD_IDENTITY_POOL}" \
   --location="global" \
   --issuer-uri="https://token.actions.githubusercontent.com" \
   --attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository,attribute.repository_owner=assertion.repository_owner" \
   --attribute-condition="assertion.repository == '${GITHUB_REPOSITORY}'" \
   --no-disabled \
   --project="${PROJECT_ID}"
fi

ধাপ ৭: GitHub রিপোজিটরিকে পরিষেবা অ্যাকাউন্ট ছদ্মবেশে ব্যবহার করার অনুমতি দিন

CI রানার পরিষেবা অ্যাকাউন্ট ছদ্মবেশে ধারণ করার জন্য আপনার রিপোজিটরি থেকে টোকেনকে অনুমতি দিতে roles/iam.workloadIdentityUser ভূমিকা বাইন্ড করুন এবং নীতি বাইন্ডিং যাচাই করুন:

# Retrieve the canonical Workload Identity Pool resource ID
export POOL_ID=$(gcloud iam workload-identity-pools describe "${WORKLOAD_IDENTITY_POOL}" \
 --project="${PROJECT_ID}" \
 --location="global" \
 --format="value(name)")

if [ -z "${POOL_ID}" ] || [ -z "${GITHUB_REPOSITORY}" ]; then
 echo "ERROR: POOL_ID ('${POOL_ID}') or GITHUB_REPOSITORY ('${GITHUB_REPOSITORY}') is empty. Re-run Step 1 and Step 5."
else
 # Bind Workload Identity User role to the principalSet of your repository
 gcloud iam service-accounts add-iam-policy-binding "${SERVICE_ACCOUNT_EMAIL}" \
   --project="${PROJECT_ID}" \
   --role="roles/iam.workloadIdentityUser" \
   --member="principalSet://iam.googleapis.com/${POOL_ID}/attribute.repository/${GITHUB_REPOSITORY}"

 # Verify the principalSet binding on the Service Account
 gcloud iam service-accounts get-iam-policy "${SERVICE_ACCOUNT_EMAIL}" \
   --project="${PROJECT_ID}"
fi

ধাপ ৮: GitHub সিক্রেটের জন্য কনফিগারেশন ভ্যালু ফিরিয়ে আনা

আপনার ওয়ার্কলোড আইডেন্টিটি প্রোভাইডারের সম্পূর্ণ রিসোর্স নাম ফিরিয়ে আনুন এবং পরবর্তী ধাপে অটোমেটিক রেজিস্ট্রেশনের জন্য এটি এনভায়রনমেন্ট ভেরিয়েবলে স্টোর করুন:

# Retrieve full Workload Identity Provider name
export WORKLOAD_PROVIDER_NAME=$(gcloud iam workload-identity-pools providers describe ${WORKLOAD_IDENTITY_PROVIDER} \
 --workload-identity-pool=${WORKLOAD_IDENTITY_POOL} \
 --location="global" \
 --project=${PROJECT_ID} \
 --format="value(name)")

echo "=========================================================="
echo "WIF CONFIGURATION READY:"
echo "=========================================================="
echo "GCP_WORKLOAD_IDENTITY_PROVIDER: ${WORKLOAD_PROVIDER_NAME}"
echo "GCP_SERVICE_ACCOUNT:            ${SERVICE_ACCOUNT_EMAIL}"
echo "=========================================================="

৫. GitHub রিপোজিটরি সিক্রেট ও ওয়ার্কফ্লোর অনুমতি কনফিগার করুন

Google Cloud WIF এখন প্রোভিশন করা হয়েছে, আপনি GitHub Repository Secrets কনফিগার করবেন এবং অটোমেটিক নিরাপত্তা স্ক্যানিং ও অটো-রিমিডিয়েশন পুল রিকোয়েস্টের জন্য প্রয়োজনীয় ওয়ার্কফ্লো সংক্রান্ত অনুমতি দেবেন।

আপনি GitHub CLI (gh) ব্যবহার করে Cloud Shell থেকে সরাসরি এইসব সেটিংস কনফিগার করতে পারবেন, যার ফলে রিসোর্সের দীর্ঘ নাম ম্যানুয়ালি কপি-পেস্ট করার প্রয়োজন হবে না।

ধাপ ১: GitHub CLI ব্যবহার করে রিপোজিটরি সিক্রেট সেট করা

আপনার Cloud Shell টার্মিনালে, অ্যাক্টিভ এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে দুটি প্রয়োজনীয় রিপোজিটরি সিক্রেট নিরাপদে সেট করতে নিম্নলিখিত কমান্ড রান করুন:

# 1. Set the Workload Identity Provider resource name
gh secret set GCP_WORKLOAD_IDENTITY_PROVIDER \
 --body "${WORKLOAD_PROVIDER_NAME}" \
 --repo "${GITHUB_REPOSITORY}"

# 2. Set the CI/CD Service Account email
gh secret set GCP_SERVICE_ACCOUNT \
 --body "${SERVICE_ACCOUNT_EMAIL}" \
 --repo "${GITHUB_REPOSITORY}"

# 3. Verify the secrets are registered
gh secret list --repo "${GITHUB_REPOSITORY}"

ধাপ ২: অটোমেটেড PR-এর জন্য ওয়ার্কফ্লো সংক্রান্ত অনুমতি দিন

ডিফল্ট হিসেবে, GitHub অ্যাকশন ওয়ার্কফ্লো শুধুমাত্র পড়ার অনুমতি নিয়ে রান করে এবং পুল রিকোয়েস্ট তৈরি করতে পারে না। ৯ নম্বর ধাপে, CodeMender অটোমেটিক যাচাই করা রেমিডিয়েশন পুল রিকোয়েস্ট তৈরি ও জমা করবে।

রাইট পার্মিশন দিন এবং GitHub এপিআই-এর মাধ্যমে সরাসরি পুল রিকোয়েস্ট তৈরি করার সুবিধা চালু করুন:

[ -d .git ] || cd ~/"${GITHUB_REPO:-juice-shop}"
export GITHUB_REPOSITORY="${GITHUB_REPOSITORY:-$(git remote get-url origin 2>/dev/null | sed -E 's#^.*github\.com[:/]##; s#\.git$##')}"

gh api \
 --method PUT \
 -H "Accept: application/vnd.github+json" \
 /repos/${GITHUB_REPOSITORY}/actions/permissions/workflow \
 -f default_workflow_permissions="write" \
 -F can_approve_pull_request_reviews=true

ধাপ ৩: ইনহেরিট করা আপস্ট্রিম Juice Shop ওয়ার্কফ্লো বন্ধ করা

OWASP Juice Shop ফর্ক করার ফলে ১৬টির বেশি আপস্ট্রিম CI ওয়ার্কফ্লো (যেমন PR Compliance Check, CI/CD Pipeline ও CodeQL Scan) এবং আপস্ট্রিম কন্ট্রিবিউটর PR টেমপ্লেট ক্যারি ওভার হয় যা master-কে টার্গেট করা PR অটোমেটিক বন্ধ করে দেয়। GitHub CLI-এর মাধ্যমে CodeMender-এর নয় এমন সব ওয়ার্কফ্লো বন্ধ করুন এবং স্থানীয়ভাবে আপস্ট্রিম ফাইলগুলি সরিয়ে দিন যাতে আপনার ফর্ক কঠোরভাবে CodeMender ওয়ার্কফ্লো রান করে:

[ -d .git ] || cd ~/"${GITHUB_REPO:-juice-shop}"
export GITHUB_REPOSITORY="${GITHUB_REPOSITORY:-$(git remote get-url origin 2>/dev/null | sed -E 's#^.*github\.com[:/]##; s#\.git$##')}"

# 1. Disable all inherited non-CodeMender workflows in GitHub Actions (and CodeQL default setup if active)
for WF_ID in $(gh workflow list --all --limit 100 --repo "${GITHUB_REPOSITORY}" --json id,path \
 -q '.[] | select((.path | startswith(".github/workflows/")) and (.path | test("codemender-") | not)) | .id'); do
 gh workflow disable "${WF_ID}" --repo "${GITHUB_REPOSITORY}" 2>/dev/null || true
done
gh api -X PATCH "/repos/${GITHUB_REPOSITORY}/code-scanning/default-setup" \
 -f state=not-configured >/dev/null 2>&1 || true

# 2. Remove upstream workflow files and PR template from the local workspace
for f in .github/workflows/*; do
 case "$f" in *codemender-*) ;; *) rm -f "$f" ;; esac
done
rm -f .github/PULL_REQUEST_TEMPLATE.md

৬. SARIF-এর মাধ্যমে অটোমেটেড ভালনারেবিলিটি স্ক্যানিং ওয়ার্কফ্লো তৈরি করা

এই ধাপে, আপনি প্রাথমিক কন্টিনিউয়াস সিকিউরিটি স্ক্যানিং ওয়ার্কফ্লো (.github/workflows/codemender-scan.yml) তৈরি করবেন যা ব্রাঞ্চ পুশে বেসলাইন স্ক্যান, পুল রিকোয়েস্টে ডিফারেন্সিয়াল গেট এবং GitHub কোড স্ক্যানিংয়ে SARIF এক্সপোর্ট রান করে।

ধাপ ১: CodeMender স্ক্যানিং ওয়ার্কফ্লো ডাউনলোড করুন

স্টার্টার রিপোজিটরি থেকে codemender-scan.yml ডাউনলোড করে .github/workflows/-এ সেভ করুন:

[ -d .git ] || cd ~/"${GITHUB_REPO:-juice-shop}"
mkdir -p .github/workflows
curl -fsSL https://raw.githubusercontent.com/edwardc-gcp/codemender-github-actions/main/.github/workflows/codemender-scan.yml \
 -o .github/workflows/codemender-scan.yml

ধাপ ২: CI স্ক্যানিং কমিট, পুশ ও ট্রিগার করা

ওয়ার্কফ্লোতে করা পরিবর্তনগুলি কমিট করুন এবং সরাসরি আপনার রিপোজিটরির প্রাথমিক ব্রাঞ্চে পুশ করুন (Juice Shop-এর জন্য master, অথবা main):

# Stage workflow changes, commit, and push to primary branch
git add -A .github
git commit -m "ci: add CodeMender SARIF security scanning workflow"
git push origin $(git branch --show-current)

আপনার ব্রাউজারে:

আপনার ফর্ক করা GitHub রিপোজিটরিতে নেভিগেট করুন: https://github.com/YOUR_GITHUB_USER/juice-shop (যেমন, https://github.com/octocat/juice-shop)।

উপরের নেভিগেশন বারে অ্যাকশন ট্যাবে ক্লিক করুন।

বাঁদিকের সাইডবারে ওয়ার্কফ্লো বিকল্পের অধীনে, CodeMender Security Scan & SARIF Export বিকল্প বেছে নিন।

ওয়ার্কফ্লো এক্সিকিউশন ট্রিগার করা বা দেখা:

অটোমেটিক ট্রিগার: আপনার পুশ দ্বারা ট্রিগার করা অটোমেটিক রান তালিকাভুক্ত থাকলে, লাইভ এক্সিকিউশন মনিটর করতে সরাসরি এটিতে ক্লিক করুন।

ম্যানুয়াল অন-ডিমান্ড ট্রিগার (workflow_dispatch): এখনও কোনও রান শুরু না হয়ে থাকলে, ডানদিকে ওয়ার্কফ্লো রান করুন ▾ বোতামে ক্লিক করুন, Branch: master বেছে নেওয়া হয়েছে কিনা তা নিশ্চিত করুন (deep_scan চেকবক্স খালি রাখুন যাতে দ্রুত --quick বেসলাইন স্ক্যান রান করে) এবং সবুজ রঙের ওয়ার্কফ্লো রান করুন বোতামে ক্লিক করুন।

এক্সিকিউট করা রানে ক্লিক করুন এবং রিয়েল-টাইমে ওয়ার্কফ্লো স্পিন আপ দেখতে অটোনোমাস কোড ভালনারেবিলিটি স্ক্যান বিকল্প বেছে নিন।

codemender-scan.yml-এর মধ্যে: ইভেন্ট-অ্যাওয়ার স্ক্যান রাউটিং

ক্লাউডে --quick বেসলাইন স্ক্যান চলাকালীন (~৩–৫ মিনিট), codemender-scan.yml (লাইন ১১৮–১৫৫) কীভাবে প্রতিটি GitHub ইভেন্টকে রানারের মধ্যে তার নির্দিষ্ট স্ক্যান মোডে রুট করে তা পরীক্ষা করুন:

# Excerpt from .github/workflows/codemender-scan.yml
if [ "${{ github.event_name }}" = "pull_request" ]; then
 cm find . \
   --diff="origin/${{ github.base_ref }}" \
   --diff-workers=16 \
   --fail-on="CRITICAL,HIGH" \
   --sandbox=false --yes --bypass-warning || status=$?
elif [ "${{ github.event_name }}" = "schedule" ] || [ "${{ github.event.inputs.deep_scan }}" = "true" ]; then
 cm find . \
   --deep-workers=8 \
   --sandbox=false --yes --bypass-warning || status=$?
else
 cm find . \
   --quick \
   --sandbox=false --yes --bypass-warning || status=$?
fi

হার্ডেনড রানার সেট-আপ ( লাইন ২৭–১১৭): বিশ্বস্ত নয় এমন এক্সটার্নাল ফর্ক ও dependabot[bot] PR এড়িয়ে যায়, persist-credentials: false-এর মাধ্যমে চেক আউট করে, ~/.local/bin/cm ও ~/.codemender/state.db ক্যাশে করে এবং মডেল কোটা ব্যবহার করার আগে cm health --strict রান করে।

হেডলেস স্যান্ডবক্স বাউন্ডারি (--sandbox=false --yes --bypass-warning): ওয়ার্কস্পেস পাথ বাউন্ডারি (project_paths) ও command_policy.yaml এনফোর্স করে রাখার সময় Linux ইউজার-নেমস্পেস আইসোলেশন (সুবিধা না পাওয়া GitHub অ্যাকশন কন্টেনারের মধ্যে সীমাবদ্ধ) বন্ধ করে দেয়।

Exit-Code Guarded SARIF & Artifact Export ( lines 147–194): cm find, 0 (ক্লিন) বা 1 (--fail-on থ্রেশহোল্ড পূরণ হয়েছে) সহ এক্সিট করলে, steps.scan.outputs.completed=true কঠোরভাবে সেট করে। এটি নিশ্চিত করে যে SARIF রিপোর্ট (cm report -f sarif CVSS তীব্রতা স্কোর সহ), $GITHUB_STEP_SUMMARY টেবিল (cm report -f md) এবং codemender-findings.json আর্টিফ্যাক্ট এখনও প্রকাশ করা হয় যখন --fail-on একটি PR ব্লক করে—সেটআপ বা ক্ষমতা ত্রুটির (10–60) উপর এক্সপোর্ট এড়িয়ে যাওয়ার সময় যাতে খালি SARIF ফাইলগুলি কখনই বিদ্যমান সতর্কতাগুলি বন্ধ না করে।

৭. GitHub কোড স্ক্যানিং অ্যালার্ট ও নিরাপত্তা ড্যাশবোর্ড পরীক্ষা করুন

বেসলাইন পুশ ওয়ার্কফ্লো শেষ হওয়ার পরে, GitHub আপলোড করা SARIF ফাইল প্রসেস করে এবং অ্যাকশন রান সামারি ও রিপোজিটরি নিরাপত্তা ট্যাব, দুটিই পূরণ করে।

ধাপ ১: GitHub অ্যাকশনে নেটিভ জব সামারি পরীক্ষা করা

প্রতিটি ওয়ার্কফ্লো রান, GitHub অ্যাকশন রান ওভারভিউতে সরাসরি একটি মার্কডাউন সারসংক্ষেপ টেবিল (cm report -f md) যোগ করে:

আপনার GitHub রিপোজিটরিতে, অ্যাকশন ট্যাবে ক্লিক করুন।

সম্পূর্ণ হওয়া CodeMender Security Scan & SARIF Export রান বেছে নিন (SARIF ফাইন্ডিং প্রকাশ করার পরে বেসলাইন ব্রাঞ্চ পুশ অডিট সবুজ ✅ টিকচিহ্ন সহ শেষ হয়)।

ফলাফলের ব্রেকডাউন দেখতে, স্ক্রল করে নিচে 🛡️ CodeMender নিরাপত্তা স্ক্যান সারাংশ বিভাগে যান:

🔒 CodeMender নিরাপত্তা রিপোর্ট

সারসংক্ষেপ

মোট ফলাফল: ২৮টি

তীব্রতা

সংখ্যা

🔴 গুরুতর

6

🟠 বেশি

16

🟡 মাঝারি

6

স্ট্যাটাস

সংখ্যা

🔴 খোলা আছে

২৮

ফলাফল

ID

তীব্রতা

কনফিডেন্স

স্ট্যাটাস

সমাধান করুন

ফাইল

শিরোনাম

c1b96b9a

🔴 গুরুতর

১০০%

খুলুন

—

routes/userProfile.ts

ব্যবহারকারীর প্রোফাইলে সার্ভার-সাইড কোড ইনজেকশনের মাধ্যমে রিমোট কোড এক্সিকিউশন

cd47b38a

🔴 গুরুতর

১০০%

খুলুন

—

routes/login.ts

ব্যবহারকারীর পরিচয় যাচাইকরণের রুটে SQL ইঞ্জেকশন

a47a9e45

🔴 গুরুতর

১০০%

খুলুন

—

routes/b2bOrder.ts

B2B অর্ডার প্রসেসিংয়ে স্যান্ডবক্স এস্কেপের মাধ্যমে রিমোট কোড এক্সিকিউশন

ধাপ ২: সেন্ট্রালাইজড কোড স্ক্যানিং ড্যাশবোর্ড এক্সপ্লোর করুন

আপনার GitHub রিপোজিটরির উপরের নেভিগেশন বারে, নিরাপত্তা ও কোয়ালিটি (বা নিরাপত্তা) ট্যাবে ক্লিক করুন।

বাঁদিকের সাইডবারে ফলাফল বিকল্পের অধীনে কোড স্ক্যানিং বিকল্প বেছে নিন।

একাধিক টুল অ্যাক্টিভ থাকলে, নেটিভ CVSS তীব্রতা ব্যাজের সাথে ম্যাপ করা সতর্কতাগুলি পরীক্ষা করতে টুল থেকে CodeMender (is:open branch:master tool:CodeMender) ফিল্টার করুন:

সেভারিটি ব্যাজ

Vulnerability Headline

শনাক্ত করা লোকেশন

ব্রাঞ্চ

🔴 গুরুতর

ব্যবহারকারীর প্রোফাইলে সার্ভার-সাইড কোড ইনজেকশনের মাধ্যমে রিমোট কোড এক্সিকিউশন

routes/userProfile.ts:58

master

🔴 গুরুতর

ব্যবহারকারীর পরিচয় যাচাইকরণের রুটে SQL ইঞ্জেকশন

routes/login.ts:34

master

🔴 গুরুতর

B2B অর্ডার প্রসেসিংয়ে স্যান্ডবক্স এস্কেপের মাধ্যমে রিমোট কোড এক্সিকিউশন

routes/b2bOrder.ts:21

master

Gemini-র মাধ্যমে সিন্থেসাইজ করা দূষিত ডেটাফ্লো এবং মূল কারণ বিশ্লেষণ পর্যালোচনা করতে ব্যবহারকারী যাচাইকরণ রুটে SQL ইনজেকশন (routes/login.ts:34) বিকল্পে ক্লিক করুন।

৮. ডিফারেন্সিয়াল স্ক্যানিংয়ের মাধ্যমে অসুরক্ষিত পুল রিকোয়েস্ট ব্লক করা

আপনার বেসলাইন স্ক্যান OWASP জুস শপে আগে থেকে থাকা ২৮টি দুর্বলতা খুঁজে পেয়েছে। প্রথাগত স্ট্যাটিক অ্যানালাইজারের ক্ষেত্রে, সেই ২৮টি লিগ্যাসি ফাইন্ডিং সম্পূর্ণ ব্যাকলগ ঠিক না করা পর্যন্ত ভবিষ্যতের প্রতিটি পুল রিকোয়েস্টকে ব্যর্থ করে দেবে—যার ফলে টিমকে মার্জ ব্লকিং বন্ধ করতে বাধ্য করবে।

এখন আপনি CodeMender-এর PR ডিফারেনশিয়াল AST গেট (--diff + --fail-on="CRITICAL,HIGH") অ্যাকশনে টেস্ট করবেন: একটি পুল রিকোয়েস্ট খোলা যা একটি নতুন দুর্বলতা নিয়ে আসে এবং CodeMender-কে ডেল্টা আলাদা করতে, ~১৫–২৫ সেকেন্ডে মার্জ ব্লক করতে এবং সঠিক ক্ষতিকর লাইনগুলি অ্যানোটেট করতে দেখা।

ধাপ ১: কমান্ড ইনজেকশন ত্রুটি সহ একটি পুল রিকোয়েস্ট খুলুন

Cloud Shell-এ (আপনার ক্লোন করা রিপোজিটরি ওয়ার্কস্পেসের মধ্যে), একটি ফিচার ব্রাঞ্চ তৈরি করুন, OS কমান্ড ইনজেকশন সংক্রান্ত দুর্বলতা সহ একটি নতুন এক্সপ্রেস রুট যোগ করুন এবং আপনার ফর্কের জন্য একটি পুল রিকোয়েস্ট খুলুন:

[ -d .git ] || cd ~/"${GITHUB_REPO:-juice-shop}"
export GITHUB_REPOSITORY="${GITHUB_REPOSITORY:-$(git remote get-url origin 2>/dev/null | sed -E 's#^.*github\.com[:/]##; s#\.git$##')}"
PRIMARY_BRANCH=$(git symbolic-ref --short refs/remotes/origin/HEAD | sed 's@^origin/@@')

# Reset any previous demo PR/branch so this step can be re-run cleanly
gh pr close feat/diagnostics --repo "${GITHUB_REPOSITORY}" --delete-branch 2>/dev/null || true
git checkout "${PRIMARY_BRANCH}"
git checkout -B feat/diagnostics

# Introduce an Express endpoint vulnerable to OS Command Injection (CWE-78)
cat << 'EOF' > routes/diagnostics.ts
import { execSync } from 'node:child_process'
import { type Request, type Response } from 'express'

export function systemDiagnostics () {
 return (req: Request, res: Response) => {
   const host = String(req.query.host ?? '127.0.0.1')
   const output = execSync(`ping -c 1 ${host}`).toString()
   res.status(200).json({ status: 'ok', output })
 }
}
EOF

git add routes/diagnostics.ts
git commit -m "feat: add network diagnostics endpoint"
git push -f -u origin feat/diagnostics

gh pr create \
 --repo "${GITHUB_REPOSITORY}" \
 --base "${PRIMARY_BRANCH}" \
 --head feat/diagnostics \
 --title "feat: add network diagnostics endpoint" \
 --body "Adds a ping diagnostics handler."

ধাপ ২: ডিফারেনশিয়াল মার্জ গেট ও ইনলাইন PR অ্যানোটেশন যাচাই করুন

টার্মিনাল আউটপুটের শেষে প্রিন্ট করা পুল রিকোয়েস্ট URL খুলুন।

পুল রিকোয়েস্ট কথোপকথন পৃষ্ঠার নিচে চেক বক্সে স্ক্রল করে যান এবং অটোনোমাস কোড ভালনারেবিলিটি স্ক্যান দেখুন:

ডেল্টা স্পিড: রিপোজিটরিতে থাকা ৬৮০টির বেশি ফাইল স্ক্যান করার (~৩–৫ মিনিট) পরিবর্তে, cm find . --diff="origin/${PRIMARY_BRANCH}" কঠোরভাবে routes/diagnostics.ts (এবং যেকোনও ১-হপ কলার) বিশ্লেষণ করে, ~১৫–২৫ সেকেন্ডে স্ক্যান সম্পূর্ণ করে।

লিগেসি ডেট আইসোলেশন ও মার্জ ব্লকিং: Juice Shop-এর ২৮টি অস্পর্শিত লিগেসি দুর্বলতার কোনওটিই চেক করতে ব্যর্থ হয় না—শুধুমাত্র নতুন চালু করা CRITICAL কমান্ড ইনজেকশন ট্রিগার --fail-on="CRITICAL,HIGH", PR মার্জ ব্লক করতে স্ট্যাটাস কোড 1 (লাল ❌) সহ প্রস্থান করে!

পুল রিকোয়েস্টের উপরে পরিবর্তন করা ফাইল ট্যাবে ক্লিক করুন:

কারণ ওয়ার্কফ্লোর এক্সিট-কোড গার্ড (steps.scan.outputs.completed == 'true') এখনও results.sarif এক্সপোর্ট ও আপলোড করে যখন --fail-on কোড 1-এর সাথে এক্সিট করে, GitHub কোড স্ক্যানিং routes/diagnostics.ts-এ execSync-এর ঠিক নিচে একটি ইনলাইন CodeMender — ক্রিটিক্যাল নিরাপত্তা অ্যানোটেশন রেন্ডার করে!

ধাপ ৩: টেস্ট PR ক্লিন-আপ করে প্রাইমারি ব্রাঞ্চে ফিরে যান

অটোনোমাস রেমিডিয়েশন নিয়ে এগিয়ে যাওয়ার আগে, আপনার Cloud Shell ওয়ার্কস্পেসকে প্রাইমারি ব্রাঞ্চে ফিরিয়ে আনুন এবং অসুরক্ষিত টেস্ট পুল রিকোয়েস্ট বন্ধ করুন:

[ -d .git ] || cd ~/"${GITHUB_REPO:-juice-shop}"
export GITHUB_REPOSITORY="${GITHUB_REPOSITORY:-$(git remote get-url origin 2>/dev/null | sed -E 's#^.*github\.com[:/]##; s#\.git$##')}"
PRIMARY_BRANCH=$(git symbolic-ref --short refs/remotes/origin/HEAD | sed 's@^origin/@@')
git checkout "${PRIMARY_BRANCH}"
gh pr close feat/diagnostics --repo "${GITHUB_REPOSITORY}" --delete-branch
git branch -D feat/diagnostics 2>/dev/null || true

৯. অটোনোমাস রেমিডিয়েশন ও অটো-PR ওয়ার্কফ্লো তৈরি করা

এখন আপনার পুল রিকোয়েস্ট গেট কোডবেসে নতুন দুর্বলতা প্রবেশ করতে বাধা দেয়, আপনি বিদ্যমান দুর্বলতাগুলি সক্রিয়ভাবে ঠিক করতে এবং পর্যালোচনা-প্রস্তুত পুল রিকোয়েস্ট খুলতে অটোনোমাস রেমিডিয়েশন (.github/workflows/codemender-remediate.yml) ডিপ্লয় করবেন।

ধাপ ১: প্রতিকারমূলক ওয়ার্কফ্লো ফাইল ডাউনলোড করুন

রিপোজিটরি দৃশ্যমানতার উপর নির্ভর করে CodeMender দুটি প্রতিকার টেমপ্লেট প্রদান করে:

পাবলিক / ওপেন-সোর্স রিপোজিটরি (codemender-remediate.yml): দায়িত্বপূর্ণ ডিসক্লোজার মোড—পাবলিকলি র এক্সপ্লয়েট ভেক্টর প্রকাশ না করে GitHub কোড স্ক্যানিং SARIF সতর্কতার সাথে লিঙ্ক করে।

ব্যক্তিগত / এন্টারপ্রাইজ রিপোজিটরি (codemender-remediate-private-repo.yml): ইন্টার্নাল অডিট এভিডেন্স মোড—Git কমিট থেকে বাদ দেওয়ার সময়, আড়াল করা যায় এমন PR বিভাগের মধ্যে যাচাইকরণ আর্টিফ্যাক্ট (PLAN.md, REPORT.md, exploit.sh) এম্বেড করে।

আপনার রিপোজিটরিতে পাবলিক-সেফ রেমিডিয়েশন ওয়ার্কফ্লো ডাউনলোড করুন:

mkdir -p .github/workflows
curl -fsSL https://raw.githubusercontent.com/edwardc-gcp/codemender-github-actions/main/.github/workflows/codemender-remediate.yml \
 -o .github/workflows/codemender-remediate.yml

ধাপ ২: অটোমেটিক প্রতিকার ওয়ার্কফ্লো কমিট ও ট্রিগার করুন

আপনার প্রাথমিক ব্রাঞ্চে রেমিডিয়েশন ওয়ার্কফ্লো কমিট ও পুশ করুন:

git add .github/workflows/codemender-remediate.yml
git commit -m "ci: add CodeMender autonomous remediation workflow"
git push origin $(git branch --show-current)

আপনার ব্রাউজারে, GitHub রিপোজিটরির অ্যাকশন ট্যাবে যান।

বাঁদিকের সাইডবারে ওয়ার্কফ্লো বিকল্পের অধীনে CodeMender Autonomous Security Remediation & Auto-PR বিকল্প বেছে নিন।

ডানদিকে সবুজ রঙের ওয়ার্কফ্লো রান করুন ড্রপডাউনে ক্লিক করুন:

এখান থেকে ওয়ার্কফ্লো ব্যবহার করুন: ডিফল্ট ব্রাঞ্চ (master) বেছে নেওয়া হয়েছে কিনা তা নিশ্চিত করুন।

নির্দিষ্ট ফাইন্ডিং আইডি বা প্রিফিক্স যা ঠিক করতে হবে: ৭ নম্বর ধাপে উল্লেখ করা routes/login.ts-এর জন্য ৮-অক্ষরের প্রিফিক্স লিখুন (যেমন, cd47b38a)। এটি ফাঁকা রাখলে, সমস্ত খোলা ক্রিটিক্যাল এবং হাই ফাইন্ডিং জুড়ে ব্যাচ রেমিডিয়েশন রান করে (~১০–১৫ মিনিট); একটি আইডি টার্গেট করলে ~৪৫–৬০ সেকেন্ডে সম্পূর্ণ হয়।

পপওভারের মধ্যে সবুজ রঙের ওয়ার্কফ্লো রান করুন বোতামে ক্লিক করুন এবং এক্সিকিউটিং রান খুলুন।

'রান ওয়ার্কফ্লো' ড্রপডাউন মেনুর মাধ্যমে CodeMender Autonomous Security Remediation ওয়ার্কফ্লো ট্রিগার করুন

codemender-remediate.yml-এর মধ্যে: অটোনোমাস প্যাচ সিন্থেসিস

CodeMender ক্লাউডে প্যাচ সিন্থেসাইজ করার সময় (~৩০–৪৫ সেকেন্ড), রানারের মধ্যে codemender-remediate.yml (লাইন ১১১–১৮৪) কীভাবে প্রতিকার অর্কেস্ট্রেট করে তা দেখুন:

জিরো-স্ক্যান রিজিউম (cm report import): স্ক্যান ওয়ার্কফ্লো থেকে codemender-findings.json আর্টিফ্যাক্ট ডাউনলোড করে এবং ওয়ার্কস্পেসে (cm report import -f codemender-findings.json) ইমপোর্ট করে, আগে থেকে কোনও আর্টিফ্যাক্ট না থাকলে তবেই cm find . --quick-এ ফিরে যায়।

হেডলেস প্যাচ সিন্থেসিস (cm fix): ইন্টার‍্যাক্টিভ হ্যাং প্রতিরোধ করতে project_paths থেকে $GITHUB_WORKSPACE পিন করে, < /dev/null পাইপ করে এবং ব্যাচ লুপের সময় --no-reset পাস করে যাতে সমস্ত ফাইন্ডিং জুড়ে কিউমুলেটিভ ফিক্স সংরক্ষিত থাকে:

# Executed inside the GitHub Actions runner (codemender-remediate.yml)
cm fix "${SPECIFIC_TARGET}" --sandbox=false --yes --bypass-warning < /dev/null

ক্লিন প্রোডাকশন কমিট ( লাইন ১৫৫–২৫২): peter-evans/create-pull-request@v8 ব্রাঞ্চ (codemender/auto-remediation-${{ github.run_id }}) খোলার আগে .git/info/exclude-এর মাধ্যমে .cm_project, .exploit/ এবং অস্থায়ী ফাইল মুছে দেয়, প্রোডাকশন কোড পরিবর্তন কঠোরভাবে কমিট করে:

--- a/routes/login.ts
+++ b/routes/login.ts
@@ -28,8 +28,8 @@ module.exports = function login () {
-    models.sequelize.query(`SELECT * FROM Users WHERE email = '${req.body.email || ''}' AND password = '${security.hash(req.body.password || '')}' AND deletedAt IS NULL`, { model: models.User })
+    models.sequelize.query('SELECT * FROM Users WHERE email = :email AND password = :password AND deletedAt IS NULL', {
+      replacements: { email: req.body.email || '', password: security.hash(req.body.password || '') },
+      model: models.User
+    })

ধাপ ৩: GitHub-এ নতুন খোলা পুল রিকোয়েস্ট পর্যালোচনা করুন

আপনার রিপোজিটরিতে পুল রিকোয়েস্ট ট্যাবে নেভিগেট করুন এবং নতুন পুল রিকোয়েস্ট (যেমন, 🛡️ [CodeMender] Fix: SQL Injection in User Authentication Route) খুলুন।

পরিবর্তিত ফাইল বিকল্পে ক্লিক করে কনফার্ম করুন যে সব ইন্টার্নাল রানটাইম মেটাডেটা বাদ দিয়ে শুধু routes/login.ts পরিবর্তন করা হয়েছে।

মেনটেনার সাইন-অফের জন্য সরাসরি GitHub কোড স্ক্যানিং (SARIF) সতর্কতার সাথে লিঙ্ক করা PR বিবরণ পর্যালোচনা করুন।

১০. এজ কেস ও ব্যক্তিগত রিপোজিটরি সংক্রান্ত সমস্যার সমাধান করা

GitHub Advanced Security (GHAS) ছাড়া ব্যক্তিগত রিপোজিটরি

পাবলিক GitHub রিপোজিটরি ফ্রিতে, আনলিমিটেড GitHub কোড স্ক্যানিং SARIF ইনজেশন পায়। তবে, আপনি যদি এই ওয়ার্কফ্লো এমন কোনও ব্যক্তিগত এন্টারপ্রাইজ রিপোজিটরিতে ডিপ্লয় করেন যার কোনও অ্যাক্টিভ GitHub Advanced Security (GHAS) লাইসেন্স নেই, তাহলে upload-sarif ধাপটি ব্যর্থ হবে এবং এই মেসেজ দেখানো হবে:

HTTP 403: Advanced Security must be enabled for this repository to use code scanning.

রেজোলিউশন: স্ট্যান্ডঅ্যালোন ইন্ট্যার‍্যাক্টিভ HTML রিপোর্ট ফলব্যাক

CodeMender-এর বিল্ট-ইন HTML রিপোর্ট জেনারেটর (cm report -f html) একটি স্ট্যান্ডঅ্যালোন, ইন্টার‍্যাক্টিভ নিরাপত্তা ড্যাশবোর্ড তৈরি করে যাতে তীব্রতা মেট্রিক কার্ড, লাইন নম্বর সহ সিনট্যাক্স-হাইলাইট করা কোড স্নিপেট এবং শূন্য এক্সটার্নাল ওয়েব ডিপেন্ডেন্সি সহ একটি ইনলাইন প্যাচ ডিফারেন্স ভিউয়ার থাকে।

GHAS লাইসেন্স ছাড়া ব্যক্তিগত রিপোজিটরি সাপোর্ট করতে, SARIF আপলোড করার পরিবর্তে HTML রিপোর্ট আর্টিফ্যাক্ট আর্কাইভ করতে .github/workflows/codemender-scan.yml আপডেট করুন:

স্ট্যান্ডঅ্যালোন HTML রিপোর্ট তৈরি করুন: Export Security Reports & Publish Job Summary ধাপে, cm report -f html > codemender-audit-report.html ব্যবহার করে আপনার Markdown সারসংক্ষেপের পাশাপাশি একটি HTML ড্যাশবোর্ড এক্সপোর্ট করুন।

ওয়ার্কফ্লো আর্টিফ্যাক্ট হিসেবে রিপোর্ট আর্কাইভ করুন: Upload SARIF Report to GitHub Code Scanning (github/codeql-action/upload-sarif@v4) ধাপটি actions/upload-artifact@v4 দিয়ে পরিবর্তন করুন যা codemender-audit-report.html আপলোড করার জন্য কনফিগার করা হয়েছে (যেমন, আর্টিফ্যাক্ট নাম codemender-security-report-এর অধীনে)।

যেকোনও ব্রাউজারে স্থানীয়ভাবে পরীক্ষা করুন: GitHub অ্যাকশন ওয়ার্কফ্লো রান সামারি পৃষ্ঠা থেকে সরাসরি codemender-security-report.zip ডাউনলোড করুন, এটি এক্সট্র্যাক্ট করুন এবং ভিজ্যুয়াল ট্রায়াজের জন্য যেকোনও ওয়েব ব্রাউজারে codemender-audit-report.html খুলুন।

এম্বেড করা অডিট প্রমাণ সহ প্রাইভেট রিপোজিটরি অটোনোমাস রেমিডিয়েশন

ব্যক্তিগত কর্পোরেট রিপোজিটরিতে, এক্সটার্নাল টুল ড্যাশবোর্ডের প্রয়োজন ছাড়াই ইঞ্জিনিয়ারিং এবং নিরাপত্তা টিমকে মূল কারণ বিশ্লেষণ, এক্সপ্লয়েট প্রুফ-অফ-কনসেপ্ট এবং প্রতিকার পরিকল্পনা সম্পর্কে সম্পূর্ণ তথ্য জানতে হয়। তবে, রিপোজিটরি ব্রাঞ্চে এক্সপ্লয়েট স্ক্রিপ্ট (exploit.sh) বা ইন্টার্নাল মার্কডাউন ফাইল (PLAN.md, LOG.md) কমিট করলে, গিট ইতিহাস দূষিত হয় এবং অন্যান্য নিরাপত্তা স্ক্যানার থেকে ভুল অ্যালার্ট ট্রিগার করতে পারে।

এই সমস্যার সমাধান করতে, ডেডিকেটেড প্রাইভেট রিপোজিটরি রেমিডিয়েশন ওয়ার্কফ্লো (codemender-remediate-private-repo.yml) ডিপ্লয় করুন:

curl -fsSL https://raw.githubusercontent.com/edwardc-gcp/codemender-github-actions/main/.github/workflows/codemender-remediate-private-repo.yml \
 -o .github/workflows/codemender-remediate.yml
git add .github/workflows/codemender-remediate.yml
git commit -m "ci: switch to private repository remediation workflow with embedded audit evidence"
git push origin $(git branch --show-current)

ব্যক্তিগত রিপোজিটরি রেমিডিয়েশন কীভাবে কাজ করে

ডায়নামিক PoC যাচাইকরণ (cm verify): এক্সপ্লয়েট করা যাবে কিনা তা কনফার্ম করার জন্য, সমাধান তৈরি করার আগে, একটি কার্যকরী এক্সপ্লয়েট সিন্থেসাইজ ও টেস্ট করে—যাচাইকরণে যদি কোনও এক্সপ্লয়েট করা যাবে না এমন ফাইন্ডিংকে DISMISSED হিসেবে চিহ্নিত করা হয়, তাহলে অটোমেটিক cm fix স্কিপ করে।

এম্বেড করা PR অডিট কোলাপ্সিবল: REPORT.md, PLAN.md এবং exploit.sh-কে /tmp/codemender-evidence/-এ এক্সট্র্যাক্ট করে এবং রিভিউয়ার যাতে এক ক্লিকে চেক করতে পারেন তার জন্য <details open> কোলাপ্সিবল ব্লকের মধ্যে পুল রিকোয়েস্টের বিবরণে সরাসরি ফর্ম্যাট করে।

আর্টিফ্যাক্ট আর্কাইভ করা: actions/upload-artifact@v4-এর মাধ্যমে সম্পূর্ণ প্রমাণ ফোল্ডার আর্কাইভ করে।

প্রিস্টিন গিট কমিট: সব রানটাইম মেটাডেটা এবং .exploit ডিরেক্টরি মুছে দেয় যাতে পুল রিকোয়েস্ট গিট কমিটে কঠোরভাবে প্রোডাকশন কোড পরিবর্তন থাকে।

Workload Identity Federation (WIF) সংক্রান্ত সমস্যার সমাধান করার চেকলিস্ট

ডিফল্ট হিসেবে, সেট-আপের সময় google-github-actions/auth@v2 একটি লোকাল ফেডারেটেড ক্রেডেনশিয়াল কনফিগারেশন ফাইল লেখে এবং cm health --strict বা cm find শুরু হলে আসল OAuth 2.0 টোকেন এক্সচেঞ্জ হয়। HTTP 400 বা HTTP 403 যাচাইকরণ সংক্রান্ত সমস্যা ডায়াগনসিস করতে নিচের চেকলিস্ট ব্যবহার করুন:

সমস্যার লক্ষণ

সাধারণ মূল কারণ

যাচাইকরণ ও সমাধান

HTTP 403 (iam.serviceAccounts.getAccessToken প্রত্যাখ্যান করা হয়েছে)

পরিষেবা অ্যাকাউন্টে roles/iam.workloadIdentityUser বাইন্ডিং নেই, ভুল GCP_SERVICE_ACCOUNT সিক্রেট বা iamcredentials.googleapis.com চালু করা নেই।

GCP_SERVICE_ACCOUNT-এর সাথে codemender-ci-runner@.iam.gserviceaccount.com মিলছে কিনা তা কনফার্ম করুন এবং principalSet বাইন্ডিং যাচাই করতে নিচে IAM নীতি চেক করুন।

HTTP 400 (unauthorized_client বা অ্যাট্রিবিউট কন্ডিশন বাতিল করা হয়েছে)

OIDC –attribute-condition রিপোজিটরির নাম (বা কেসিং) ওয়ার্কফ্লো ট্রিগার করা GitHub রিপোজিটরির সাথে মিলছে না অথবা WIF প্রোভাইডার বন্ধ করা আছে।

ধাপ ৪ (ধাপ ১ ও ৬) আবার রান করুন এবং নিশ্চিত করুন যে ${GITHUB_REPOSITORY} যেন GitHub-এ আপনার owner/repo কেসিংয়ের সাথে হুবহু মেলে এবং –no-disabled প্রয়োগ করা হয়েছে।

HTTP 400 (টোকেন এক্সচেঞ্জে invalid_grant)

OIDC প্রোভাইডারে –issuer-uri ভুলভাবে ফর্ম্যাট করা হয়েছে বা attribute.repository=assertion.repository ম্যাপিং নেই।

কনফার্ম করুন যে –issuer-uri-এর মান https://token.actions.githubusercontent.com-এ সেট করা আছে (শেষে কোনও স্ল্যাশ নেই)।

সেট-আপ করার ঠিক পরেই অস্থায়ী HTTP 403

নতুন তৈরি করা বাইন্ডিংয়ে গ্লোবাল IAM ও ওয়ার্কলোড আইডেন্টিটি ফেডারেশন প্রোপাগেশন হতে ১–৫ মিনিট সময় লাগতে পারে।

১–২ মিনিট অপেক্ষা করুন এবং GitHub অ্যাকশনে ব্যর্থ হওয়া কাজ আবার চালান বিকল্পে ক্লিক করুন।

Cloud Shell-এ আপনার CI/CD পরিষেবা অ্যাকাউন্টে লাইভ ওয়ার্কলোড আইডেন্টিটি বাইন্ডিং চেক করতে, এটি রান করুন:

gcloud iam service-accounts get-iam-policy "${SERVICE_ACCOUNT_EMAIL}" \
 --project="${PROJECT_ID}" \
 --flatten="bindings[].members" \
 --filter="bindings.role=roles/iam.workloadIdentityUser"

কনফার্ম করুন যে আউটপুট roles/iam.workloadIdentityUser-কে principalSet://iam.googleapis.com/<POOL_ID>/attribute.repository/<GITHUB_USER>/<GITHUB_REPO>-এর সাথে বাইন্ড করে:

---
bindings:
 members: principalSet://iam.googleapis.com/.../attribute.repository/<OWNER>/<REPO>
 role: roles/iam.workloadIdentityUser

CI/CD প্রিফ্লাইট এবং CLI এক্সিট কোড সংক্রান্ত সমস্যার সমাধান করা

CodeMender কমান্ড (cm health --strict, cm find, cm verify এবং cm fix) নির্ধারক এক্সিট কোড রিটার্ন করে যাতে CI/CD পাইপলাইন সেট-আপ বা পরিষেবা সংক্রান্ত সমস্যা থেকে নিরাপত্তা সংক্রান্ত ফলাফল অবিলম্বে আলাদা করতে পারে:

এক্সিট কোড

বিভাগ

সাধারণ মূল কারণ ও প্রতিকার

0

সফল হয়েছে

হেল্থ চেক পাস করেছে বা স্ক্যান সম্পূর্ণ হয়েছে এবং কোনও ব্লকিং ফাইন্ডিং নেই।

1

ফাইন্ডিং / সাধারণ

–fail-on একটি PR-এ CRITICAL বা HIGH দুর্বলতা ব্লক করা শনাক্ত করেছে (প্রত্যাশিত মার্জ গেট ব্যর্থতা)।

10

credentials

WIF OAuth/ADC টোকেন এক্সচেঞ্জ করা যায়নি (400/401)। উপরে GCP_WORKLOAD_IDENTITY_PROVIDER, GCP_SERVICE_ACCOUNT এবং roles/iam.workloadIdentityUser বাইন্ডিং যাচাই করুন।

20

config

ভুলভাবে তৈরি করা .codemender/config.yaml বা ~/.codemender/config.yaml সিনট্যাক্স।

30

reachability

রানার aiplatform.googleapis.com-এ পৌঁছাতে পারছে না (DNS, প্রক্সি, পরিষেবা বিভ্রাট বা VPC Service Controls)।

40

authorization

টার্গেট প্রোজেক্টে সার্ভিস অ্যাকাউন্টে roles/aiplatform.user নেই অথবা cloudresourcemanager.googleapis.com / aiplatform.googleapis.com বন্ধ করা আছে।

50

timeout

প্রিফ্লাইট cm health চেক ৩০ সেকেন্ডের সময়সীমা অতিক্রম করেছে।

60

capacity

এজেন্ট তার কনকারেন্ট অ্যাক্টিভ-টাস্কের সীমায় পৌঁছে গেছে; অল্প কিছুক্ষণ পরে ওয়ার্কফ্লো আবার রান করান।

অতিরিক্ত রানটাইম সমস্যার জন্য—যেমন Git diff বেস ব্রাঞ্চ রেজোলিউশন (fetch-depth: 0), রিসোর্স প্রোপাগেশন সংক্রান্ত বিলম্ব বা GitHub অ্যাকশন পুল রিকোয়েস্ট তৈরি করার অনুমতি—অফিসিয়াল CodeMender CI/CD সমস্যার সমাধানকরণ গাইড দেখুন।

১১. রিসোর্স ক্লিন-আপ করা

আপনার Google Cloud এবং GitHub এনভায়রনমেন্টে রিসোর্স ব্যবহার করা বন্ধ করতে বা টেস্ট কনফিগারেশন মুছে ফেলতে, নিম্নলিখিত মুছে ফেলার ধাপগুলি অনুসরণ করুন।

ধাপ ১: GitHub রিপোজিটরি সিক্রেট সরিয়ে দিন এবং gh CLI-এর মাধ্যমে ওয়ার্কফ্লো বন্ধ করুন

রিপোজিটরি অ্যাকশন সিক্রেট মুছে ফেলতে এবং CodeMender ওয়ার্কফ্লো বন্ধ করতে GitHub CLI (gh) ব্যবহার করুন:

# Delete the repository Actions secrets
gh secret delete GCP_WORKLOAD_IDENTITY_PROVIDER --repo "${GITHUB_REPOSITORY}" 2>/dev/null || true
gh secret delete GCP_SERVICE_ACCOUNT --repo "${GITHUB_REPOSITORY}" 2>/dev/null || true

# Disable the CodeMender workflows to prevent unwanted automatic triggers
gh workflow disable codemender-scan.yml --repo "${GITHUB_REPOSITORY}" 2>/dev/null || true
gh workflow disable codemender-remediate.yml --repo "${GITHUB_REPOSITORY}" 2>/dev/null || true

ধাপ ২: Google Cloud Workload Identity Federation রিসোর্স বন্ধ বা মুছে দেওয়া

টোকেন এক্সচেঞ্জ না করার সময়, ওয়ার্কলোড আইডেন্টিটি পুল, পরিষেবা প্রদানকারী এবং পরিষেবা অ্যাকাউন্টের জন্য কোনও আইডল খরচ হয় না। আপনার ওয়ার্কফ্লোর সাথে মেলে এমন ক্লিন-আপ মোড বেছে নিন:

বিকল্প ক — অ্যাক্সেস পজ করা (এই প্রোজেক্টে আবার রান করার পরিকল্পনা থাকলে এটি সাজেস্ট করা হয়): Google Cloud IAM-এর ৩০-দিনের সফট-ডিলিট রিটেনশন বা পরিষেবা অ্যাকাউন্ট uniqueId প্রোপাগেশন বিলম্ব ট্রিগার না করেই অবিলম্বে OIDC টোকেন এক্সচেঞ্জ বন্ধ করে দেয়:

gcloud iam workload-identity-pools providers update-oidc "${WORKLOAD_IDENTITY_PROVIDER}" \
 --workload-identity-pool="${WORKLOAD_IDENTITY_POOL}" \
 --location="global" \
 --disabled \
 --project="${PROJECT_ID}"

বিকল্প খ — সম্পূর্ণ টিয়ারডাউন: WIF প্রোভাইডার, পুল (৩০ দিনের জন্য DELETED অবস্থায় রাখা হয়) এবং ডেডিকেটেড পরিষেবা অ্যাকাউন্ট মুছে দেয়:

# Delete Workload Identity Provider
gcloud iam workload-identity-pools providers delete "${WORKLOAD_IDENTITY_PROVIDER}" \
 --workload-identity-pool="${WORKLOAD_IDENTITY_POOL}" \
 --location="global" \
 --project="${PROJECT_ID}" \
 --quiet

# Delete Workload Identity Pool
gcloud iam workload-identity-pools delete "${WORKLOAD_IDENTITY_POOL}" \
 --location="global" \
 --project="${PROJECT_ID}" \
 --quiet

# Delete CI/CD Service Account
gcloud iam service-accounts delete "${SERVICE_ACCOUNT_EMAIL}" \
 --project="${PROJECT_ID}" \
 --quiet

১২. অভিনন্দন

অভিনন্দন! আপনি CodeMender-এর মাধ্যমে আপনার CI/CD পাইপলাইন সুরক্ষিত করুন কোডল্যাব সম্পূর্ণ করেছেন!

আপনি Google Cloud Workload Identity Federation, CodeMender এবং GitHub Actions ব্যবহার করে প্রোডাকশন-গ্রেড, জিরো-ট্রাস্ট DevSecOps পাইপলাইন সফলভাবে ডিজাইন, তৈরি এবং অটোমেট করেছেন।

আপনি কী কী কভার করেছেন

জিরো-ট্রাস্ট কীলেস যাচাইকরণ: ওয়ার্কলোড আইডেন্টিটি ফেডারেশন (WIF)-এর মাধ্যমে Google Cloud IAM-এ ক্ষণস্থায়ী GitHub OIDC টোকেন বাইন্ড করে ঝুঁকিপূর্ণ, দীর্ঘস্থায়ী পরিষেবা অ্যাকাউন্ট JSON কী বাদ দেওয়া হয়েছে।

PR ডিফারেনশিয়াল AST স্ক্যানিং ও লিগ্যাসি নয়েজ সাপ্রেশন: ডেভেলপার ফিডব্যাক লুপ ১৫ সেকেন্ডের কম রাখতে, লিগ্যাসি টেকনিক্যাল ডেট ([LEGACY / UNTOUCHED]) আলাদা করে, পরিবর্তিত ফাইল ও ডিপেন্ডেন্টের (--diff="origin/$BASE_REF") স্কোপড কন্টিনিউয়াস স্ক্যানিং।

মাল্টি-ফরম্যাট রিপোর্টিং এবং নেটিভ জব সামারি: CI ওয়ার্কফ্লো রান পৃষ্ঠায় সরাসরি তাৎক্ষণিক এক্সিকিউটিভ ভিজিবিলিটির জন্য নেটিভ Markdown (cm report -f md >> $GITHUB_STEP_SUMMARY) সহ সেন্ট্রালাইজড GitHub কোড স্ক্যানিংয়ের জন্য কম্বাইন্ড OASIS SARIF v2.1.0।

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

অটোমেটেড কোয়ালিটি হার্ড গেট: প্রোডাকশনে যাতে বিপজ্জনক দুর্বলতা কখনও না পৌঁছায়, তার জন্য কঠোর ব্রাঞ্চ প্রোটেকশন ও মার্জ গেটিং (--fail-on) এনফোর্স করা হয়েছে।

আর্টিফ্যাক্ট-চালিত স্টেট ট্রান্সফার এবং ওয়ার্কস্পেস আইসোলেশন: cm report import ব্যবহার করে CI জবের মধ্যে নির্বিঘ্নে ফলাফল ট্রান্সফার করা হয়েছে, যেখানে .git/info/exclude ব্যবহার করে Git ইতিহাসকে একদম নতুন অবস্থায় রাখা হয়েছে এবং ক্রেডেনশিয়াল ফাঁস হওয়া আটকানো হয়েছে।

ডেভেলপারের মানসিকতায় পরিবর্তন

প্রথাগত DevSecOps প্র্যাক্টিস

CodeMender অটোনোমাস CI/CD পাইপলাইন

প্যাসিভ অ্যালার্ট ডাম্পিং: স্ক্যানারগুলি কাঁচা টার্মিনাল লগ বা স্ট্যাটিক ত্রুটি তালিকা প্রিন্ট করে, ট্রায়াজ বোঝা সম্পূর্ণরূপে ডেভেলপারদের উপর স্থানান্তরিত করে।

অ্যাক্টিভ কো-ডেভেলপার: যাচাই করা কোড প্যাচ সিন্থেসাইজ করে এবং ইঞ্জিনিয়ারের সাইন-অফের জন্য মার্জ করার জন্য প্রস্তুত পুল রিকোয়েস্ট খোলে।

হাই ফলস পজিটিভ: স্ট্যাটিক AST হিউরিস্টিকস এক্সপ্লয়েট করার প্রমাণ ছাড়াই হাজার হাজার তাত্ত্বিক দুর্বলতা ফ্ল্যাগ করে।

২-টিয়ার এক্সপ্লয়েট যাচাইকরণ: ডায়নামিক স্যান্ডবক্স টেস্ট জেনারেশন (cm verify) প্রকৃত দুর্বলতা নিশ্চিত করে, ফলস পজিটিভ বাদ দেয়।

ঝুঁকিপূর্ণ সিক্রেট স্টোরেজ: CI সিক্রেটে স্টোর করা দীর্ঘস্থায়ী পরিষেবা অ্যাকাউন্ট JSON কীগুলি থেকে আকস্মিক লিক এবং ক্রেডেনশিয়াল স্প্রলের ঝুঁকি থাকে।

জিরো-ট্রাস্ট WIF: চাহিদা অনুযায়ী Google Cloud STS-এর সাথে এক্সচেঞ্জ করা ক্ষণস্থায়ী OIDC টোকেনের মাধ্যমে কীলেস যাচাইকরণ।

মনোলিথিক রিস্ক্যান: প্রতিটি কমিট সম্পূর্ণ-রিপোজিটরি অডিট ট্রিগার করে, CI ওয়ার্কফ্লোতে দেরি করে এবং মূল্যবান টোকেন নষ্ট করে।

ইভেন্ট-অ্যাওয়ার AST রাউটিং: পুল রিকোয়েস্ট ১৫-সেকেন্ডের ডিফারেনশিয়াল AST স্ক্যান (–diff) এক্সিকিউট করে, যেখানে ক্রন রান গভীর অডিট করে।

দূষিত রিপোজিটরি ইতিহাস: সাময়িক এক্সপ্লয়েট স্ক্রিপ্ট এবং অ্যাটাক লগ সরাসরি রিপোজিটরি ব্রাঞ্চে কমিট করা হয়েছে।

এন্টারপ্রাইজ Workspace হাইজিন: কোড কমিটকে বিশুদ্ধ রেখে PR বিবরণ এবং ওয়ার্কফ্লো আর্টিফ্যাক্টে অ্যাটাক এভিডেন্স পরিষ্কারভাবে এম্বেড করা হয়েছে।

পরবর্তী ধাপ

🚀 CodeMender-এর লার্নিং জার্নি চালিয়ে যান:

পার্ট ১: CodeMender-এর মাধ্যমে আপনার অ্যাপ্লিকেশন সুরক্ষিত করুন — অটোনোমাস রিপোজিটরি দুর্বলতা শনাক্তকরণ, PoC এক্সপ্লয়েট যাচাইকরণ এবং লোকাল প্যাচ সিন্থেসিস সম্পর্কে জানুন।

শিফ্ট লেফ্ট লোকালি এবং সার্ভারলেস ক্লাউড নেটিভ CI/CD: Google Cloud Build (cloudbuild.yaml) এবং লোকাল গিট প্রি-কমিট হুক (cm find . --diff --staged)-এর জন্য অফিসিয়াল CI/CD গাইডের রেফারেন্স ইমপ্লিমেন্টেশন এক্সপ্লোর করুন।

📖 ডকুমেন্টেশন ও রিসোর্স এক্সপ্লোর করুন:

অফিসিয়াল Google Cloud CodeMender CI/CD ইন্টিগ্রেশন গাইড

Google Cloud CodeMender-এর অফিসিয়াল ডকুমেন্টেশন

CodeMender GitHub অ্যাকশন স্টার্টার টেমপ্লেট রিপোজিটরি

Google Cloud Workload Identity Federation ডকুমেন্টেশন

💡 আপনার নিজের রিপোজিটরিতে প্রয়োগ করুন:

স্টার্টার ওয়ার্কফ্লো ফর্ক করুন এবং CodeMender-এর সাহায্যে আপনার সংস্থার Python, Go, Java, Rust ও Node.js রিপোজিটরি সুরক্ষিত করুন!