Tips & Tricks (अपडेट: 1/6/2026)

Claude Code सुरक्षा सर्वोत्तम प्रथाएं: API कुंजी, अनुमतियां और प्रोडक्शन सुरक्षा

Claude Code सुरक्षा: API कुंजी, permissions, secrets, commit scan और production protection के व्यावहारिक उपाय।

Claude Code सुरक्षा सर्वोत्तम प्रथाएं: API कुंजी, अनुमतियां और प्रोडक्शन सुरक्षा

Claude Code में शक्तिशाली फ़ाइल हेरफेर और कमांड निष्पादन क्षमताएं हैं — लेकिन गलत कॉन्फ़िगरेशन से अपरिवर्तनीय दुर्घटनाएं हो सकती हैं.env फ़ाइल को commit करना, प्रोडक्शन डेटाबेस को गलती से डिलीट करना, API कुंजी को logs में प्रिंट करना — ये सभी वास्तविक घटनाएं हैं जो Claude Code को उचित सुरक्षा के बिना उपयोग करने के कारण हुईं।

यह लेख Claude Code के लिए सुरक्षा सर्वोत्तम प्रथाओं की कार्यान्वयन-स्तर की व्याख्या प्रदान करता है। सिद्धांत के बजाय, ध्यान उपयोग के लिए तैयार कॉन्फ़िगरेशन और निवारक कोड पर है जिसे आप तुरंत कॉपी और लागू कर सकते हैं।

Claude Code को सुरक्षा उपायों की आवश्यकता क्यों है

एक सामान्य टेक्स्ट एडिटर के विपरीत, Claude Code में निम्नलिखित क्षमताएं हैं:

  • किसी भी फ़ाइल को पढ़ना, लिखना और हटाना (Read / Write / Edit / Bash(rm))
  • Shell कमांड निष्पादित करना (Bash)
  • नेटवर्क एक्सेस (WebFetch / API कॉल)
  • बाहरी सेवाओं पर पोस्ट करना (GitHub, Slack, आदि)

ये सभी उपयोगकर्ता की मंजूरी से निष्पादित हो सकते हैं। समस्या यह है कि हर prompt को यांत्रिक रूप से मंजूर करने से अनपेक्षित संचालन छूट जाते हैं। सुरक्षा उपायों का अर्थ है संरचनात्मक रूप से त्रुटि की गुंजाइश को समाप्त करना

उपाय 1: API कुंजी प्रबंधन — .env + .gitignore आधार के रूप में

क्या नहीं करना चाहिए

// ❌ सोर्स कोड में सीधे लिखा
const client = new Anthropic({ apiKey: "PASTE_REAL_API_KEY_HERE" });

// ❌ CLAUDE.md या कॉन्फ़िग फ़ाइलों में लिखा
// ANTHROPIC_API_KEY=PASTE_REAL_API_KEY_HERE

// ❌ claude -p prompt में शामिल
// QIITA_TOKEN=PASTE_REAL_TOKEN_HERE का उपयोग करके पोस्ट करें

सही दृष्टिकोण

# .env (git से बाहर, केवल स्थानीय मशीन पर संग्रहीत)
ANTHROPIC_API_KEY=<anthropic-api-key>
QIITA_TOKEN=<qiita-token>
SLACK_BOT_TOKEN=<slack-bot-token>
DATABASE_URL=postgresql://...
# हमेशा .gitignore में जोड़ें
.env
.env.*
.env.local
!.env.example   # ← उदाहरण फ़ाइल commit की जा सकती है
*.pem
*.key
credentials.json
*-service-account.json
# .env.example (commit करना सुरक्षित, मान खाली छोड़ें)
ANTHROPIC_API_KEY=
QIITA_TOKEN=
SLACK_BOT_TOKEN=
DATABASE_URL=

कोड में वेरिएबल पढ़ना

// ✅ Environment variables से पढ़ें
import { config } from "dotenv";
config();

const token = process.env.QIITA_TOKEN;
if (!token) throw new Error("QIITA_TOKEN सेट नहीं है। कृपया अपनी .env फ़ाइल जांचें।");

CLAUDE.md में निषेध दस्तावेज़ करें

## सुरक्षा निषेध
- prompts में API कुंजियां या tokens कभी न शामिल करें
- .env फ़ाइलों की सामग्री कभी न पढ़ें और आउटपुट न करें
- logs या comments में environment variable मान कभी न लिखें
- process.env की सामग्री को कभी console.log न करें

उपाय 2: Commit से पहले Secret स्कैनिंग

.env को .gitignore में रखने के बाद भी, अन्य फ़ाइलों में गलती से प्रविष्टियां या copy-paste त्रुटियां हो सकती हैं। एक स्वचालित pre-commit स्कैन जोड़ें।

Hooks के साथ Pre-Commit जांच

.claude/settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash(git commit*)",
        "hooks": [
          {
            "type": "command",
            "command": "node scripts/secret-scan.mjs"
          }
        ]
      }
    ]
  }
}

scripts/secret-scan.mjs:

import { execSync } from "child_process";

// Staged परिवर्तन प्राप्त करें
const diff = execSync("git diff --cached").toString();

const PATTERNS = [
  { name: "Anthropic API कुंजी assignment", re: /\b(?:ANTHROPIC_API_KEY|CLAUDE_API_KEY)\s*[:=]\s*["']?[^"'\s]{20,}/i },
  { name: "OpenAI API कुंजी assignment", re: /\bOPENAI_API_KEY\s*[:=]\s*["']?[^"'\s]{20,}/i },
  { name: "AWS Access Key", re: /\bAKIA[0-9A-Z]{16}\b/ },
  { name: "Slack Token", re: /\bxox[baprs]-[0-9A-Za-z-]{10,}\b/ },
  { name: "Generic Secret", re: /\b(?:secret|token|api[_-]?key|password)\s*[:=]\s*["'][^"']{10,}["']/i },
];

const found = PATTERNS.filter(({ re }) => re.test(diff));

if (found.length > 0) {
  console.error("🚨 Secret मिला! Commit रोका जा रहा है:");
  found.forEach(({ name }) => console.error(`  - ${name}`));
  console.error("\nसमाधान: फ़ाइल को unstage करने के लिए `git reset HEAD <file>` चलाएं");
  process.exit(1);  // Exit code 1 → Hook कमांड को ब्लॉक करता है
}

console.log("✓ Secret स्कैन: कोई समस्या नहीं मिली");
process.exit(0);

इसका मतलब है कि जैसे ही Claude Code git commit चलाने की कोशिश करता है, स्वचालित स्कैन शुरू होता है और किसी भी रिसाव का पता चलने पर उसे ब्लॉक कर दिया जाता है।

उपाय 3: Permission Mode कॉन्फ़िगरेशन

Claude Code की अनुमति/अस्वीकार सेटिंग्स को फ़ाइल स्तर पर विस्तृत रूप से नियंत्रित किया जा सकता है।

.claude/settings.json में Permission सेटिंग्स

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "defaultMode": "default",
    "disableBypassPermissionsMode": "disable",
    "allow": [
      "Read(**)",
      "Glob(**)",
      "Grep(**)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(rm -rf*)",
      "Bash(git push --force*)",
      "Bash(git reset --hard*)",
      "Bash(DROP TABLE*)",
      "Bash(truncate*)",
      "Bash(curl * | bash)",
      "Bash(wget * | sh)"
    ],
    "ask": [
      "Write(**)",
      "Edit(**)",
      "Bash(git commit*)",
      "Bash(git push*)",
      "Bash(npm publish*)",
      "Bash(wrangler pages deploy*)"
    ]
  },
  "disableAutoMode": "disable"
}
सेटिंगअर्थ
allowबिना पुष्टि के निष्पादित करें
denyकभी निष्पादित न करें (पूरी तरह ब्लॉक)
askहर बार अनुमोदन आवश्यक

मुख्य सिद्धांत: विनाशकारी कमांड deny में, लेखन संचालन ask में, पढ़ने के संचालन allow में।

Production और संगठन नीति को local या managed settings से अलग करें

आधिकारिक settings model scopes को इस क्रम में लागू करता है: managed, command-line arguments, local, project, फिर user। किसी अनौपचारिक custom-file switch पर निर्भर रहने के बजाय, व्यक्तिगत production terminal के लिए .claude/settings.local.json और संगठन-स्तर की rules के लिए managed settings का उपयोग करें।

.claude/settings.local.json को local-only override रखें और git में commit न करें।

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "defaultMode": "plan",
    "disableBypassPermissionsMode": "disable",
    "allow": ["Read(**)", "Glob(**)", "Grep(**)", "Bash(git log*)", "Bash(git diff*)"],
    "deny": ["Write(**)", "Edit(**)", "Bash(git push*)", "Bash(rm*)", "Bash(*deploy*)"],
    "ask": []
  },
  "disableAutoMode": "disable"
}

Team या company policy के लिए सीमा को managed settings में रखें। allowManagedPermissionRulesOnly सक्षम करने पर users और project repositories अपनी allow, ask, या deny rules से संगठन policy को bypass नहीं कर सकते।

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(curl *)"
    ],
    "disableBypassPermissionsMode": "disable"
  },
  "disableAutoMode": "disable",
  "allowManagedPermissionRulesOnly": true
}

उपाय 4: Production परिवेश सुरक्षा

कनेक्शन लक्ष्यों को स्पष्ट रूप से अलग करें

## CLAUDE.md — Production परिवेश नियम

## परिवेश पहचान
- यदि DATABASE_URL में 'prod' या 'production' है, तो यह **production परिवेश** है
- Production में कभी निष्पादित न करें:
  - DROP / TRUNCATE / DELETE (बिना WHERE clause के)
  - Migrations (पूर्व पुष्टि आवश्यक)
  - बल्क फ़ाइल हटाना

## पुष्टि प्रवाह
सभी Production परिवर्तनों के लिए:
1. पहले Staging परिवेश में परीक्षण करें
2. उपयोगकर्ता की पुष्टि प्राप्त करें
3. निष्पादन के बाद परिणाम रिपोर्ट करें

Environment Variables से कनेक्शन नियंत्रित करें

// scripts/db-query.mjs
const env = process.env.NODE_ENV ?? "development";
const dbUrl = process.env.DATABASE_URL;

if (env === "production" && process.argv.includes("--write")) {
  console.error("❌ Production में लिखने के लिए --force-production flag आवश्यक है");
  process.exit(1);
}

उपाय 5: File Operation Safety Guards

हटाने से पहले Backup स्वचालित करें

// .claude/settings.json में Hooks
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash(rm *)",
        "hooks": [
          {
            "type": "command",
            "command": "echo '⚠️  एक डिलीट कमांड चलने वाला है। रद्द करने के लिए Ctrl+C दबाएं।' && sleep 3"
          }
        ]
      }
    ]
  }
}

महत्वपूर्ण फ़ाइलों को गलती से संपादन से बचाएं

## CLAUDE.md — फ़ाइलें जो संशोधित नहीं की जानी चाहिए

