🎧 Listen to this article: हिंदी · English · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · 日本語 · 中文
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
சமீபத்தில், எனது release pipeline எனது release-ஐ வெளியிட மறுத்த ஒரு சூழ்நிலையை நான் எதிர்கொண்டேன். இந்தச் சம்பவம் எனது திட்டத்தைக் காப்பாற்றியது மட்டுமல்லாமல், ஒரு வலுவான release செயல்முறையைக் கொண்டிருப்பதன் முக்கியத்துவத்தையும் எடுத்துக்காட்டியது.
அந்தச் சம்பவம்
agentsec-ecosystem-ல் உள்ள agent-security கருவியின் ஒரு பகுதியான agentwatch என்ற எனது திட்டத்திற்கான ஒரு release-ஐ நான் தொடங்கினேன். release workflow செயல்படத் தொடங்கி, பல முக்கியமான பணிகளை மேற்கொண்டது:
- wheel-ஐ உருவாக்குதல்: எளிதாக நிறுவக்கூடிய ஒரு package-ஐ உருவாக்கும் செயல்முறை இதுவாகும்.
- Software Bill of Materials (SBOM)-ஐ உருவாக்குதல்: இந்த ஆவணம் மென்பொருளில் உள்ள அனைத்து கூறுகளையும் பட்டியலிடுகிறது, இது பாதுகாப்பு மற்றும் இணக்கத்திற்கு (compliance) முக்கியமானது.
- Checksum-களை எழுதுதல்: கோப்புகள் மாற்றப்படவில்லை என்பதை உறுதிப்படுத்துவதற்கான தனித்துவமான அடையாளங்காட்டிகள் (identifiers) இவை.
- Keyless Sigstore மூலம் அனைத்தையும் கையொப்பமிடுதல்: release-ன் நம்பகத்தன்மையைச் சரிபார்ப்பதன் மூலம் இது கூடுதல் பாதுகாப்பைச் சேர்க்கிறது.
இருப்பினும், வெளியிடுவதற்கு முன் release-ஐச் சரிபார்த்தல் என்ற அதன் கடைசி கட்டத்தில் workflow தோல்வியடைந்தது. எனக்குக் கிடைத்த பிழைச் செய்தி:
ModuleNotFoundError: No module named 'cryptography'
இந்தத் தோல்வி எனது GitHub release இடம்பெறவில்லை என்பதைக் குறித்தது, இது ஏமாற்றமளித்தாலும் இறுதியில் ஒரு நல்ல விஷயமாகும். கணினி வடிவமைக்கப்பட்டபடி செயல்பட்டதை இது காட்டியது.
இது ஏன் நடந்தது?
release package நிறுவப்பட்டு சரிபார்க்கப்பட வேண்டிய pipeline-ன் ஒரு கட்டத்தில் இந்தத் தோல்வி ஏற்பட்டது. தோல்வியடைந்த குறிப்பிட்ட command ஆனது agentwatch verify-release, இது ஒரு clean environment-லிருந்து உருவாக்கப்பட்ட artifacts-ஐச் சரிபார்க்கிறது. ஒரு artifact வெற்றிகரமாகச் சரிபார்க்கப்படாவிட்டால் அதை வெளியிட இந்த workflow மறுத்ததால், இதன் வடிவமைப்பு மிக முக்கியமானதாக இருந்தது.
இந்த நிகழ்வில், 'cryptography' என்ற விடுபட்ட module-லிருந்து இந்தப் பிழை ஏற்பட்டது. இது ஒரு optional extra-வாகக் கருதப்பட்டதால் release சூழலில் இந்த module நிறுவப்படவில்லை. code ஆனது import செய்ய முயன்றதே இந்தப் பிரச்சனைக்குக் காரணம்: InvalidSignature 'cryptography' module-லிருந்து top level-ல் அமைந்திருந்ததால், தேவைப்படாத போதும் அது load செய்யப்பட்டது என்பதை இது குறித்தது.
Release-ஐக் காப்பாற்றிய வடிவமைப்பு
எனது release workflow-ன் வடிவமைப்பு ஒரு முக்கியமான முன்நிபந்தனையைக் கொண்டிருந்தது: ஒருவேளை அந்த agentwatch verify-release command இயங்க முடியாவிட்டால், எதுவும் வெளியிடப்படாது. இந்த முடிவு சிக்கலாகியிருக்கக்கூடிய ஒரு release-ஐ தோல்வியடைந்த run-ஆக மாற்றியது, மேலும் பயனர்களைச் சென்றடைவதற்கு முன்பே இந்தச் சிக்கலைத் தீர்க்க என்னை வழிநடத்தியது.
பிழையின் traceback ஆனது import chain-தான் இதற்குக் காரணம் என்பதைக் காட்டியது. அடிப்படைச் செயல்பாடுகளுக்குத் தேவையில்லாத modules உட்பட அனைத்தையும் CLI தொடக்கத்திலேயே (startup) load செய்ய முயன்றதால் இந்தத் தோல்வி ஏற்பட்டது. இது மென்பொருள் உருவாக்கத்தில் ஒரு பொதுவான பிரச்சனையாகும், இதில் dependencies எதிர்பாராத சிக்கல்களை உருவாக்கக்கூடும்.
சிக்கலைச் சரிசெய்தல்
இந்தப் பிரச்சனைக்கான தீர்வு எளிமையானதாக இருந்தது. இதற்கான import statement-ஐ InvalidSignature உண்மையிலேயே அது தேவைப்பட்ட function-க்குள் நகர்த்தினேன். இதன் மூலம், function அழைக்கப்படும் போது மட்டுமே import நிகழ்கிறது, startup-ன் போது தேவையற்ற loading தவிர்க்கப்படுகிறது. இந்த மாற்றத்தின் எளிமைப்படுத்தப்பட்ட வடிவம் இதோ:
def _verify_signature(public: Any, alg: str, signing_input: bytes, signature: bytes) -> bool:
from cryptography.exceptions import InvalidSignature # lazy import
# rest of the function...
கையொப்பச் சரிபார்ப்பிற்கு (signature verification) குறிப்பாகத் தேவைப்பட்டால் தவிர, மற்ற நேரங்களில் 'cryptography' module தேவைப்படாமல் குறியீட்டின் மீதமுள்ள பகுதி இயங்குவதை இந்தச் சரிசெய்தல் உறுதிசெய்தது.
முடிவுரை
நன்கு வடிவமைக்கப்பட்ட release pipeline-ன் மதிப்பை இந்த அனுபவம் எனக்குக் கற்றுக் கொடுத்தது. இது deployment செயல்முறையை தானியக்கமாக்குவது மட்டுமல்லாமல், பாரம்பரிய சோதனை முறைகளில் நழுவக்கூடிய சிக்கல்களைக் கண்டறியும் ஒரு பாதுகாப்பு வலையாகவும் செயல்படுகிறது.
நன்மைகள்
- குறைபாடுள்ள release-களைத் தடுக்கிறது: சிக்கல்கள் பயனர்களைச் சென்றடைவதற்கு முன்பே அவற்றைக் கண்டறிகிறது.
- குறியீட்டின் தரத்தை மேம்படுத்துகிறது: சரிபார்ப்புகளைச் செயல்படுத்துவதன் மூலம் சிறந்த coding நடைமுறைகளை ஊக்குவிக்கிறது.
- நம்பகத்தன்மையை அதிகரிக்கிறது: release செயல்முறையின் மீது நம்பிக்கையை உருவாக்குகிறது.
குறைபாடுகள்
- ஆரம்ப அமைப்பின் சிக்கலான தன்மை: ஒரு வலுவான pipeline-ஐ வடிவமைப்பது அதிக நேரம் எடுக்கக்கூடும்.
- False positives ஏற்படுவதற்கான சாத்தியக்கூறு: சில நேரங்களில், கடுமையான சோதனைகள் காரணமாக சரியான release-கள் தடுக்கப்படலாம்.
எச்சரிக்கை
இந்தக் கட்டுரை கல்வி நோக்கங்களுக்கானது. உண்மையான சூழல்களில் ஏதேனும் placeholder மதிப்புகள் இருந்தால் அவை உண்மையான மதிப்புகளால் மாற்றப்பட வேண்டும். கூற்றுகளை நம்புவதற்கு முன் எப்போதும் அசல் ஆதாரங்களுடன் அவற்றைச் சரிபார்க்கவும்.
அடிக்கடி கேட்கப்படும் கேள்விகள்
- Release pipeline என்றால் என்ன? — Release pipeline என்பது மென்பொருளைத் தயார் செய்து deploy செய்யும் தானியங்கிப் படிகளின் வரிசையாகும்.
- Release pipeline ஏன் முக்கியமானது? — மென்பொருள் பயனர்களுக்கு வெளியிடப்படுவதற்கு முன்பே பிழைகள் மற்றும் தவறுகளைக் கண்டறிய இது உதவுகிறது, இதனால் தரம் மேம்படுகிறது.
- ModuleNotFoundError என்றால் என்ன? — தற்போதைய சூழலில் தேவையான module ஒன்று கிடைக்கவில்லை என்பதை இது குறிக்கிறது.
- ModuleNotFoundError-ஐ நான் எவ்வாறு சரிசெய்வது? — விடுபட்ட module உங்கள் சூழலில் நிறுவப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்.
- Software Bill of Materials (SBOM) என்றால் என்ன? — SBOM என்பது ஒரு மென்பொருள் தொகுப்பில் (package) உள்ள அனைத்து கூறுகளின் பட்டியலாகும், இது பாதுகாப்பு மற்றும் இணக்கத்திற்கு (compliance) பயனுள்ளதாக இருக்கும்.
- Keyless Sigstore என்றால் என்ன? — Keys-ஐ கைமுறையாக நிர்வகிக்க வேண்டிய அவசியமின்றி மென்பொருள் release-களில் கையொப்பமிடும் ஒரு முறை.
குறிச்சொற்கள்
#release #pipeline #software #development #automation #quality #security #testing
API Security Testing Checklist
A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.