OpenAI API Anahtarı Alma ve Güvenli Ortam Değişkenine Kaydetme

Yapay zeka araçlarını projelerinize entegre etmeye karar verdiniz, harika. Ama hemen karşınıza çıkan ilk engel şu oluyor: “API anahtarını nereden alacağım, nereye koyacağım, güvenli mi?” Bu sorular kafanızda dönerken projeniz bir kenarda bekliyor. Bu yazıda hem OpenAI API anahtarı almanın adım adım yolunu göstereceğim, hem de bu anahtarı güvenli bir şekilde ortam değişkeni olarak kaydetmenin Linux ve Windows’taki en iyi pratiklerini ele alacağım. Yanlış yapılan her şeyi de konuşacağız, çünkü “API anahtarımı GitHub’a push ettim” mesajını sysadmin gruplarında çok fazla görüyorum.

OpenAI API Anahtarı Nedir ve Neden Önemlidir

OpenAI API anahtarı, temelde sizin kimliğinizi doğrulayan ve kullanım ücretlerinizi hesaplamak için kullanılan benzersiz bir dizedir. sk-proj- ile başlayan bu string, GPT-4, GPT-4o, DALL-E veya Whisper gibi servislere erişim sağlar. Her istek bu anahtarla imzalanır.

Anahtarın neden bu kadar kritik olduğunu bir senaryo ile açıklayalım: Diyelim ki bu anahtarı bir GitHub reposuna yanlışlıkla push ettiniz. GitHub’ın bot’ları bunu genellikle dakikalar içinde tespit ediyor, ama kötü niyetli tarayıcılar da aynı hızda çalışıyor. Anahtarınız ele geçirildiğinde, birisi sizin hesabınız üzerinden binlerce dolarlık API çağrısı yapabilir. OpenAI bu tür durumları genellikle geri ödemez, en iyi ihtimalle anahtarı iptal eder. Dolayısıyla bu bir “iyi olsa güzel olur” değil, zorunlu bir güvenlik konusudur.

OpenAI Hesabı ve API Anahtarı Alma

Hesap Oluşturma

