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 ડેવલપરને ખબર પડે તે પહેલાં પાંચ-આંકડાના બિલ ઊભા કરી ચૂકી છે. એજન્ટ કોડ ખાસ કરીને જોખમમાં હોય છે કારણ કે તે સામાન્ય રીતે એક સાથે અનેક પ્રોવાઇડર keys (OpenAI, Anthropic, Google) ધરાવે છે. આ પાઠના અંત સુધીમાં તમે તે keys ને સોર્સ કંટ્રોલની બહાર રાખી શકશો, python-dotenv વડે રનટાઇમ પર તેમને સુરક્ષિત રીતે લોડ કરી શકશો, અને જ્યારે કોઈ key ખૂટતી હોય ત્યારે સ્ટાર્ટઅપ પર જ ઝડપથી fail કરી શકશો.

મુખ્ય પરિભાષા

  • .env file — KEY=value જોડીઓની એક સાદી-ટેક્સ્ટ ફાઇલ જે વાસ્તવિક સિક્રેટ્સ ધરાવે છે; તે ડેવલપરના મશીન પર રહે છે અને Git માંથી બાકાત રાખવામાં આવે છે, જે keys ને ખાનગી રાખે છે.
  • .env.example — એ જ keys નું કમિટ કરેલું ટેમ્પલેટ જેમાં પ્લેસહોલ્ડર મૂલ્યો હોય છે; તે કોઈ વાસ્તવિક ક્રેડેન્શિયલ્સ ઉઘાડા પાડ્યા વિના દસ્તાવેજ કરે છે કે એજન્ટને કયા વેરિએબલ્સની જરૂર છે.
  • python-dotenv — એ લાઇબ્રેરી જે સ્ટાર્ટઅપ પર .env ફાઇલ વાંચે છે અને તેના મૂલ્યોને os.environ માં ઇન્જેક્ટ કરે છે જેથી એપ્લિકેશન કોડ તેમને os.getenv() વડે વાંચી શકે.
  • Startup validation — પ્રોગ્રામ લોન્ચ પર એક સ્પષ્ટ તપાસ કે દરેક જરૂરી વેરિએબલ હાજર છે; તે મૌન મિસકન્ફિગરેશનને તાત્કાલિક, ડીબગ કરી શકાય તેવી ભૂલમાં રૂપાંતરિત કરે છે.
  • Pydantic BaseSettings — એક ટાઇપ્ડ કન્ફિગરેશન કન્ટેનર જે .env માંથી વેરિએબલ્સ લોડ કરે છે, તેમને જાહેર કરેલા ટાઇપ્સમાં રૂપાંતરિત કરે છે, અને ઇન્સ્ટેન્શિયેશન સમયે ખૂટતા અથવા ખોટા ફોર્મેટવાળા મૂલ્યોને નકારી કાઢે છે.

વિભાવનાઓ

હાર્ડકોડ કરેલી keys શા માટે નિષ્ફળ જાય છે

સાર્વજનિક Git ઇતિહાસ કાયમી છે — ડિલીટ કરેલું કમિટ પણ reflog અને forks દ્વારા પહોંચી શકાય તેવું રહે છે. સ્કેનર બોટ્સ GitHub ના ઇવેન્ટ ફાયરહોઝ પર નજર રાખે છે અને દરેક લીક થયેલી key ને સેકન્ડોમાં અજમાવે છે. જે એજન્ટ્સ અનેક પ્રોવાઇડર keys ધરાવે છે, તેમના માટે એક લીક દરેક પ્રોવાઇડરને એક સાથે જોખમમાં મૂકે છે.

Loading diagram...

.env / .env.example નું વિભાજન

બે ફાઇલો, એક હેતુ: .env.example કમિટ થાય છે અને એજન્ટને જરૂરી દરેક વેરિએબલને પ્લેસહોલ્ડર મૂલ્યો સાથે સૂચિબદ્ધ કરે છે; .env gitignored હોય છે અને વાસ્તવિક સિક્રેટ્સ ધરાવે છે. નવા યોગદાનકર્તાઓ ટેમ્પલેટની નકલ કરે છે, પોતાની keys ભરે છે, અને git check-ignore .env કોઈ પણ કમિટ પહેલાં પુષ્ટિ કરે છે કે ફાઇલ બાકાત છે.

એક વાર લોડ કરો, સ્ટાર્ટઅપ પર વેલિડેટ કરો

python-dotenv .env ને os.environ માં વાંચે છે જેથી બાકીનો કોડ ફક્ત એન્વાયર્નમેન્ટ વેરિએબલ્સ જ જુએ — એ જ કોડ પાથ લોકલ, CI, અને પ્રોડક્શનમાં કામ કરે છે. લોડને સ્પષ્ટ જરૂરી-વેરિએબલ તપાસ સાથે જોડવાથી ખૂટતું કન્ફિગરેશન રિક્વેસ્ટની વચ્ચે ગૂંચવણભર્યા 401 ને બદલે બૂટ પર જ મોટેથી નિષ્ફળતા બની જાય છે (કોડ વૉકથ્રૂ જુઓ).

