Entegrasyonlar

CaptchaAI API Anahtar Yönetimi için Vault Entegrasyonu

Kaynak kodundaki sabit kodlu API anahtarları bir güvenlik sorumluluğu taşır. HashiCorp Vault gizli yönetimi merkezileştirir;CaptchaAIAPI anahtarı şifrelenmiş olarak saklanır, çalışma zamanında alınır ve her erişim günlüğe kaydedilir. Bu kılavuz, Apps Kasası'nı CAPTCHA çözümleme hattınıza nasıl entegre edeceğinizi gösterir.

Neden CAPTCHA API Anahtarları için Apps Kasası

Kasasız Kasalı
.env dosyasındaki veya kodundaki API anahtarı Anahtar, Apps Kasası'nda şifrelenmiş olarak saklanıyor
Anahtar Slack veya e-posta yoluyla paylaşıldı Kimliği doğrulanmış API aracılığıyla erişim
Erişim denetim izi yok Her okuma kimlikle günlüğe kaydedilir
Manuel anahtar döndürme Otomatik rotasyon desteği
Ortamlar arasında aynı anahtar Politikalara sahip ortam başına anahtarlar

Önkoşullar

  • HashiCorp Vault sunucusu (kendi kendine barındırılan veya HCP Vault)
  • Apps Kasası CLI veya API erişimi
  • CaptchaAI API anahtarı
  • Python 3.8+ veya Node.js 18+

API Anahtarını Apps Kasası'nda saklayın

# Enable the KV secrets engine (if not already enabled)
vault secrets enable -path=secret kv-v2

# Store the CaptchaAI API key
vault kv put secret/captchaai api_key="YOUR_API_KEY"

# Verify
vault kv get secret/captchaai

Bir Kasa Politikası Oluşturun

CAPTCHA çalışanlarını salt okunur erişimle kısıtlayın:

# captcha-worker-policy.hcl
path "secret/data/captchaai" {
  capabilities = ["read"]
}

path "secret/metadata/captchaai" {
  capabilities = ["read"]
}

Politikayı uygulayın:

vault policy write captcha-worker captcha-worker-policy.hcl

Python Entegrasyonu

# vault_solver.py
import os
import time
import hvac
import requests

# Connect to Vault
vault_client = hvac.Client(
    url=os.environ.get("VAULT_ADDR", "http://127.0.0.1:8200"),
    token=os.environ.get("VAULT_TOKEN"),
)

def get_api_key():
    """Retrieve CaptchaAI API key from Vault."""
    secret = vault_client.secrets.kv.v2.read_secret_version(
        path="captchaai",
        mount_point="secret",
    )
    return secret["data"]["data"]["api_key"]

class CaptchaSolver:
    """CAPTCHA solver with Vault-managed credentials."""

    def __init__(self):
        self.api_key = get_api_key()
        self.session = requests.Session()
        self._key_fetched_at = time.time()
        self._key_refresh_interval = 3600  # Re-fetch key hourly

    def _refresh_key_if_needed(self):
        """Periodically refresh the key from Vault."""
        if time.time() - self._key_fetched_at > self._key_refresh_interval:
            self.api_key = get_api_key()
            self._key_fetched_at = time.time()

    def solve(self, sitekey, pageurl):
        """Solve reCAPTCHA v2 using Vault-managed key."""
        self._refresh_key_if_needed()

        # Submit
        resp = self.session.get("https://ocr.captchaai.com/in.php", params={
            "key": self.api_key,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": "1",
        })
        result = resp.json()

        if result.get("status") != 1:
            raise Exception(f"Submit failed: {result.get('request')}")

        task_id = result["request"]
        time.sleep(15)

        for _ in range(25):
            poll = self.session.get("https://ocr.captchaai.com/res.php", params={
                "key": self.api_key,
                "action": "get",
                "id": task_id,
                "json": "1",
            })
            poll_result = poll.json()

            if poll_result.get("status") == 1:
                return poll_result["request"]
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                raise Exception(f"Error: {poll_result.get('request')}")

            time.sleep(5)

        raise Exception("Timeout")

# Usage
solver = CaptchaSolver()
token = solver.solve(
    "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "https://www.google.com/recaptcha/api2/demo"
)
print(f"Token: {token[:30]}...")

JavaScript Entegrasyonu

// vault_solver.js
const axios = require('axios');

const VAULT_ADDR = process.env.VAULT_ADDR || 'http://127.0.0.1:8200';
const VAULT_TOKEN = process.env.VAULT_TOKEN;

async function getApiKey() {
  const resp = await axios.get(
    `${VAULT_ADDR}/v1/secret/data/captchaai`,
    { headers: { 'X-Vault-Token': VAULT_TOKEN } }
  );
  return resp.data.data.data.api_key;
}

