Free lesson · GenAI Agent Engineering

ಸುರಕ್ಷಿತ API key ನಿರ್ವಹಣೆ

ನೀವು .env ಫೈಲ್‌ಗಳು + python-dotenv + .gitignore ಪ್ಯಾಟರ್ನ್‌ಗಳನ್ನು ಬಳಸಿ LLM API key ಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಸಂಗ್ರಹಿಸಬಹುದು, ಇದರಿಂದ ರಹಸ್ಯಗಳು (secrets) ಎಂದಿಗೂ version control ಗೆ ಪ್ರವೇಶಿಸುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.

Course: GenAI Agent Engineering · Chapter 1 · The Dev Environment

Free to read — no subscription required.

ಪರಿಚಯ

ನೀವು API ಕೀಯನ್ನು ಸೋರ್ಸ್‌ನಲ್ಲಿ ಹಾರ್ಡ್‌ಕೋಡ್ ಮಾಡಿ GitHub ಗೆ ಪುಶ್ ಮಾಡಿದಾಗ, ಸ್ವಯಂಚಾಲಿತ ಸ್ಕ್ಯಾನರ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ 30 ಸೆಕೆಂಡುಗಳೊಳಗೆ ಅದನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತವೆ — ಮತ್ತು ಒಂದೇ ಒಂದು ಸೋರಿಕೆಯಾದ LLM ಕೀ, ಡೆವಲಪರ್ ಗಮನಿಸುವ ಮೊದಲೇ ಐದು-ಅಂಕಿಯ ಬಿಲ್‌ಗಳನ್ನು ಉಂಟುಮಾಡಿದೆ. ಏಜೆಂಟ್ ಕೋಡ್ ವಿಶೇಷವಾಗಿ ಅಪಾಯಕ್ಕೆ ಒಡ್ಡಿಕೊಂಡಿರುತ್ತದೆ, ಏಕೆಂದರೆ ಅದು ಸಾಮಾನ್ಯವಾಗಿ ಹಲವು ಪ್ರೊವೈಡರ್ ಕೀಗಳನ್ನು (OpenAI, Anthropic, Google) ಒಂದೇ ಸಮಯದಲ್ಲಿ ಹೊಂದಿರುತ್ತದೆ. ಈ ಪಾಠದ ಕೊನೆಯಲ್ಲಿ, ನೀವು ಆ ಕೀಗಳನ್ನು ಸೋರ್ಸ್ ಕಂಟ್ರೋಲ್‌ನಿಂದ ಹೊರಗಿಡಲು, python-dotenv ಬಳಸಿ ರನ್‌ಟೈಮ್‌ನಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ಲೋಡ್ ಮಾಡಲು, ಮತ್ತು ಒಂದು ಕೀ ಕಾಣೆಯಾದಾಗ ಸ್ಟಾರ್ಟ್‌ಅಪ್‌ನಲ್ಲಿಯೇ ತಕ್ಷಣ ವಿಫಲಗೊಳಿಸಲು ಸಮರ್ಥರಾಗುತ್ತೀರಿ.