Öncelikle [platform.openai.com](https://platform.openai.com) adresine gidip hesap oluşturmanız gerekiyor. Google veya Microsoft hesabıyla da giriş yapabilirsiniz. Hesabınızı oluşturduktan sonra ödeme bilgilerinizi eklemeniz gerekiyor, çünkü API kullanımı ücretsiz tier’ın ötesinde ücretlidir.

Önemli bir not: ChatGPT aboneliğiniz varsa bu sizi API erişimine otomatik dahil etmez. API ve ChatGPT iki ayrı ürün, ayrı faturalandırma sistemi.

API Anahtarı Oluşturma Adımları

  1. [platform.openai.com](https://platform.openai.com) adresine gidin ve giriş yapın
  2. Sol menüden API Keys bölümüne tıklayın
  3. Create new secret key butonuna basın
  4. Anahtarınıza bir isim verin (örneğin “prod-server-1” veya “dev-laptop”)
  5. Permissions bölümünde anahtarın yetkilerini ayarlayın (buna aşağıda değineceğiz)
  6. Create secret key butonuna basın

Burada kritik bir nokta var: Anahtarı sadece bir kez görebilirsiniz. Pencereyi kapattığınızda artık o anahtarın tam değerini göremezsiniz, sadece son 4 karakterini görürsünüz. Hemen güvenli bir yere kaydedin.

Proje Bazlı API Anahtarları

OpenAI artık organizasyon bazlı ve proje bazlı anahtarları destekliyor. Birden fazla projeyle çalışıyorsanız veya bir ekip içindeyseniz, her proje için ayrı anahtar oluşturmak yönetimi kolaylaştırır. Bu sayede hangi anahtarın ne kadar harcama yaptığını ayrı ayrı takip edebilirsiniz.

En iyi pratik: Her uygulama veya servis için ayrı API anahtarı oluşturun. Tek bir “master” anahtar kullanmak yerine, her servis kendi anahtarına sahip olsun. Böylece bir anahtar sızdığında sadece o servisi etkilersiniz.

Ortam Değişkeni Nedir ve Neden Kullanmalıyız

Ortam değişkeni (environment variable), işletim sisteminin her uygulamaya sağladığı anahtar-değer çiftleridir. Kod içine doğrudan yazmak yerine (api_key = "sk-proj-abc123...") bu değeri ortam değişkenine koyarsınız ve kodunuzdan okursunuz.

Bu yaklaşımın avantajları:

  • Kod güvenliği: Anahtarınız kaynak kodda olmadığı için Git geçmişine girmez
  • Taşınabilirlik: Aynı kod farklı ortamlarda (dev, staging, prod) farklı anahtarlarla çalışır
  • Ekip çalışması: Her geliştirici kendi anahtarını kullanır, paylaşmak zorunda kalmazsınız
  • Rotation kolaylığı: Anahtarı döndürdüğünüzde kodu değiştirmek zorunda kalmazsınız

Linux’ta Ortam Değişkeni Ayarlama

Geçici (Session-Based) Ayarlama

Terminal oturumu boyunca geçerli olan geçici bir ortam değişkeni ayarlamak için:

export OPENAI_API_KEY="sk-proj-buraya-anahtarinizi-yazin"

Bu yöntem sadece mevcut terminal oturumunda geçerlidir. Terminal kapatıldığında kaybolur. Test amaçlı kullanmak için iyidir ama production için yeterli değil.

Değişkeni kontrol etmek için:

echo $OPENAI_API_KEY
# ya da tüm ortam değişkenlerini listelemek için:
env | grep OPENAI

Kalıcı Kullanıcı Bazlı Ayarlama (Bash)

Değişkenin her oturumda otomatik yüklenmesi için shell yapılandırma dosyasına eklemeniz gerekiyor:

# ~/.bashrc veya ~/.bash_profile dosyasına ekleyin
echo 'export OPENAI_API_KEY="sk-proj-buraya-anahtarinizi-yazin"' >> ~/.bashrc

# Değişikliği aktif oturuma uygulamak için:
source ~/.bashrc

Eğer Zsh kullanıyorsanız (macOS’ta varsayılan, birçok Linux dağıtımında popüler):

echo 'export OPENAI_API_KEY="sk-proj-buraya-anahtarinizi-yazin"' >> ~/.zshrc
source ~/.zshrc

Sistem Geneli Ayarlama (Tüm Kullanıcılar için)

Sunucuda birden fazla servis veya kullanıcı aynı API anahtarını kullanacaksa (ki bu çok tavsiye edilmez ama bazen kaçınılmaz olur), sistem geneli ortam değişkeni ayarlayabilirsiniz:

# /etc/environment dosyasını düzenleyin
sudo nano /etc/environment

# Dosyaya şunu ekleyin (export olmadan, dosya formatı böyle):
OPENAI_API_KEY="sk-proj-buraya-anahtarinizi-yazin"

Bu dosya sistem başlangıcında tüm kullanıcılar için yüklenir. Değişikliğin etkili olması için oturumu kapatıp açmanız gerekir.

Systemd Servis Dosyalarında Ortam Değişkeni

Eğer OpenAI API’yi kullanan uygulamanız bir systemd servisi olarak çalışıyorsa, ortam değişkenini servis dosyasında tanımlamanız gerekiyor. Bu, production ortamlarında en yaygın kullanılan yaklaşım.

# /etc/systemd/system/ai-app.service
[Unit]
Description=AI Application Service
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/ai-app
# Yöntem 1: Doğrudan servis dosyasına (daha az güvenli)
Environment="OPENAI_API_KEY=sk-proj-buraya-anahtarinizi-yazin"
# Yöntem 2: Ayrı bir env dosyasından okuma (daha güvenli)
EnvironmentFile=/etc/ai-app/secrets.env
ExecStart=/opt/ai-app/venv/bin/python app.py
Restart=always

[Install]
WantedBy=multi-user.target
# /etc/ai-app/secrets.env dosyasını oluşturun
sudo mkdir -p /etc/ai-app
sudo nano /etc/ai-app/secrets.env

# Dosya içeriği:
OPENAI_API_KEY=sk-proj-buraya-anahtarinizi-yazin
DATABASE_URL=postgresql://user:pass@localhost/db

# Dosya izinlerini sıkılaştırın
sudo chmod 600 /etc/ai-app/secrets.env
sudo chown appuser:appuser /etc/ai-app/secrets.env

Bu yaklaşımda secrets dosyası sadece ilgili kullanıcı tarafından okunabilir ve kaynak koddan tamamen ayrı tutulur.

Servisi yeniden yüklemek için:

sudo systemctl daemon-reload
sudo systemctl restart ai-app
sudo systemctl status ai-app

# Ortam değişkeninin servis tarafından görülüp görülmediğini kontrol etmek için:
sudo systemctl show ai-app --property=Environment

Windows’ta Ortam Değişkeni Ayarlama

PowerShell ile Geçici Ayarlama

# Mevcut PowerShell oturumu için geçici
$env:OPENAI_API_KEY = "sk-proj-buraya-anahtarinizi-yazin"

# Doğrulama
$env:OPENAI_API_KEY
echo $env:OPENAI_API_KEY

Kalıcı Olarak Kullanıcı veya Sistem Seviyesinde Ayarlama

# Sadece mevcut kullanıcı için kalıcı
[System.Environment]::SetEnvironmentVariable(
    "OPENAI_API_KEY",
    "sk-proj-buraya-anahtarinizi-yazin",
    "User"
)

# Sistem geneli kalıcı (Admin yetkisi gerektirir)
[System.Environment]::SetEnvironmentVariable(
    "OPENAI_API_KEY",
    "sk-proj-buraya-anahtarinizi-yazin",
    "Machine"
)

# Mevcut oturuma yüklemek için (yeni terminal açmadan):
$env:OPENAI_API_KEY = [System.Environment]::GetEnvironmentVariable("OPENAI_API_KEY", "User")

Windows Servislerinde Ortam Değişkeni

Windows’ta bir uygulama servis olarak çalışıyorsa, servis hesabının bu değişkene erişmesi için sistem seviyesinde tanımlamak gerekir:

# Mevcut değeri okuma ve doğrulama
[System.Environment]::GetEnvironmentVariable("OPENAI_API_KEY", "Machine")

# Ortam değişkenini silmek için (null atanır)
[System.Environment]::SetEnvironmentVariable("OPENAI_API_KEY", $null, "Machine")

.env Dosyası ile Geliştirme Ortamı Yönetimi

Geliştirme ortamlarında .env dosyaları çok yaygın kullanılır. Python’da python-dotenv, Node.js’te dotenv paketi bu dosyaları otomatik okur.

# .env dosyası oluşturun (proje kök dizininde)
cat > .env << 'EOF'
OPENAI_API_KEY=sk-proj-buraya-anahtarinizi-yazin
OPENAI_ORG_ID=org-buraya-org-id-yazin
OPENAI_MODEL=gpt-4o
MAX_TOKENS=2000
EOF

# .env dosyasını .gitignore'a ekleyin (ÇOK ÖNEMLİ!)
echo ".env" >> .gitignore
echo ".env.local" >> .gitignore
echo "*.env" >> .gitignore

# Git'in bu dosyayı takip etmediğini doğrulayın
git status

Python kodunda ortam değişkenini okuma örneği:

import os
from dotenv import load_dotenv
from openai import OpenAI

# .env dosyasını yükle (sadece geliştirme ortamında kullanın)
load_dotenv()

# Ortam değişkenini oku
api_key = os.environ.get("OPENAI_API_KEY")

if not api_key:
    raise ValueError("OPENAI_API_KEY ortam değişkeni tanımlı değil!")

client = OpenAI(api_key=api_key)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "Merhaba, bu bir test mesajıdır."}
    ]
)

