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-களைக் கொண்டிருக்கும் ஏஜென்ட்களுக்கு, ஒரு கசிவு எல்லா வழங்குநர்களையும் ஒரே நேரத்தில் பாதிக்கிறது.

Loading diagram...

.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 ஒவ்வொரு மாறியையும் அதன் வகை மற்றும் தேவையான/விருப்பத்தேர்வு நிலையுடன் அறிவிக்கிறது — Pydantic AGENT_MAX_ITERATIONS="10"-ஐ தானாகவே int-ஆக மாற்றுகிறது, மேலும் தேவையான ஒரு புலம் இல்லாவிட்டால் உருவாக்க மறுக்கிறது.
  • get_settings()-இல் உள்ள @lru_cache() மீதமுள்ள codebase-க்கு ஒரே பகிரப்பட்ட Settings instance-ஐ வழங்குகிறது.

முழுமையான .env-உடன் script-ஐ இயக்கும்போது இயல்புநிலை மாடல் அச்சிடப்பட்டால், மற்றும் OPENAI_API_KEY நீக்கப்பட்ட நிலையில் இயக்கும்போது "Missing required environment variables" பிழையுடன் உடனடியாக வெளியேறினால் — இயக்க நேர API தோல்வியாக இல்லாமல் — அது வேலை செய்கிறது என்பதை நீங்கள் அறிந்துகொள்வீர்கள்.

-க்கான நடைமுறையில்

மேலே உள்ள விளக்கத்தை அடிப்படையாகக் கொண்டு, அதே .env + சரிபார்ப்பு + வகை-அடிப்படையான அமைப்புகள் வடிவம், ஒவ்வொரு துறையும் தனது சொந்த stack-இல் ரகசியங்களை எவ்வாறு ஒழுங்கமைக்கிறது என்பதை வடிவமைக்கிறது.

செய்ய வேண்டியவை மற்றும் செய்யக்கூடாதவை

செய்ய வேண்டியவை

  1. .env.example-ஐ commit செய்து, .env-ஐ gitignore செய்யுங்கள் — உண்மையான key-களை Git வரலாற்றில் ஒருபோதும் வைக்காமல், தேவையான மாறிகளை வார்ப்புரு ஆவணப்படுத்துகிறது.
  2. தேவையான மாறிகளைத் தொடக்கத்தில் சரிபாருங்கள் — காணாமல் போன உள்ளமைவை, பின்னர் வரும் 401-ஆக இல்லாமல், உடனடியான, பெயரிடப்பட்ட பிழையாக வெளிப்படுத்துங்கள்.
  3. ஒரு commit-ஐத் தொடும் எந்த key-ஐயும் சுழற்றுங்கள் (rotate) — force-push செய்யப்பட்ட கசிவு கூட reflog மற்றும் fork-கள் வழியாக அணுகக்கூடியது; ஸ்கேனர்களிடம் அது ஏற்கனவே இருக்கிறது என்று கருதுங்கள்.

செய்யக்கூடாதவை

  1. "ஒரு விரைவான சோதனைக்காக மட்டும்" என்று key-களை ஹார்ட்கோட் செய்யாதீர்கள் — ஸ்கேனர்கள் கசிந்த key-களை வினாடிகளில் கண்டுபிடிக்கின்றன, மேலும் commit-ஐத் திரும்பப் பெறுவது (revert) கசிவை நீக்காது.
  2. குறியீடு முழுவதும் os.getenv()-ஐ தற்செயலாகப் படிக்காதீர்கள் — ஒரே ஒரு வகை-அடிப்படையான settings object எழுத்துப் பிழைகளைத் தடுக்கிறது மற்றும் சரிபார்ப்பை மையப்படுத்துகிறது.
  3. ஒரு .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.

More free lessons in GenAI Agent Engineering

All free lessons in GenAI Agent Engineering →