ಪ್ರಮುಖ ಪರಿಭಾಷೆ

  • .env ಫೈಲ್ — ನಿಜವಾದ ರಹಸ್ಯಗಳನ್ನು ಹೊಂದಿರುವ KEY=value ಜೋಡಿಗಳ ಸರಳ-ಪಠ್ಯ ಫೈಲ್; ಇದು ಡೆವಲಪರ್‌ನ ಯಂತ್ರದಲ್ಲಿ ಇರುತ್ತದೆ ಮತ್ತು Git ನಿಂದ ಹೊರಗಿಡಲಾಗಿರುತ್ತದೆ, ಇದೇ ಕೀಗಳನ್ನು ಖಾಸಗಿಯಾಗಿ ಇರಿಸುವುದು.
  • .env.example — ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಅದೇ ಕೀಗಳ ಕಮಿಟ್ ಮಾಡಲಾದ ಟೆಂಪ್ಲೇಟ್; ಯಾವುದೇ ನಿಜವಾದ ಕ್ರೆಡೆನ್ಶಿಯಲ್‌ಗಳನ್ನು ಬಹಿರಂಗಪಡಿಸದೆ ಏಜೆಂಟ್‌ಗೆ ಯಾವ ವೇರಿಯಬಲ್‌ಗಳು ಬೇಕು ಎಂಬುದನ್ನು ಇದು ದಾಖಲಿಸುತ್ತದೆ.
  • python-dotenv — ಸ್ಟಾರ್ಟ್‌ಅಪ್‌ನಲ್ಲಿ .env ಫೈಲ್ ಅನ್ನು ಓದಿ ಅದರ ಮೌಲ್ಯಗಳನ್ನು os.environ ಗೆ ಸೇರಿಸುವ ಲೈಬ್ರರಿ, ಇದರಿಂದ ಅಪ್ಲಿಕೇಶನ್ ಕೋಡ್ ಅವುಗಳನ್ನು os.getenv() ಮೂಲಕ ಓದಬಹುದು.
  • ಸ್ಟಾರ್ಟ್‌ಅಪ್ ವ್ಯಾಲಿಡೇಶನ್ — ಪ್ರೋಗ್ರಾಂ ಪ್ರಾರಂಭದಲ್ಲಿ ಪ್ರತಿ ಅಗತ್ಯ ವೇರಿಯಬಲ್ ಇದೆಯೇ ಎಂದು ಸ್ಪಷ್ಟವಾಗಿ ಪರಿಶೀಲಿಸುವುದು; ಇದು ಮೌನವಾದ ತಪ್ಪು-ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ತಕ್ಷಣದ, ಡೀಬಗ್ ಮಾಡಬಹುದಾದ ದೋಷವಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.
  • Pydantic BaseSettings — .env ನಿಂದ ವೇರಿಯಬಲ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ, ಘೋಷಿತ ಟೈಪ್‌ಗಳಿಗೆ ಪರಿವರ್ತಿಸಿ, ಮತ್ತು ಇನ್‌ಸ್ಟಾನ್ಶಿಯೇಶನ್ ಸಮಯದಲ್ಲಿ ಕಾಣೆಯಾದ ಅಥವಾ ತಪ್ಪಾದ ಮೌಲ್ಯಗಳನ್ನು ತಿರಸ್ಕರಿಸುವ ಟೈಪ್ ಮಾಡಿದ ಕಾನ್ಫಿಗರೇಶನ್ ಕಂಟೇನರ್.

ಪರಿಕಲ್ಪನೆಗಳು

ಹಾರ್ಡ್‌ಕೋಡ್ ಮಾಡಿದ ಕೀಗಳು ಏಕೆ ವಿಫಲವಾಗುತ್ತವೆ

ಸಾರ್ವಜನಿಕ Git ಇತಿಹಾಸ ಶಾಶ್ವತವಾದುದು — ಅಳಿಸಿದ ಕಮಿಟ್ ಕೂಡ reflog ಮತ್ತು ಫೋರ್ಕ್‌ಗಳ ಮೂಲಕ ತಲುಪಬಹುದಾಗಿರುತ್ತದೆ. ಸ್ಕ್ಯಾನರ್ ಬಾಟ್‌ಗಳು GitHub ನ ಈವೆಂಟ್ ಫೈರ್‌ಹೋಸ್ ಅನ್ನು ಗಮನಿಸುತ್ತಿರುತ್ತವೆ ಮತ್ತು ಸೋರಿಕೆಯಾದ ಪ್ರತಿ ಕೀಯನ್ನು ಸೆಕೆಂಡುಗಳೊಳಗೆ ಪ್ರಯತ್ನಿಸುತ್ತವೆ. ಹಲವು ಪ್ರೊವೈಡರ್ ಕೀಗಳನ್ನು ಹೊಂದಿರುವ ಏಜೆಂಟ್‌ಗಳಿಗೆ, ಒಂದು ಸೋರಿಕೆಯು ಎಲ್ಲಾ ಪ್ರೊವೈಡರ್‌ಗಳನ್ನು ಒಂದೇ ಬಾರಿಗೆ ಅಪಾಯಕ್ಕೆ ಸಿಲುಕಿಸುತ್ತದೆ.

Loading diagram...

.env / .env.example ವಿಭಜನೆ

ಎರಡು ಫೈಲ್‌ಗಳು, ಒಂದೇ ಉದ್ದೇಶ: .env.example ಕಮಿಟ್ ಮಾಡಲಾಗಿರುತ್ತದೆ ಮತ್ತು ಏಜೆಂಟ್‌ಗೆ ಬೇಕಾದ ಪ್ರತಿ ವೇರಿಯಬಲ್ ಅನ್ನು ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್ ಮೌಲ್ಯಗಳೊಂದಿಗೆ ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ; .env ಅನ್ನು gitignore ಮಾಡಲಾಗಿರುತ್ತದೆ ಮತ್ತು ಅದು ನಿಜವಾದ ರಹಸ್ಯಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಹೊಸ ಕಾಂಟ್ರಿಬ್ಯೂಟರ್‌ಗಳು ಟೆಂಪ್ಲೇಟ್ ಅನ್ನು ನಕಲಿಸಿ, ತಮ್ಮದೇ ಕೀಗಳನ್ನು ಭರ್ತಿ ಮಾಡುತ್ತಾರೆ, ಮತ್ತು ಯಾವುದೇ ಕಮಿಟ್‌ಗೆ ಮೊದಲು git check-ignore .env ಆ ಫೈಲ್ ಹೊರಗಿಡಲಾಗಿದೆ ಎಂದು ದೃಢೀಕರಿಸುತ್ತದೆ.

ಒಮ್ಮೆ ಲೋಡ್ ಮಾಡಿ, ಸ್ಟಾರ್ಟ್‌ಅಪ್‌ನಲ್ಲಿ ವ್ಯಾಲಿಡೇಟ್ ಮಾಡಿ

python-dotenv .env ಅನ್ನು os.environ ಗೆ ಓದುತ್ತದೆ, ಇದರಿಂದ ಉಳಿದ ಕೋಡ್ ಕೇವಲ ಎನ್ವಿರಾನ್‌ಮೆಂಟ್ ವೇರಿಯಬಲ್‌ಗಳನ್ನು ಮಾತ್ರ ನೋಡುತ್ತದೆ — ಅದೇ ಕೋಡ್ ಪಾತ್ ಸ್ಥಳೀಯವಾಗಿ, CI ಯಲ್ಲಿ, ಮತ್ತು ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಲೋಡ್ ಜೊತೆಗೆ ಸ್ಪಷ್ಟವಾದ ಅಗತ್ಯ-ವೇರಿಯಬಲ್ ಪರಿಶೀಲನೆಯನ್ನು ಜೋಡಿಸುವುದು, ಕಾಣೆಯಾದ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ವಿನಂತಿಯ ಮಧ್ಯದಲ್ಲಿ ಗೊಂದಲಮಯ 401 ಆಗುವ ಬದಲು ಬೂಟ್ ಸಮಯದಲ್ಲಿ ಸ್ಪಷ್ಟ ವೈಫಲ್ಯವಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ (ಕೋಡ್ ವಾಕ್‌ಥ್ರೂ ನೋಡಿ).

Pydantic ಜೊತೆ ಟೈಪ್ ಮಾಡಿದ ಸೆಟ್ಟಿಂಗ್‌ಗಳು

ದೊಡ್ಡ ಏಜೆಂಟ್‌ಗಳಿಗೆ, pydantic_settings.BaseSettings ಟೈಪ್ ಪರಿವರ್ತನೆ (int, float, bool), ಅಗತ್ಯ-ಫೀಲ್ಡ್ ಜಾರಿ, ಮತ್ತು ಒಂದೇ ಕ್ಯಾಶ್ ಮಾಡಿದ Settings ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಸೇರಿಸುತ್ತದೆ. ಇದು ಚದುರಿದ os.getenv() ಕರೆಗಳನ್ನು ಒಂದೇ ವ್ಯಾಲಿಡೇಟ್ ಮಾಡಿದ ಆಬ್ಜೆಕ್ಟ್‌ನಿಂದ ಬದಲಾಯಿಸುತ್ತದೆ, ಯಾವುದೇ ಅಗತ್ಯ ಕೀ ಇಲ್ಲದಿದ್ದರೆ ಅಥವಾ ತಪ್ಪಾಗಿದ್ದರೆ ಅದು ಸ್ಟಾರ್ಟ್‌ಅಪ್‌ನಲ್ಲಿಯೇ ವಿಫಲವಾಗುತ್ತದೆ.

ಕೋಡ್ ವಾಕ್‌ಥ್ರೂ

ಈ ವಾಕ್‌ಥ್ರೂ ಮೂರು ರನ್‌ಟೈಮ್ ಪರಿಕಲ್ಪನೆಗಳನ್ನು — .env ಲೋಡ್ ಮಾಡುವುದು, ಅಗತ್ಯ ಕೀಗಳನ್ನು ವ್ಯಾಲಿಡೇಟ್ ಮಾಡುವುದು, ಮತ್ತು ಟೈಪ್ ಮಾಡಿದ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಒದಗಿಸುವುದು — ನಿಮ್ಮ ಏಜೆಂಟ್‌ನ ಎಂಟ್ರಿ ಪಾಯಿಂಟ್ ಇಂಪೋರ್ಟ್ ಮಾಡಬಹುದಾದ ಒಂದು ಸುಸಂಬದ್ಧ ಪ್ಯಾಟರ್ನ್‌ನಲ್ಲಿ ಸಂಯೋಜಿಸುತ್ತದೆ.

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 ಕರೆಗೆ ಮೊದಲು ರನ್ ಆಗುತ್ತದೆ; ಕಾಣೆಯಾದ ಕೀ ನಂತರ 401 ಆಗಿ ವಿಫಲವಾಗುವ ಬದಲು, ಸರಿಪಡಿಸುವ ಸುಳಿವಿನೊಂದಿಗೆ ತಕ್ಷಣವೇ ದೋಷವನ್ನು ಎಸೆಯುತ್ತದೆ.
  • Settings ಪ್ರತಿ ವೇರಿಯಬಲ್ ಅನ್ನು ಅದರ ಟೈಪ್ ಮತ್ತು ಅಗತ್ಯ/ಐಚ್ಛಿಕ ಸ್ಥಿತಿಯೊಂದಿಗೆ ಘೋಷಿಸುತ್ತದೆ — Pydantic AGENT_MAX_ITERATIONS="10" ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ int ಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ ಮತ್ತು ಅಗತ್ಯ ಫೀಲ್ಡ್ ಇಲ್ಲದಿದ್ದರೆ ಇನ್‌ಸ್ಟಾನ್ಶಿಯೇಟ್ ಆಗಲು ನಿರಾಕರಿಸುತ್ತದೆ.
  • get_settings() ಮೇಲಿನ @lru_cache() ಉಳಿದ ಕೋಡ್‌ಬೇಸ್‌ಗೆ ಒಂದೇ ಹಂಚಿಕೊಂಡ Settings ಇನ್‌ಸ್ಟಾನ್ಸ್ ಅನ್ನು ನೀಡುತ್ತದೆ.

ಸಂಪೂರ್ಣ .env ಜೊತೆ ಸ್ಕ್ರಿಪ್ಟ್ ರನ್ ಮಾಡಿದಾಗ ಡೀಫಾಲ್ಟ್ ಮಾಡೆಲ್ ಪ್ರಿಂಟ್ ಆದರೆ, ಮತ್ತು OPENAI_API_KEY ತೆಗೆದು ರನ್ ಮಾಡಿದಾಗ ರನ್‌ಟೈಮ್ API ವೈಫಲ್ಯವಲ್ಲದೆ "Missing required environment variables" ದೋಷದೊಂದಿಗೆ ತಕ್ಷಣ ನಿರ್ಗಮಿಸಿದರೆ, ಅದು ಕೆಲಸ ಮಾಡುತ್ತಿದೆ ಎಂದು ನಿಮಗೆ ತಿಳಿಯುತ್ತದೆ.

ಗಾಗಿ ಪ್ರಾಯೋಗಿಕ ಅನ್ವಯ

ಮೇಲಿನ ವಾಕ್‌ಥ್ರೂ ಆಧಾರದ ಮೇಲೆ, ಅದೇ .env + ವ್ಯಾಲಿಡೇಶನ್ + ಟೈಪ್ ಮಾಡಿದ-ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಪ್ಯಾಟರ್ನ್, ಪ್ರತಿ ವಿಭಾಗವು ತನ್ನದೇ ಸ್ಟ್ಯಾಕ್‌ನಲ್ಲಿ ರಹಸ್ಯಗಳನ್ನು ಹೇಗೆ ಸಂಘಟಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ರೂಪಿಸುತ್ತದೆ.

ಮಾಡಬೇಕಾದವು ಮತ್ತು ಮಾಡಬಾರದವು

ಮಾಡಬೇಕಾದವು

  1. .env.example ಕಮಿಟ್ ಮಾಡಿ ಮತ್ತು .env ಅನ್ನು gitignore ಮಾಡಿ — ಟೆಂಪ್ಲೇಟ್ ನಿಜವಾದ ಕೀಗಳನ್ನು Git ಇತಿಹಾಸಕ್ಕೆ ಎಂದಿಗೂ ಸೇರಿಸದೆ ಅಗತ್ಯ ವೇರಿಯಬಲ್‌ಗಳನ್ನು ದಾಖಲಿಸುತ್ತದೆ.
  2. ಅಗತ್ಯ ವೇರಿಯಬಲ್‌ಗಳನ್ನು ಸ್ಟಾರ್ಟ್‌ಅಪ್‌ನಲ್ಲಿ ವ್ಯಾಲಿಡೇಟ್ ಮಾಡಿ — ಕಾಣೆಯಾದ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಡೌನ್‌ಸ್ಟ್ರೀಮ್ 401 ಆಗುವ ಬದಲು ತಕ್ಷಣದ, ಹೆಸರಿಸಲಾದ ದೋಷವಾಗಿ ತೋರಿಸಿ.
  3. ಕಮಿಟ್‌ಗೆ ಸೇರಿದ ಯಾವುದೇ ಕೀಯನ್ನು ರೊಟೇಟ್ ಮಾಡಿ — ಫೋರ್ಸ್-ಪುಶ್ ಮಾಡಿದ ಸೋರಿಕೆ ಕೂಡ reflog ಮತ್ತು ಫೋರ್ಕ್‌ಗಳ ಮೂಲಕ ತಲುಪಬಹುದಾಗಿರುತ್ತದೆ; ಸ್ಕ್ಯಾನರ್‌ಗಳು ಈಗಾಗಲೇ ಅದನ್ನು ಪಡೆದಿವೆ ಎಂದು ಭಾವಿಸಿ.

ಮಾಡಬಾರದವು

  1. "ಕೇವಲ ತ್ವರಿತ ಪರೀಕ್ಷೆಗಾಗಿ" ಎಂದು ಕೀಗಳನ್ನು ಹಾರ್ಡ್‌ಕೋಡ್ ಮಾಡಬೇಡಿ — ಸ್ಕ್ಯಾನರ್‌ಗಳು ಸೋರಿಕೆಯಾದ ಕೀಗಳನ್ನು ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಕಂಡುಹಿಡಿಯುತ್ತವೆ, ಮತ್ತು ಕಮಿಟ್ ಅನ್ನು ಹಿಂತೆಗೆದುಕೊಂಡರೂ ಸೋರಿಕೆ ರದ್ದಾಗುವುದಿಲ್ಲ.
  2. ಕೋಡ್‌ನಾದ್ಯಂತ os.getenv() ಅನ್ನು ಅಡ್-ಹಾಕ್ ಆಗಿ ಓದಬೇಡಿ — ಒಂದೇ ಟೈಪ್ ಮಾಡಿದ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಆಬ್ಜೆಕ್ಟ್ ಟೈಪೋಗಳನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ವ್ಯಾಲಿಡೇಶನ್ ಅನ್ನು ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ.
  3. .env ಅನ್ನು Slack ಅಥವಾ ಇಮೇಲ್ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಬೇಡಿ — ಸೀಕ್ರೆಟ್ಸ್ ಮ್ಯಾನೇಜರ್ (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 →