print(response.choices[0].message.content)

Güvenlik Kontrolleri ve Yaygın Hatalar

Git Geçmişi Temizleme

Eğer anahtarınızı yanlışlıkla commit ettiyseniz, sadece dosyayı silip tekrar commit etmek yetmez. Git geçmişinde hala kalır.

# git-filter-repo aracı ile geçmişten temizleme (modern yaklaşım)
pip install git-filter-repo

# Belirli bir stringi geçmişten sil
git filter-repo --replace-text <(echo "sk-proj-eski-anahtariniz==>REMOVED")

# Alternatif: BFG Repo Cleaner ile
# Önce BFG'yi indirin (bfg.jar)
java -jar bfg.jar --replace-text secrets.txt your-repo.git

Kritik not: Geçmişi temizleseniz bile, anahtarın ele geçirildiğini varsayın ve hemen OpenAI panelinden iptal edip yeni bir anahtar oluşturun.

API Anahtarı Güvenlik Kontrol Scripti

Sisteminizde API anahtarının doğru ayarlandığını ve gereksiz yerlerde olmadığını kontrol etmek için:

#!/bin/bash
# api-key-audit.sh - API anahtarı güvenlik denetimi

echo "=== OpenAI API Anahtarı Güvenlik Denetimi ==="

# Ortam değişkeni var mı?
if [ -z "$OPENAI_API_KEY" ]; then
    echo "[HATA] OPENAI_API_KEY ortam değişkeni tanımlı değil!"
    exit 1