निम्नलिखित फ़ाइलें **कभी संपादित नहीं** की जानी चाहिए:
- .env (environment variables और secret keys शामिल हैं)
- wrangler.toml (Cloudflare production कॉन्फ़िगरेशन)
- scripts/deploy.sh (deployment script)
- .github/workflows/*.yml (CI/CD कॉन्फ़िगरेशन)

यदि परिवर्तन आवश्यक हैं, तो पहले उपयोगकर्ता से पुष्टि करें।

5 सामान्य गलतियां

1. बाद में .gitignore जोड़ना बहुत देर हो जाती है पहले से commit की गई .env फ़ाइल git history में रहती है, भले ही बाद में .gitignore में जोड़ दी जाए।

# History से पूर्ण हटाना (सावधानी: force push आवश्यक)
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch .env" \
  --prune-empty --tag-name-filter cat -- --all

# या BFG Repo Cleaner का उपयोग करें

यदि फ़ाइल पहले से GitHub पर push हो चुकी है, तो history को साफ करने से पहले हमेशा अपनी API कुंजियां rotate करें

2. Repository में Service Account JSON फ़ाइलें संग्रहीत करना Google Cloud या AWS की service account keys अक्सर .json फ़ाइलों के रूप में वितरित की जाती हैं, लेकिन उन्हें repository में संग्रहीत करना खतरनाक है। उन्हें environment variables में बदलें या Secret Manager (AWS Secrets Manager / GCP Secret Manager) पर migrate करें।

3. Bash tool के साथ interactive commands चलाना claude -p के साथ headless निष्पादन के दौरान, sudo या vim जैसे interactive input की आवश्यकता वाले commands प्रक्रिया को hang कर देते हैं। केवल non-interactive commands का उपयोग करें।

4. Error messages में credentials शामिल करना

// ❌ खतरनाक: API कुंजी logs में दिखती है
throw new Error(`Authentication विफल: token=${process.env.TOKEN}`);

// ✅ सुरक्षित: मान उजागर न करें
throw new Error(`Authentication विफल: कृपया TOKEN environment variable जांचें`);

5. सभी Projects में एक ही Permission सेटिंग्स का पुनः उपयोग व्यक्तिगत और कार्य Projects के लिए एक ही settings.json का उपयोग करने से व्यक्तिगत Project की ढीली सेटिंग्स कार्य Project की सख्त आवश्यकताओं को override कर सकती हैं। प्रत्येक Project के लिए .claude/settings.json अलग से प्रबंधित करें

व्यावहारिक संचालन नियम

सामान्य काम में secrets उजागर न करें

Claude Code से “यह error ठीक करो” कहते समय पूरा log या .env की सामग्री paste न करें। पहले नियम तय करें कि API कुंजी, OAuth token, cookie, database URL, customer email, billing ID और private key कभी prompt, issue comment या chat में नहीं जाएंगे।

यदि context चाहिए, तो value को ***REDACTED*** से बदलें और केवल structure रखें। DATABASE_URL=***REDACTED*** से Claude Code समझ सकता है कि database URL मौजूद है। असली value अधिकतर debugging के लिए जरूरी नहीं होती।

देना सुरक्षित हैनहीं देना चाहिए
error type, stack trace file names, reproduce stepsAPI keys, private keys, session cookies, असली .env values
.env.example, setting names, permission rules, failed commandproduction database URL, customer data, internal credentials
masked logs, test data, local sample valuesreal tokens, service account JSON, secrets वाली screenshots

इस table को CLAUDE.md में रखें ताकि हर session समान सीमा से शुरू हो। Team में “secrets नहीं दिखाने” को personal judgement नहीं, operating rule बनाना चाहिए।

Commit से पहले secret scan को दोहराएं

ऊपर दिया PreToolUse Hook तब रोकता है जब Claude Code git commit चलाता है। लेकिन कोई व्यक्ति दूसरे terminal से commit कर सकता है, या CI generated files में secret आ सकता है। Production teams में तीन layers रखें: Claude Code Hook, local pre-commit और CI secret scan जो merge block करे।

Minimum setup है: local Hook से रोकना, CI में दोबारा check करना, और secret pattern दिखे तो pull request fail करना। gitleaks या trufflehog जैसे tools CI-scale detection के लिए बेहतर हैं; इस article का script fast local guard के रूप में उपयोगी है।

ठोस failure examples

Failure 1: Investigation में .env पढ़वाना Developer ने Claude Code से “environment variables check करो” कहा और real values conversation या work logs में रह गईं। Fix है .env reads deny करना और केवल .env.example देना।

Failure 2: Qiita publishing token prompt में paste करना Automation task में QIITA_TOKEN सीधे prompt में था, जिससे subagent या log में persist होने का risk बना। Safe workflow है token को .env में रखना और command को केवल environment variable name reference करने देना।

Failure 3: Production और staging DB URLs मिलते-जुलते थे Instruction केवल “database clean up करो” था और connection verification छोड़ दी गई। यदि active URL production था, delete या migration incident बन सकता था। Write operation से पहले NODE_ENV, host और database name print करें, फिर explicit user confirmation लें।

Incident के बाद पहली कार्रवाई

यदि secret leak का शक है, तो पहला काम history साफ करना नहीं है। पहला काम credential disable करना है।

  1. प्रभावित API key, token या password तुरंत rotate या revoke करें
  2. GitHub Actions, Cloudflare, AWS, GCP और SaaS audit logs जांचें
  3. किसने, कब, किस repository में, किस channel से क्या expose किया, record करें
  4. git history और logs से secret हटाएं, और force push impact team को बताएं
  5. deny rules, Hooks, CI scans और CLAUDE.md prohibitions मजबूत करें

व्यवहार में, पहले credential रोकना और बाद में history साफ करना गलतियों को कम करता है। Incident response में लोग मदद के लिए और logs paste कर देते हैं, इसलिए masked-log template पहले से तैयार रखें।

Learning और consultation path

Claude Code security सिर्फ एक settings file से पूरी नहीं होती। Repository structure, CI, deployment permissions और team approval flow भी देखना पड़ता है।

ClaudeCodeLab में individual learning path .env hygiene और permission rules से शुरू होता है। Team consultation में पहले देखते हैं कि managed settings कहाँ enforce हों और CI secret scan कहाँ merge block करे। यदि आप पहले से काम में Claude Code उपयोग कर रहे हैं, तो fine permissions से पहले यह map करें कि कौन किस secret तक पहुंच सकता है।

सुरक्षा चेकलिस्ट

Claude Code Project सेट अप करने के लिए एक चेकलिस्ट:

### बुनियादी सेटअप
- [ ] .env बनाया और .gitignore में जोड़ा
- [ ] .env.example बनाया और Team के साथ साझा किया
- [ ] git log के माध्यम से सत्यापित किया कि मौजूदा commits में कोई secret नहीं है

### Permission सेटिंग्स
- [ ] .claude/settings.json में deny list कॉन्फ़िगर किया
- [ ] विनाशकारी commands (rm -rf, DROP TABLE, आदि) को deny में जोड़ा
- [ ] Production deploy commands को ask पर सेट किया

### Automation
- [ ] Pre-commit secret scan Hook कॉन्फ़िगर किया
- [ ] CLAUDE.md में सुरक्षा निषेध दस्तावेज़ीकृत किए

### संचालन
- [ ] API कुंजी rotation शेड्यूल स्थापित किया (अनुशंसित: हर 90 दिन)
- [ ] Production काम .claude/settings.local.json या managed settings से सीमित
- [ ] Incident response प्रवाह दस्तावेज़ीकृत किया

सारांश

Claude Code सुरक्षा “प्रतिबंध लगाने” के बारे में नहीं है — यह एक ऐसी संरचना बनाने के बारे में है जहां दुर्घटनाएं संरचनात्मक रूप से नहीं हो सकतीं।

खतराप्रतिउपाय
API कुंजी रिसाव.env + .gitignore + Secret scan Hook
अनपेक्षित हटानाDeny list + Pre-deletion Hook
Production गलतियांlocal/managed settings + CLAUDE.md निषेध
Commit contaminationPre-commit स्कैन के लिए PreToolUse Hook

एक बार कॉन्फ़िगर होने के बाद, ये सेटिंग्स व्यावहारिक रूप से maintenance-free हैं। आज 30 मिनट खर्च करने से भविष्य में एक बड़ी घटना को रोका जा सकता है।

संबंधित लेख

संदर्भ

#claude-code #security #api-key #permissions #devops #best-practices
मुफ़्त

मुफ़्त PDF: Claude Code cheatsheet

Email डालें और commands, review habits तथा safe workflow वाली एक-page PDF पाएँ.

हम आपका data सुरक्षित रखते हैं और spam नहीं भेजते.

Masa

लेखक के बारे में

Masa

Claude Code workflow और team adoption पर काम करने वाला engineer.