class CaptchaSolver {
  constructor() {
    this.apiKey = null;
    this.keyFetchedAt = 0;
    this.refreshInterval = 3600000; // 1 hour
  }

  async init() {
    this.apiKey = await getApiKey();
    this.keyFetchedAt = Date.now();
  }

  async refreshKeyIfNeeded() {
    if (Date.now() - this.keyFetchedAt > this.refreshInterval) {
      this.apiKey = await getApiKey();
      this.keyFetchedAt = Date.now();
    }
  }

  async solve(sitekey, pageurl) {
    await this.refreshKeyIfNeeded();

    const submit = await axios.get('https://ocr.captchaai.com/in.php', {
      params: {
        key: this.apiKey, method: 'userrecaptcha',
        googlekey: sitekey, pageurl, json: '1',
      },
    });

    if (submit.data.status !== 1) throw new Error(submit.data.request);
    const taskId = submit.data.request;

    await new Promise(r => setTimeout(r, 15000));

    for (let i = 0; i < 25; i++) {
      const poll = await axios.get('https://ocr.captchaai.com/res.php', {
        params: { key: this.apiKey, action: 'get', id: taskId, json: '1' },
      });

      if (poll.data.status === 1) return poll.data.request;
      if (poll.data.request !== 'CAPCHA_NOT_READY') throw new Error(poll.data.request);
      await new Promise(r => setTimeout(r, 5000));
    }
    throw new Error('Timeout');
  }
}

(async () => {
  const solver = new CaptchaSolver();
  await solver.init();

  const token = await solver.solve(
    '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
    'https://www.google.com/recaptcha/api2/demo'
  );
  console.log(`Token: ${token.slice(0, 30)}...`);
})();

Kimlik Doğrulama Yöntemleri

Apps Kasası, çalışanlar için birden fazla kimlik doğrulama yöntemini destekler:

Yöntem En İyisi Kurulum
Jeton Geliştirme, CI/CD VAULT_TOKEN env var
Uygulama Rolü Üretim hizmetleri Rol Kimliği + Gizli Kimlik
Kubernet'ler K8'in iş yükleri Hizmet hesabı JWT
AWS IAM EC2/Lambda çalışanları Örnek rolü

AppRole Örneği (Üretim için Önerilen)

# AppRole authentication — no static token needed
vault_client = hvac.Client(url=os.environ["VAULT_ADDR"])
vault_client.auth.approle.login(
    role_id=os.environ["VAULT_ROLE_ID"],
    secret_id=os.environ["VAULT_SECRET_ID"],
)

# Now read the secret
secret = vault_client.secrets.kv.v2.read_secret_version(path="captchaai")
api_key = secret["data"]["data"]["api_key"]

Anahtar Rotasyon İş Akışı

  1. CaptchaAI kontrol panelinde yeni CaptchaAI API anahtarı oluşturun
  2. Kasayı Güncelle: vault kv put secret/captchaai api_key="NEW_KEY"
  3. Çalışanlar bir sonraki yenileme döngüsünde yeni anahtarı otomatik olarak alır
  4. Tüm çalışanlar yenilendikten sonra CaptchaAI panosundaki eski anahtarı iptal edin

Kod değişikliği veya dağıtım gerekmez.

Sorun giderme

Sorun Sebep Düzeltme
Vault'tan 403 Forbidden Politika okumaya izin vermiyor captcha-worker-policy.hcl yolunu kontrol edin
VAULT_TOKEN'nin süresi doldu Token TTL'si aşıldı Otomatik olarak yenilenebilir belirteçler için AppRole'u kullanın
Anahtar yenilenmiyor Yenileme aralığı çok uzun _key_refresh_interval'yi azaltın
Apps Kasası kullanılamıyor Ağ veya sunucu sorunu Geri dönüş ile anahtarı yerel olarak önbelleğe alın

SSS

Vault çökerse ne olur?

API anahtarını ilk alındığında bellekte önbelleğe alın. Yenileme sırasında Apps Kasası kullanılamıyorsa önbelleğe alınan anahtarı kullanmaya devam edin ve hatayı günlüğe kaydedin.

Ortam başına bir anahtar saklamalı mıyım?

Evet. Ayrı Vault yolları kullanın: secret/captchaai/dev, secret/captchaai/staging, secret/captchaai/prod.

Vault yerine AWS Secrets Manager'ı kullanabilir miyim?

Evet. Model aynıdır: Çalışma zamanında sırrı boto3 kullanarak AWS Secrets Manager'dan alın. Temel prensip (sabit kodlanmış anahtar yok, dağıtım olmadan döndürme) aynı kalıyor.

İlgili Makaleler

Sonraki Adımlar

CaptchaAI kimlik bilgilerinizi Vault ile güvence altına alın —API anahtarınızı alın.

İlgili kılavuzlar:

Bu makale için yorumlar devre dışı bırakılmıştır.