എന്റെ റിലീസ് പൈപ്പ്‌ലൈൻ എന്റെ റിലീസ് ഷിപ്പ് ചെയ്യാൻ വിസമ്മതിച്ചു. അത് ശരിയായിരുന്നു.

എന്റെ റിലീസ് പൈപ്പ്‌ലൈൻ എന്റെ റിലീസ് ഷിപ്പ് ചെയ്യാൻ വിസമ്മതിച്ചു. അത് ശരിയായിരുന്നു.

അടുത്തിടെ, എന്റെ റിലീസ് പൈപ്പ്‌ലൈൻ എന്റെ റിലീസ് ഷിപ്പ് ചെയ്യാൻ വിസമ്മതിച്ച ഒരു സാഹചര്യം ഞാൻ നേരിട്ടു. ഈ സംഭവം എന്റെ പ്രോജക്റ്റിനെ രക്ഷിക്കുക മാത്രമല്ല, ശക്തമായ ഒരു റിലീസ് പ്രക്രിയ ഉണ്ടായിരിക്കേണ്ടതിന്റെ പ്രാധാന്യം എടുത്തുകാണിക്കുകയും ചെയ്തു.

ആ സംഭവം

agentsec-ecosystem-ത്തിലെ agent-security ടൂളിന്റെ ഭാഗമായ agentwatch എന്ന എന്റെ പ്രോജക്റ്റിനായി ഞാൻ ഒരു റിലീസ് ആരംഭിച്ചു. റിലീസ് വർക്ക്‌ഫ്ലോ പ്രവർത്തനക്ഷമമാവുകയും നിർണായകമായ നിരവധി ജോലികൾ നിർവഹിക്കുകയും ചെയ്തു:

  1. wheel നിർമ്മിക്കൽ: എളുപ്പത്തിൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ കഴിയുന്ന ഒരു പാക്കേജ് നിർമ്മിക്കുന്ന പ്രക്രിയയാണിത്.
  2. Software Bill of Materials (SBOM) തയ്യാറാക്കൽ: ഈ പ്രമാണം സോഫ്റ്റ്‌വെയറിലെ എല്ലാ ഘടകങ്ങളെയും ലിസ്റ്റ് ചെയ്യുന്നു, ഇത് സുരക്ഷയ്ക്കും കംപ്ലയൻസിനും പ്രധാനമാണ്.
  3. checksums എഴുതൽ: ഫയലുകളിൽ മാറ്റങ്ങൾ വരുത്തിയിട്ടില്ലെന്ന് ഉറപ്പാക്കാനുള്ള യുണീക്ക് ഐഡന്റിഫയറുകളാണ് ഇവ.
  4. keyless Sigstore ഉപയോഗിച്ച് എല്ലാം സൈൻ ചെയ്യൽ: റിലീസിന്റെ ആധികാരികത പരിശോധിച്ച് ഉറപ്പുവരുത്തുന്നതിലൂടെ ഇത് ഒരു അധിക സുരക്ഷ നൽകുന്നു.

എന്നിരുന്നാലും, വർക്ക്‌ഫ്ലോ അതിന്റെ അവസാന ഘട്ടത്തിൽ പരാജയപ്പെട്ടു: പ്രസിദ്ധീകരിക്കുന്നതിന് മുമ്പ് റിലീസ് പരിശോധിച്ചുറപ്പിക്കൽ. എനിക്ക് ലഭിച്ച എറർ മെസ്സേജ് ഇതായിരുന്നു:

ModuleNotFoundError: No module named 'cryptography'

ഈ പരാജയം കാരണം എന്റെ GitHub റിലീസ് നടന്നില്ല, ഇത് നിരാശാജനകമായിരുന്നുവെങ്കിലും ആത്യന്തികമായി ഒരു നല്ല കാര്യമായിരുന്നു. സിസ്റ്റം രൂപകൽപ്പന ചെയ്തതുപോലെ തന്നെ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഇത് കാണിച്ചു.

എന്തുകൊണ്ടാണ് ഇത് സംഭവിച്ചത്?

റിലീസ് പാക്കേജ് ഇൻസ്റ്റാൾ ചെയ്ത് പരിശോധിക്കേണ്ടിയിരുന്ന പൈപ്പ്‌ലൈനിലെ ഒരു ഘട്ടത്തിലാണ് ഈ പരാജയം സംഭവിച്ചത്. പരാജയപ്പെട്ട നിർദ്ദിഷ്ട കമാൻഡ് agentwatch verify-release, ഇത് ഒരു ക്ലീൻ എൻവയോൺമെന്റിൽ നിന്ന് നിർമ്മിച്ച ആർട്ടിഫാക്റ്റുകൾ പരിശോധിക്കുന്നു. വിജയകരമായി പരിശോധിച്ചുറപ്പിക്കാൻ കഴിഞ്ഞില്ലെങ്കിൽ ഒരു ആർട്ടിഫാക്റ്റും പ്രസിദ്ധീകരിക്കാൻ തയ്യാറായില്ല എന്നതിനാൽ ഈ വർക്ക്‌ഫ്ലോയുടെ ഡിസൈൻ നിർണായകമായിരുന്നു.

ഈ സാഹചര്യത്തിൽ, 'cryptography' എന്ന മിസ്സിംഗ് മൊഡ്യൂളിൽ നിന്നാണ് ഈ പിശക് ഉണ്ടായത്. ഒരു ഓപ്ഷണൽ എക്സ്ട്രയായി കണക്കാക്കപ്പെട്ടിരുന്നതിനാൽ ഈ മൊഡ്യൂൾ റിലീസ് എൻവയോൺമെന്റിൽ ഇൻസ്റ്റാൾ ചെയ്തിരുന്നില്ല. കോഡ് ഇംപോർട്ട് ചെയ്യാൻ ശ്രമിച്ചപ്പോഴാണ് പ്രശ്നം ഉണ്ടായത് InvalidSignature 'cryptography' മൊഡ്യൂളിൽ നിന്ന് ടോപ്പ് ലെവലിൽ, അതായത് ആവശ്യമില്ലാത്തപ്പോൾ പോലും അത് ലോഡ് ചെയ്യപ്പെട്ടു എന്നതായിരുന്നു ഇതിനർത്ഥം.

റിലീസിനെ രക്ഷിച്ച ഡിസൈൻ

എന്റെ റിലീസ് വർക്ക്‌ഫ്ലോയുടെ ഡിസൈനിൽ നിർണായകമായ ഒരു മുൻവ്യവസ്ഥ ഉണ്ടായിരുന്നു: അതായത് agentwatch verify-release കമാൻഡ് പ്രവർത്തിപ്പിക്കാൻ കഴിഞ്ഞില്ലെങ്കിൽ, ഒന്നും ഷിപ്പ് ചെയ്യില്ല. പ്രശ്നമുണ്ടാക്കാമായിരുന്ന ഒരു റിലീസിനെ പരാജയപ്പെട്ട ഒരു റണ്ണാക്കി മാറ്റാൻ ഈ തീരുമാനം സഹായിച്ചു, ഇത് ഉപയോക്താക്കളിലേക്ക് എത്തുന്നതിന് മുമ്പ് തന്നെ പ്രശ്നം പരിഹരിക്കാൻ എന്നെ പ്രേരിപ്പിച്ചു.

ഇംപോർട്ട് ചെയിനാണ് ഇതിന് കാരണമെന്ന് എററിന്റെ ട്രേസ്ബാക്ക് വ്യക്തമാക്കി. അടിസ്ഥാന പ്രവർത്തനങ്ങൾക്ക് ആവശ്യമില്ലാത്ത മൊഡ്യൂളുകൾ ഉൾപ്പെടെ എല്ലാം സ്റ്റാർട്ടപ്പിൽ തന്നെ ലോഡ് ചെയ്യാൻ CLI ശ്രമിച്ചതിനാലാണ് ഈ പരാജയം സംഭവിച്ചത്. ഡിപൻഡൻസികൾ അപ്രതീക്ഷിത പ്രശ്നങ്ങൾ സൃഷ്ടിക്കുന്ന സോഫ്റ്റ്‌വെയർ ഡെവലപ്‌മെന്റിലെ ഒരു സാധാരണ പ്രശ്നമാണിത്.

പ്രശ്നം പരിഹരിക്കൽ

ഈ പ്രശ്നത്തിനുള്ള പരിഹാരം ലളിതമായിരുന്നു. ഇതിനായുള്ള ഇംപോർട്ട് സ്റ്റേറ്റ്‌മെന്റ് ഞാൻ InvalidSignature യഥാർത്ഥത്തിൽ ആവശ്യമുള്ള ഫംഗ്ഷനുള്ളിലേക്ക് മാറ്റി. ഇതുവഴി, ഫംഗ്ഷൻ കോൾ ചെയ്യപ്പെടുമ്പോൾ മാത്രമേ ഇംപോർട്ട് നടക്കൂ, ഇത് സ്റ്റാർട്ടപ്പിലെ അനാവശ്യ ലോഡിംഗ് ഒഴിവാക്കുന്നു. വരുത്തിയ മാറ്റത്തിന്റെ ലളിതമായ ഒരു പതിപ്പ് ഇതാ:

def _verify_signature(public: Any, alg: str, signing_input: bytes, signature: bytes) -> bool:
    from cryptography.exceptions import InvalidSignature  # lazy import
    # rest of the function...

സിഗ്നേച്ചർ പരിശോധനയ്ക്ക് പ്രത്യേകമായി ആവശ്യമില്ലാത്ത പക്ഷം, 'cryptography' മൊഡ്യൂളിന്റെ ആവശ്യമില്ലാതെ തന്നെ ബാക്കി കോഡിന് പ്രവർത്തിക്കാൻ കഴിയുമെന്ന് ഈ മാറ്റം ഉറപ്പാക്കി.

ഉപസംഹാരം

നന്നായി രൂപകൽപ്പന ചെയ്ത ഒരു റിലീസ് പൈപ്പ്‌ലൈനിന്റെ പ്രാധാന്യം ഈ അനുഭവം എന്നെ പഠിപ്പിച്ചു. ഇത് ഡിപ്ലോയ്‌മെന്റ് പ്രക്രിയ ഓട്ടോമേറ്റ് ചെയ്യുക മാത്രമല്ല, പരമ്പരാഗത ടെസ്റ്റിംഗ് രീതികളിൽ നിന്ന് വിട്ടുപോയേക്കാവുന്ന പ്രശ്നങ്ങൾ കണ്ടെത്തുന്ന ഒരു സുരക്ഷാ വലയമായി പ്രവർത്തിക്കുകയും ചെയ്യുന്നു.

നേട്ടങ്ങൾ

  • തകരാറുകളുള്ള റിലീസുകൾ തടയുന്നു: പ്രശ്നങ്ങൾ ഉപയോക്താക്കളിലേക്ക് എത്തുന്നതിന് മുമ്പ് തന്നെ കണ്ടെത്തുന്നു.
  • കോഡ് ഗുണനിലവാരം മെച്ചപ്പെടുത്തുന്നു: പരിശോധനകൾ കർശനമാക്കുന്നതിലൂടെ മികച്ച കോഡിംഗ് രീതികളെ പ്രോത്സാഹിപ്പിക്കുന്നു.
  • വിശ്വാസ്യത വർദ്ധിപ്പിക്കുന്നു: റിലീസ് പ്രക്രിയയിലുള്ള വിശ്വാസം വർദ്ധിപ്പിക്കുന്നു.

പോരായ്മകൾ

  • പ്രാരംഭ സജ്ജീകരണത്തിലെ സങ്കീർണ്ണത: ശക്തമായ ഒരു പൈപ്പ്‌ലൈൻ രൂപകൽപ്പന ചെയ്യുന്നത് കൂടുതൽ സമയമെടുക്കുന്ന ഒന്നായിരിക്കാം.
  • ഫോൾസ് പോസിറ്റീവുകൾ വരാനുള്ള സാധ്യത: ചിലപ്പോൾ, കർശനമായ പരിശോധനകൾ കാരണം സാധുവായ റിലീസുകൾ പോലും തടയപ്പെട്ടേക്കാം.

ജാഗ്രത

ഈ ലേഖനം വിദ്യാഭ്യാസപരമായ ആവശ്യങ്ങൾക്കുള്ളതാണ്. യഥാർത്ഥ സാഹചര്യങ്ങളിൽ പ്ലേസ്‌ഹോൾഡർ മൂല്യങ്ങൾക്ക് പകരം യഥാർത്ഥ മൂല്യങ്ങൾ നൽകണം. അവയെ ആശ്രയിക്കുന്നതിന് മുമ്പ് എല്ലായ്പ്പോഴും യഥാർത്ഥ ഉറവിടങ്ങളുമായി വിവരങ്ങൾ ഒത്തുനോക്കി ഉറപ്പുവരുത്തുക.

പതിവായി ചോദിക്കുന്ന ചോദ്യങ്ങൾ

  • എന്താണ് ഒരു റിലീസ് പൈപ്പ്‌ലൈൻ? — സോഫ്റ്റ്‌വെയർ തയ്യാറാക്കുകയും ഡിപ്ലോയ് ചെയ്യുകയും ചെയ്യുന്ന ഓട്ടോമേറ്റഡ് ഘട്ടങ്ങളുടെ ഒരു ശ്രേണിയാണ് റിലീസ് പൈപ്പ്‌ലൈൻ.
  • എന്തുകൊണ്ടാണ് ഒരു റിലീസ് പൈപ്പ്‌ലൈൻ പ്രധാനമായിരിക്കുന്നത്? — സോഫ്റ്റ്‌വെയർ ഉപയോക്താക്കൾക്ക് റിലീസ് ചെയ്യുന്നതിന് മുമ്പ് തന്നെ ബഗുകളും എററുകളും കണ്ടെത്താൻ ഇത് സഹായിക്കുന്നു, ഇത് ഗുണനിലവാരം മെച്ചപ്പെടുത്തുന്നു.
  • ModuleNotFoundError എന്നാൽ എന്താണ് അർത്ഥമാക്കുന്നത്? — നിലവിലെ എൻവയോൺമെന്റിൽ ആവശ്യമായ ഒരു മൊഡ്യൂൾ ലഭ്യമല്ലെന്നാണ് ഇത് സൂചിപ്പിക്കുന്നത്.
  • എനിക്ക് എങ്ങനെ ഒരു ModuleNotFoundError പരിഹരിക്കാം? — മിസ്സിംഗ് ആയ മൊഡ്യൂൾ നിങ്ങളുടെ എൻവയോൺമെന്റിൽ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.
  • എന്താണ് Software Bill of Materials (SBOM)? — ഒരു സോഫ്റ്റ്‌വെയർ പാക്കേജിലെ എല്ലാ ഘടകങ്ങളുടെയും പട്ടികയാണ് SBOM, ഇത് സുരക്ഷയ്ക്കും കംപ്ലയൻസിനും ഉപയോഗപ്രദമാണ്.
  • എന്താണ് keyless Sigstore? — കീകൾ മാനുവലായി കൈകാര്യം ചെയ്യാതെ തന്നെ സോഫ്റ്റ്‌വെയർ റിലീസുകൾ സൈൻ ചെയ്യുന്നതിനുള്ള ഒരു രീതിയാണിത്.

ടാഗുകൾ

#release #pipeline #software #development #automation #quality #security #testing

Free field guide

API Security Testing Checklist

A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.