Pydantic સાથે ટાઇપ્ડ સેટિંગ્સ

મોટા એજન્ટ્સ માટે, pydantic_settings.BaseSettings ટાઇપ રૂપાંતર (int, float, bool), જરૂરી-ફીલ્ડ અમલ, અને એક જ cached Settings ઑબ્જેક્ટ ઉમેરે છે. તે છૂટાછવાયા os.getenv() કૉલ્સને એક વેલિડેટેડ ઑબ્જેક્ટથી બદલે છે જે કોઈ જરૂરી key ગેરહાજર અથવા ખોટા ફોર્મેટમાં હોય તો સ્ટાર્ટઅપ પર જ નિષ્ફળ જાય છે.

કોડ વૉકથ્રૂ

આ વૉકથ્રૂ ત્રણ રનટાઇમ વિભાવનાઓ — .env લોડ કરવું, જરૂરી keys વેલિડેટ કરવી, અને ટાઇપ્ડ સેટિંગ્સ ઑબ્જેક્ટ ઉઘાડું કરવું — ને એક સુસંગત પેટર્નમાં જોડે છે જેને તમારા એજન્ટનો એન્ટ્રી પોઇન્ટ 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()) વર્તમાન ડિરેક્ટરીથી ઉપર તરફ ચાલે છે જ્યાં સુધી તેને .env ન મળે, જેથી એ જ કોડ કોઈ પણ વર્કિંગ ડિરેક્ટરીમાંથી કામ કરે.
  • validate_environment() કોઈ પણ API કૉલ પહેલાં ચાલે છે; ખૂટતી key પછીથી 401 તરીકે નિષ્ફળ જવાને બદલે તરત જ fix-it સૂચન સાથે ભૂલ ઉઠાવે છે.
  • Settings દરેક વેરિએબલને તેના ટાઇપ અને જરૂરી/વૈકલ્પિક સ્થિતિ સાથે જાહેર કરે છે — Pydantic AGENT_MAX_ITERATIONS="10" ને આપમેળે int માં રૂપાંતરિત કરે છે અને જો કોઈ જરૂરી ફીલ્ડ ગેરહાજર હોય તો ઇન્સ્ટેન્શિયેટ કરવાનો ઇનકાર કરે છે.
  • get_settings() પર @lru_cache() બાકીના કોડબેઝને એક જ શેર કરેલું Settings ઇન્સ્ટન્સ આપે છે.

તમને ખબર પડશે કે તે કામ કરે છે જ્યારે સંપૂર્ણ .env સાથે સ્ક્રિપ્ટ ચલાવવાથી ડિફૉલ્ટ મોડેલ પ્રિન્ટ થાય, અને OPENAI_API_KEY દૂર કરીને ચલાવવાથી તે તરત જ "Missing required environment variables" ભૂલ સાથે બહાર નીકળી જાય — રનટાઇમ API નિષ્ફળતા સાથે નહીં.

માટે વ્યવહારમાં

ઉપરના વૉકથ્રૂ પર આધાર રાખીને, એ જ .env + વેલિડેશન + ટાઇપ્ડ-સેટિંગ્સ પેટર્ન નક્કી કરે છે કે દરેક શિસ્ત પોતાના સ્ટેકમાં સિક્રેટ્સ કેવી રીતે ગોઠવે છે.

શું કરવું અને શું ન કરવું

શું કરવું

  1. .env.example કમિટ કરો અને .env ને gitignore કરો — ટેમ્પલેટ Git ઇતિહાસમાં ક્યારેય વાસ્તવિક keys મૂક્યા વિના જરૂરી વેરિએબલ્સનું દસ્તાવેજીકરણ કરે છે.
  2. સ્ટાર્ટઅપ પર જરૂરી વેરિએબલ્સ વેલિડેટ કરો — ખૂટતા કન્ફિગરેશનને ડાઉનસ્ટ્રીમ 401 ને બદલે તાત્કાલિક, નામવાળી ભૂલ તરીકે સામે લાવો.
  3. કમિટને સ્પર્શતી કોઈ પણ key ને rotate કરો — force-push કરેલું લીક પણ reflog અને forks દ્વારા પહોંચી શકાય તેવું હોય છે; માની લો કે સ્કેનર્સ પાસે તે પહેલેથી જ છે.

શું ન કરવું

  1. "ફક્ત ઝડપી ટેસ્ટ માટે" keys હાર્ડકોડ ન કરો — સ્કેનર્સ લીક થયેલી keys સેકન્ડોમાં શોધી કાઢે છે, અને કમિટ revert કરવાથી તે un-leak થતી નથી.
  2. કોડમાં ઠેર-ઠેર તાત્કાલિક os.getenv() ન વાંચો — એક જ ટાઇપ્ડ સેટિંગ્સ ઑબ્જેક્ટ ટાઇપો અટકાવે છે અને વેલિડેશનને કેન્દ્રિત કરે છે.
  3. Slack અથવા ઇમેઇલ પર .env શેર ન કરો — સિક્રેટ્સ મેનેજર (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 →