else
    # Anahtarın sadece son 4 karakterini göster
    KEY_LENGTH=${#OPENAI_API_KEY}
    echo "[OK] Anahtar tanımlı (uzunluk: $KEY_LENGTH karakter)"
    echo "[INFO] Anahtar sonu: ...${OPENAI_API_KEY: -4}"
fi

# Yaygın config dosyalarında anahtar var mı kontrol et
RISKY_FILES=(
    ~/.bashrc
    ~/.bash_profile
    ~/.zshrc
    ~/.profile
)

echo ""
echo "=== Yapılandırma Dosyası Kontrolü ==="

for file in "${RISKY_FILES[@]}"; do
    if [ -f "$file" ]; then
        if grep -q "sk-proj-" "$file" 2>/dev/null; then
            echo "[UYARI] $file dosyasında API anahtarı bulundu!"
            echo "        Bunu secrets yönetim sistemine taşımayı düşünün."
        else
            echo "[OK] $file temiz"
        fi
    fi
done

# Git repo içinde mi?
if git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
    echo ""
    echo "=== Git Repo Kontrolü ==="
    if git log --all -p | grep -q "sk-proj-" 2>/dev/null; then
        echo "[KRİTİK] Git geçmişinde API anahtarı bulundu! Hemen aksiyon alın!"
    else
        echo "[OK] Git geçmişinde API anahtarı yok"
    fi
fi

echo ""
echo "Denetim tamamlandı."
chmod +x api-key-audit.sh
./api-key-audit.sh

Production Ortamları için İleri Seviye Yaklaşımlar

Gerçek bir production ortamında, ortam değişkeni yeterli olmayabilir. Bu durumda kullanabileceğiniz araçlar:

  • HashiCorp Vault: Merkezi secrets yönetimi, otomatik rotation, audit log
  • AWS Secrets Manager: AWS altyapısı kullanıyorsanız doğal entegrasyon
  • Azure Key Vault: Azure ortamları için
  • Kubernetes Secrets: K8s cluster’larında pod’lara güvenli secret enjeksiyonu
  • Docker Secrets: Docker Swarm ortamları için

Basit bir Kubernetes secret örneği:

# Kubernetes secret oluşturma
kubectl create secret generic openai-secrets 
    --from-literal=api-key=sk-proj-buraya-anahtarinizi-yazin 
    --namespace=production

# Secret'i pod'a bağlama (deployment yaml'ında)
# env:
#   - name: OPENAI_API_KEY
#     valueFrom:
#       secretKeyRef:
#         name: openai-secrets
#         key: api-key

# Secret'i listeleme (değer gösterilmez, base64 encoded)
kubectl get secret openai-secrets -o yaml -n production

API Anahtarı Rotation Stratejisi

En iyi pratik, API anahtarlarını düzenli olarak döndürmektir. OpenAI bu konuda otomatik bir mekanizma sunmaz, ama siz kendiniz bir süreç oluşturabilirsiniz:

  • Her 90 günde bir: Standart rotation döngüsü
  • Personel değişiminde: Bir ekip üyesi ayrıldığında
  • Şüpheli aktivitede: Beklenmedik yüksek kullanım gördüğünüzde
  • Güvenlik ihlali şüphesinde: Hemen, beklemeden

Rotation sırasında eski anahtarı hemen silmek yerine, kısa bir süre (birkaç dakika) iki anahtarı paralel çalıştırın. Böylece geçiş sırasında servis kesintisi yaşamazsınız.

Sonuç

OpenAI API anahtarı almak teknik olarak basit, ama onu güvenli yönetmek disiplin gerektiriyor. Temel kuralları bir daha vurgulayalım: Anahtarı kaynak kodda yazmayın, .gitignore‘a .env dosyasını eklemeyi unutmayın, her servis için ayrı anahtar kullanın ve düzenli olarak rotation yapın. Linux’ta systemd EnvironmentFile yaklaşımı, Windows’ta sistem seviyesi ortam değişkeni production için en temiz çözümler. Geliştirme ortamında ise python-dotenv veya benzeri araçlarla .env dosyası kullanmak hem pratik hem de güvenlidir.

Bu adımları doğru atarsanız, hem güvenli bir altyapı kurmuş hem de ekibinizdeki diğer geliştiricilere iyi bir örnek olmuş olursunuz. Sysadmin işinin büyük bir kısmı zaten bu tür “sıkıcı ama kritik” süreçleri doğru oturtmaktan ibaret.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir