Free lesson · GenAI Agent Engineering
பாதுகாப்பான API key மேலாண்மை
நீங்கள் .env கோப்புகள் + python-dotenv + .gitignore வடிவங்களைப் பயன்படுத்தி LLM API keys-ஐ பாதுகாப்பாக சேமிக்க முடியும், இதனால் secrets ஒருபோதும் version control-க்குள் நுழையாது என்பதை உறுதிசெய்யலாம்.
Course: GenAI Agent Engineering · Chapter 1 · The Dev Environment
Free to read — no subscription required.
அறிமுகம்
ஒரு API key-ஐ மூலக் குறியீட்டில் நேரடியாக ஹார்ட்கோட் செய்து GitHub-க்கு push செய்தால், தானியங்கி ஸ்கேனர்கள் பொதுவாக 30 வினாடிகளுக்குள் அதைக் கண்டுபிடித்துவிடும் — மேலும் ஒரே ஒரு கசிந்த LLM key, டெவலப்பர் கவனிப்பதற்கு முன்பே ஐந்து இலக்க கட்டணப் பில்களை உருவாக்கியிருக்கிறது. ஏஜென்ட் குறியீடு குறிப்பாக அதிகம் ஆபத்தில் உள்ளது, ஏனெனில் அது வழக்கமாக பல வழங்குநர்களின் key-களை (OpenAI, Anthropic, Google) ஒரே நேரத்தில் கொண்டிருக்கும். இந்தப் பாடத்தின் முடிவில், அந்த key-களை source control-க்கு வெளியே வைக்கவும், python-dotenv மூலம் இயக்க நேரத்தில் அவற்றைப் பாதுகாப்பாக ஏற்றவும், ஒன்று இல்லாதபோது தொடக்கத்திலேயே விரைவாகத் தோல்வியடையச் செய்யவும் (fail fast) நீங்கள் முடியும்.
முக்கிய சொற்கள்
- .env file — உண்மையான ரகசியங்களைக் கொண்ட
KEY=valueஇணைகளின் எளிய உரைக் கோப்பு; இது டெவலப்பரின் கணினியில் இருக்கும் மற்றும் Git-இலிருந்து விலக்கப்பட்டிருக்கும், இதுவே key-களைத் தனிப்பட்டதாக வைத்திருக்கிறது. - .env.example — அதே key-களை placeholder மதிப்புகளுடன் கொண்ட, commit செய்யப்பட்ட ஒரு வார்ப்புரு (template); உண்மையான நற்சான்றுகள் எதையும் வெளிப்படுத்தாமல், ஏஜென்ட்டுக்கு எந்த மாறிகள் தேவை என்பதை இது ஆவணப்படுத்துகிறது.
- python-dotenv — தொடக்கத்தில் ஒரு
.envகோப்பைப் படித்து, அதன் மதிப்புகளைos.environ-இல் செலுத்தும் நூலகம்; இதனால் பயன்பாட்டுக் குறியீடுos.getenv()மூலம் அவற்றைப் படிக்க முடியும். - Startup validation — தேவையான ஒவ்வொரு மாறியும் இருக்கிறதா என்பதை நிரல் தொடங்கும்போது செய்யும் ஒரு வெளிப்படையான சோதனை; இது ஒரு அமைதியான தவறான உள்ளமைவை (misconfiguration) உடனடியான, பிழைதிருத்தக்கூடிய பிழையாக மாற்றுகிறது.
- Pydantic
BaseSettings—.env-இலிருந்து மாறிகளை ஏற்றி, அவற்றை அறிவிக்கப்பட்ட வகைகளுக்கு மாற்றி (coerce), உருவாக்கத்தின்போதே (instantiation) காணாமல் போன அல்லது தவறான வடிவ மதிப்புகளை நிராகரிக்கும் ஒரு வகை-அடிப்படையான (typed) உள்ளமைவுக் கொள்கலன்.
கருத்துகள்
ஹார்ட்கோட் செய்யப்பட்ட key-கள் ஏன் தோல்வியடைகின்றன
பொது Git வரலாறு நிரந்தரமானது — நீக்கப்பட்ட commit கூட reflog மற்றும் fork-கள் வழியாக அணுகக்கூடியதாகவே இருக்கும். ஸ்கேனர் bot-கள் GitHub-இன் நிகழ்வு ஓட்டத்தை (event firehose) கண்காணித்து, கசிந்த ஒவ்வொரு key-ஐயும் சில வினாடிகளுக்குள் முயற்சி செய்கின்றன. பல வழங்குநர் key-களைக் கொண்டிருக்கும் ஏஜென்ட்களுக்கு, ஒரு கசிவு எல்லா வழங்குநர்களையும் ஒரே நேரத்தில் பாதிக்கிறது.
.env / .env.example பிரிப்பு
இரண்டு கோப்புகள், ஒரே நோக்கம்: .env.example commit செய்யப்படுகிறது மற்றும் ஏஜென்ட்டுக்குத் தேவையான ஒவ்வொரு மாறியையும் placeholder மதிப்புகளுடன் பட்டியலிடுகிறது; .env gitignore செய்யப்பட்டு உண்மையான ரகசியங்களைக் கொண்டிருக்கிறது. புதிய பங்களிப்பாளர்கள் வார்ப்புருவை நகலெடுத்து, தங்களுடைய சொந்த key-களை நிரப்புகிறார்கள், மேலும் எந்த commit-க்கும் முன்பு கோப்பு விலக்கப்பட்டுள்ளதை git check-ignore .env உறுதிப்படுத்துகிறது.
ஒருமுறை ஏற்று, தொடக்கத்தில் சரிபார்
python-dotenv .env-ஐ os.environ-இல் படிக்கிறது, இதனால் மீதமுள்ள குறியீடு சூழல் மாறிகளை (environment variables) மட்டுமே பார்க்கிறது — அதே குறியீட்டுப் பாதை உள்ளூரிலும், CI-யிலும், production-இலும் வேலை செய்கிறது. இந்த ஏற்றுதலை, தேவையான மாறிகளுக்கான வெளிப்படையான சோதனையுடன் இணைப்பது, காணாமல் போன உள்ளமைவை ஒரு கோரிக்கையின் நடுவில் வரும் குழப்பமான 401-ஆக இல்லாமல், boot-இன்போதே ஒரு தெளிவான தோல்வியாக மாற்றுகிறது (குறியீடு விளக்கம் பார்க்கவும்).
Pydantic மூலம் வகை-அடிப்படையான அமைப்புகள்
பெரிய ஏஜென்ட்களுக்கு, pydantic_settings.BaseSettings வகை மாற்றம் (int, float, bool), தேவையான புலங்களின் கட்டாய அமலாக்கம், மற்றும் ஒரே ஒரு cache செய்யப்பட்ட Settings object-ஐச் சேர்க்கிறது. இது சிதறிக் கிடக்கும் os.getenv() அழைப்புகளுக்குப் பதிலாக, தேவையான எந்த key காணாமல் போனாலோ அல்லது தவறான வடிவத்தில் இருந்தாலோ தொடக்கத்திலேயே தோல்வியடையும் ஒரு சரிபார்க்கப்பட்ட object-ஐ வழங்குகிறது.
குறியீடு விளக்கம்
இந்த விளக்கம் மூன்று இயக்க நேரக் கருத்துகளை — .env-ஐ ஏற்றுவது, தேவையான key-களைச் சரிபார்ப்பது, மற்றும் ஒரு வகை-அடிப்படையான settings object-ஐ வெளிப்படுத்துவது — உங்கள் ஏஜென்ட்டின் நுழைவுப் புள்ளி import செய்யக்கூடிய ஒரே ஒருங்கிணைந்த வடிவமாக இணைக்கிறது.
Code snippetpython
1import os 2from functools import lru_cache 3from dotenv import load_dotenv, find_dotenv 4from pydantic_settings import BaseSettings 5from pydantic import Field 6 7load_dotenv(find_dotenv()) 8 9def validate_environment() -> None: 10 required = ["OPENAI_API_KEY", "ANTHROPIC_API_KEY"] 11 missing = [v for v in required if not os.getenv(v)] 12 if missing: 13 raise EnvironmentError( 14 f"Missing required environment variables: {', '.join(missing)}. " 15 f"Copy .env.example to .env and fill in your values." 16 ) 17 18class Settings(BaseSettings): 19 openai_api_key: str = Field(..., alias="OPENAI_API_KEY") 20 anthropic_api_key: str = Field(..., alias="ANTHROPIC_API_KEY") 21 default_model: str = Field("gpt-4o", alias="DEFAULT_MODEL") 22 max_iterations: int = Field(10, alias="AGENT_MAX_ITERATIONS") 23 24 class Config: 25 env_file = ".env" 26 case_sensitive = False 27 28@lru_cache() 29def get_settings() -> Settings: 30 return Settings() 31 32if __name__ == "__main__": 33 validate_environment() 34 settings = get_settings() 35 print(f"Loaded config, default model: {settings.default_model}")
load_dotenv(find_dotenv())தற்போதைய directory-இலிருந்து மேலே நோக்கி.env-ஐக் கண்டுபிடிக்கும் வரை தேடுகிறது, இதனால் அதே குறியீடு எந்த working directory-இலிருந்தும் வேலை செய்கிறது.validate_environment()எந்த API அழைப்புக்கும் முன்பு இயங்குகிறது; காணாமல் போன ஒரு key, பின்னர் 401-ஆகத் தோல்வியடைவதற்குப் பதிலாக, ஒரு சரிசெய்யும் குறிப்புடன் உடனடியாகப் பிழையை எழுப்புகிறது.Settingsஒவ்வொரு மாறியையும் அதன் வகை மற்றும் தேவையான/விருப்பத்தேர்வு நிலையுடன் அறிவிக்கிறது — PydanticAGENT_MAX_ITERATIONS="10"-ஐ தானாகவேint-ஆக மாற்றுகிறது, மேலும் தேவையான ஒரு புலம் இல்லாவிட்டால் உருவாக்க மறுக்கிறது.get_settings()-இல் உள்ள@lru_cache()மீதமுள்ள codebase-க்கு ஒரே பகிரப்பட்டSettingsinstance-ஐ வழங்குகிறது.
முழுமையான .env-உடன் script-ஐ இயக்கும்போது இயல்புநிலை மாடல் அச்சிடப்பட்டால், மற்றும் OPENAI_API_KEY நீக்கப்பட்ட நிலையில் இயக்கும்போது "Missing required environment variables" பிழையுடன் உடனடியாக வெளியேறினால் — இயக்க நேர API தோல்வியாக இல்லாமல் — அது வேலை செய்கிறது என்பதை நீங்கள் அறிந்துகொள்வீர்கள்.
-க்கான நடைமுறையில்
மேலே உள்ள விளக்கத்தை அடிப்படையாகக் கொண்டு, அதே .env + சரிபார்ப்பு + வகை-அடிப்படையான அமைப்புகள் வடிவம், ஒவ்வொரு துறையும் தனது சொந்த stack-இல் ரகசியங்களை எவ்வாறு ஒழுங்கமைக்கிறது என்பதை வடிவமைக்கிறது.
செய்ய வேண்டியவை மற்றும் செய்யக்கூடாதவை
செய்ய வேண்டியவை
.env.example-ஐ commit செய்து,.env-ஐ gitignore செய்யுங்கள் — உண்மையான key-களை Git வரலாற்றில் ஒருபோதும் வைக்காமல், தேவையான மாறிகளை வார்ப்புரு ஆவணப்படுத்துகிறது.- தேவையான மாறிகளைத் தொடக்கத்தில் சரிபாருங்கள் — காணாமல் போன உள்ளமைவை, பின்னர் வரும் 401-ஆக இல்லாமல், உடனடியான, பெயரிடப்பட்ட பிழையாக வெளிப்படுத்துங்கள்.
- ஒரு commit-ஐத் தொடும் எந்த key-ஐயும் சுழற்றுங்கள் (rotate) — force-push செய்யப்பட்ட கசிவு கூட reflog மற்றும் fork-கள் வழியாக அணுகக்கூடியது; ஸ்கேனர்களிடம் அது ஏற்கனவே இருக்கிறது என்று கருதுங்கள்.
செய்யக்கூடாதவை
- "ஒரு விரைவான சோதனைக்காக மட்டும்" என்று key-களை ஹார்ட்கோட் செய்யாதீர்கள் — ஸ்கேனர்கள் கசிந்த key-களை வினாடிகளில் கண்டுபிடிக்கின்றன, மேலும் commit-ஐத் திரும்பப் பெறுவது (revert) கசிவை நீக்காது.
- குறியீடு முழுவதும்
os.getenv()-ஐ தற்செயலாகப் படிக்காதீர்கள் — ஒரே ஒரு வகை-அடிப்படையான settings object எழுத்துப் பிழைகளைத் தடுக்கிறது மற்றும் சரிபார்ப்பை மையப்படுத்துகிறது. - ஒரு
.env-ஐ Slack அல்லது மின்னஞ்சல் வழியாகப் பகிராதீர்கள் — ஒரு secrets manager (1Password, Vault, GCP Secret Manager) பயன்படுத்துங்கள், இதனால் அணுகலை ஒவ்வொரு பயனருக்கும் தனித்தனியாக ரத்து செய்ய முடியும்.
A hands-on lab comes with this lesson — real code, in a cloud IDE. Create a free account to run it. No card.
Free account · no card · straight to the lab
Or get the full path — from
Listen to this lesson
Audio overviews of this lesson's labs and its chapter, from GenBodha Bytes.
- Implement secure API key management for LLM providersLab6 min
- The Dev EnvironmentChapter overview18 min