Takip et

DigitalOcean Üzerinde Kimlik Doğrulamalı Bir API Oluşturma

DigitalOcean Üzerinde Kimlik Doğrulamalı Bir API Oluşturma DigitalOcean, geliştiricilere bulut tabanlı sanal sunucular (Droplets), yönetilen v

DigitalOcean Üzerinde Kimlik Doğrulamalı Bir API Oluşturma

DigitalOcean, geliştiricilere bulut tabanlı sanal sunucular (Droplets), yönetilen veritabanları, depolama ve daha birçok hizmet sunarak uygulamaların hızlı ve güvenilir bir şekilde dağıtılmasına olanak tanıyan popüler bir bulut sağlayıcısıdır. Günümüzün modern uygulamaları genellikle farklı servisler arasında veri alışverişi yapmak için API’leri (Uygulama Programlama Arayüzleri) kullanır. Ancak, bir API’nin güvende olması, hassas verilerin korunması ve yetkisiz erişimin engellenmesi açısından kritik öneme sahiptir. Bu makale, DigitalOcean altyapısını kullanarak kimlik doğrulamalı (authenticated) bir API’nin nasıl oluşturulacağını detaylı bir şekilde ele alacaktır.

Giriş: API ve Kimlik Doğrulamanın Önemi

API’ler, farklı yazılım sistemlerinin birbiriyle iletişim kurmasını sağlayan bir dizi kural ve protokol bütünüdür. Bir mobil uygulamanın bir sunucudan veri çekmesi, bir web sitesinin üçüncü taraf bir ödeme geçidiyle entegre olması veya mikro hizmetlerin birbirleriyle konuşması gibi senaryolarda API’ler temel bir rol oynar. RESTful API’ler, HTTP protokolünü kullanarak kaynaklar üzerinde CRUD (Create, Read, Update, Delete) işlemleri gerçekleştiren yaygın bir API türüdür.

Bir API’nin herkese açık olması, güvenlik risklerini beraberinde getirir. Yetkisiz kullanıcılar hassas verilere erişebilir, sistemin kötüye kullanılmasına neden olabilir veya hizmet kesintileri yaratabilir. Bu nedenle, API’lerin kimlik doğrulaması ve yetkilendirme mekanizmaları ile korunması zorunludur. Kimlik doğrulama (Authentication), bir kullanıcının veya servisin kimliğini doğrulamak anlamına gelirken, yetkilendirme (Authorization) ise kimliği doğrulanmış bu kullanıcının hangi kaynaklara erişebileceğini veya hangi işlemleri yapabileceğini belirler. DigitalOcean’ın esnek altyapısı, bu tür güvenli API’leri geliştirmek ve dağıtmak için ideal bir ortam sunar.

Temel Kavramlar

Güvenli bir API oluşturmadan önce, ilgili temel kavramları anlamak önemlidir.

API Nedir?

API (Application Programming Interface), farklı yazılım bileşenlerinin veya uygulamaların birbiriyle etkileşim kurmasını sağlayan bir arayüzdür. RESTful API’ler, HTTP metodlarını (GET, POST, PUT, DELETE) kullanarak kaynaklar üzerinde işlem yapar ve genellikle JSON veya XML formatında veri alışverişi yapar.

Kimlik Doğrulama Neden Gerekli?

Kimlik doğrulama, bir API’yi kullanan istemcinin (kullanıcı, başka bir uygulama) kimliğini kanıtlaması sürecidir. Bu, aşağıdaki nedenlerle hayati öneme sahiptir:

* Veri Güvenliği: Hassas bilgilerin yetkisiz erişime karşı korunması.
* Yetkilendirme: Kimliği doğrulanmış kullanıcılara belirli erişim hakları tanımlanması.
* İzlenebilirlik: API çağrılarının kim tarafından yapıldığını takip edebilme.
* Hizmet Kalitesi: Kötü niyetli veya aşırı yüklenmelerden kaynaklanan hizmet kesintilerini önleme.

Yaygın Kimlik Doğrulama Yöntemleri

API’ler için çeşitli kimlik doğrulama yöntemleri bulunmaktadır. Her birinin kendine göre avantajları ve dezavantajları vardır:

* API Anahtarları (API Keys): Genellikle uzun, rastgele dizelerden oluşan anahtarlardır. İstek başlığına veya sorgu parametresi olarak eklenir. Basit uygulamalar için yeterli olabilir ancak anahtarın çalınması durumunda güvenlik zafiyeti oluşturabilir. Genellikle sadece uygulamanın kimliğini doğrulamak için kullanılır, son kullanıcı kimliği için uygun değildir.
* Temel Kimlik Doğrulama (Basic Auth): Kullanıcı adı ve şifrenin Base64 ile kodlanarak HTTP Authorization başlığına eklenmesidir. Şifreleme sağlamadığı için HTTPS ile birlikte kullanılmalıdır. Güvenlik açısından modern uygulamalar için önerilmez.
* OAuth 2.0: Genellikle üçüncü taraf uygulamaların kullanıcı adına başka bir servise erişim izni almasını sağlayan bir yetkilendirme çerçevesidir. Kimlik doğrulama değil, yetkilendirme mekanizmasıdır. Facebook, Google gibi platformlarda yaygın olarak kullanılır. Daha karmaşık senaryolar için uygundur.
* JSON Web Tokens (JWT): Bu makalede ana odak noktamız olacak yöntemdir. Kullanıcı kimlik bilgileri sunucu tarafından doğrulanır ve sunucu, istemciye dijital olarak imzalanmış bir JWT gönderir. İstemci, sonraki tüm isteklerinde bu token’ı göndererek kimliğini kanıtlar. Durumsuz (stateless) yapısı ve ölçeklenebilirliği sayesinde modern API’lerde oldukça popülerdir.

Yetkilendirme Nedir?

Kimlik doğrulama, “Sen kimsin?” sorusuna cevap verirken, yetkilendirme “Ne yapmana izin var?” sorusuna cevap verir. Bir kullanıcı başarılı bir şekilde kimliğini doğruladıktan sonra, yetkilendirme mekanizmaları devreye girer ve kullanıcının belirli kaynaklara erişim veya belirli işlemleri gerçekleştirme hakkı olup olmadığını kontrol eder. Örneğin, bir “yönetici” kullanıcısının tüm verilere erişimi varken, “normal kullanıcı” sadece kendi verilerine erişebilir.

Teknoloji Seçimi ve Geliştirme Ortamı

Kimlik doğrulamalı API’mizi oluşturmak için popüler ve DigitalOcean ile uyumlu teknolojileri seçeceğiz.

Programlama Dili ve Çerçeve

Bu makalede Python programlama dilini ve Flask mikro web çerçevesini kullanacağız. Flask, hafif yapısı ve esnekliği ile API geliştirmek için oldukça uygun bir seçenektir. Ayrıca, JWT entegrasyonu için gerekli kütüphaneler de mevcuttur. Alternatif olarak Node.js (Express), Go (Gin/Echo) veya PHP (Laravel/Symfony) gibi diller ve çerçeveler de kullanılabilir.

Veritabanı

Kullanıcı bilgilerini ve API verilerini depolamak için bir veritabanına ihtiyacımız olacak. DigitalOcean, yönetilen PostgreSQL, MySQL ve Redis veritabanları sunar. Bu hizmetler, veritabanı yönetimi (yedekleme, ölçekleme, güvenlik) yükünü üzerinizden alarak geliştirme sürecine odaklanmanızı sağlar. Bu örnekte PostgreSQL kullanacağız.

DigitalOcean Servisleri

* Droplet (Sanal Sunucu): API uygulamamızı barındırmak için bir Linux sanal sunucusu. Ubuntu işletim sistemi tercih edeceğiz.
* Managed Databases (Yönetilen Veritabanları): Veritabanımızın kurulumunu, bakımını ve güvenliğini DigitalOcean’ın üstlendiği bir hizmet.
* Firewalls (Güvenlik Duvarları): Droplet’imize gelen ve giden trafiği kontrol etmek için kullanılır. Yalnızca gerekli portlara (SSH, HTTP/S, veritabanı portu) izin vererek güvenliği artırır.
* Load Balancers (Yük Dengeleyiciler): (Daha büyük projeler için) Birden fazla Droplet arasında trafiği dengeleyerek yüksek erişilebilirlik ve ölçeklenebilirlik sağlar. İlk kurulum için zorunlu değildir.
* DNS: Alan adımızı (domain) API sunucumuza yönlendirmek için.

API Geliştirme Adımları: JWT ile Kimlik Doğrulama

Şimdi, Flask kullanarak JWT tabanlı kimlik doğrulamalı bir API’nin nasıl oluşturulacağına bakalım.

Proje Yapılandırması

İlk olarak, projemiz için bir dizin oluşturup sanal ortamı ayarlayalım ve gerekli kütüphaneleri kuralım:

mkdir my_auth_api
cd my_auth_api
python3 -m venv venv
source venv/bin/activate
pip install Flask Flask-SQLAlchemy PyJWT passlib psycopg2-binary python-dotenv

* Flask: Web çerçevesi.
* Flask-SQLAlchemy: Flask ile SQLAlchemy entegrasyonu (ORM).
* PyJWT: JWT oluşturma ve doğrulama için.
* passlib: Şifreleri güvenli bir şekilde hash’lemek için (bcrypt).
* psycopg2-binary: PostgreSQL veritabanı bağlayıcısı.
* python-dotenv: Ortam değişkenlerini yönetmek için.

Proje yapısı:

my_auth_api/
├── venv/
├── .env
├── app.py
├── models.py
└── requirements.txt

requirements.txt dosyasını oluşturmayı unutmayın: pip freeze > requirements.txt

.env dosyası hassas bilgileri saklamak için kullanılacak:

DATABASE_URL="postgresql://user:password@host:port/database"
SECRET_KEY="your_super_secret_jwt_key"

Veritabanı Modelleri (models.py)

Kullanıcı bilgilerini saklayacak bir model tanımlayalım. Şifreleri düz metin olarak değil, hash’lenmiş olarak saklamak kritik öneme sahiptir.

# models.py
from flask_sqlalchemy import SQLAlchemy
from passlib.hash import bcrypt

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password_hash = db.Column(db.String(128), nullable=False)

    def __init__(self, username, password):
        self.username = username
        self.set_password(password)

    def set_password(self, password):
        self.password_hash = bcrypt.hash(password)

    def check_password(self, password):
        return bcrypt.verify(password, self.password_hash)

    def __repr__(self):
        return f''

Uygulama Mantığı (app.py)

Ana uygulama dosyamızda Flask uygulamasını yapılandıracak, veritabanı bağlantısını kuracak, kullanıcı kayıt, giriş ve korumalı rotaları tanımlayacağız.

# app.py
import os
from datetime import datetime, timedelta
from functools import wraps

import jwt
from flask import Flask, request, jsonify
from dotenv import load_dotenv

from models import db, User

.env dosyasını yükle

load_dotenv() app = Flask(__name__)

Ortam değişkenlerinden yapılandırma

app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') # JWT imzalama için gizli anahtar db.init_app(app)

Veritabanını oluşturma (ilk çalıştırmada)

with app.app_context(): db.create_all()

JWT Doğrulama Decorator'ı

def token_required(f): @wraps(f) def decorated(args, *kwargs): token = None # İstek başlığından token'ı al if 'Authorization' in request.headers: token = request.headers['Authorization'].split(" ")[1] # "Bearer " if not token: return jsonify({'message': 'Token eksik!'}), 401 try: # Token'ı doğrula data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"]) current_user = User.query.get(data['user_id']) if not current_user: return jsonify({'message': 'Geçersiz Token!'}), 401 except jwt.ExpiredSignatureError: return jsonify({'message': 'Token süresi doldu!'}), 401 except jwt.InvalidTokenError: return jsonify({'message': 'Geçersiz Token!'}), 401 except Exception as e: return jsonify({'message': f'Token doğrulama hatası: {str(e)}'}), 401 return f(current_user, args, *kwargs) return decorated

Kullanıcı Kayıt Endpoint'i

@app.route('/register', methods=['POST']) def register(): data = request.get_json() username = data.get('username') password = data.get('password') if not username or not password: return jsonify({'message': 'Kullanıcı adı ve şifre gerekli!'}), 400 if User.query.filter_by(username=username).first(): return jsonify({'message': 'Bu kullanıcı adı zaten mevcut!'}), 409 new_user = User(username=username, password=password) db.session.add(new_user) db.session.commit() return jsonify({'message': 'Kullanıcı başarıyla kaydedildi!'}), 201

Kullanıcı Giriş Endpoint'i

@app.route('/login', methods=['POST']) def login(): data = request.get_json() username = data.get('username') password = data.get('password') if not username or not password: return jsonify({'message': 'Kullanıcı adı ve şifre gerekli!'}), 400 user = User.query.filter_by(username=username).first() if not user or not user.check_password(password): return jsonify({'message': 'Geçersiz kullanıcı adı veya şifre!'}), 401 # JWT oluştur token_payload = { 'user_id': user.id, 'exp': datetime.utcnow() + timedelta(minutes=30) # 30 dakika geçerlilik süresi } token = jwt.encode(token_payload, app.config['SECRET_KEY'], algorithm="HS256") return jsonify({'token': token}), 200

Korumalı Endpoint Örneği

@app.route('/protected', methods=['GET']) @token_required def protected_route(current_user): return jsonify({ 'message': f'Hoş geldin, {current_user.username}! Bu korumalı bir içerik.', 'user_id': current_user.id }), 200 @app.route('/', methods=['GET']) def home(): return jsonify({'message': 'API çalışıyor, kimlik doğrulama gerekli!'}), 200 if __name__ == '__main__': app.run(debug=True, host='0.0.0.0') # Geliştirme ortamı için debug=True

Bu app.py dosyası:
1. Ortam değişkenlerini yükler.
2. Flask uygulamasını ve veritabanı bağlantısını yapılandırır.
3. token_required adında bir decorator tanımlar. Bu decorator, bir rotaya gelen isteğin Authorization başlığında geçerli bir JWT olup olmadığını kontrol eder. Token’ı çözer, süresinin dolup dolmadığını ve imzasının geçerli olup olmadığını kontrol eder.
4. /register endpoint’i ile yeni kullanıcı kaydına izin verir. Şifreler bcrypt ile hash’lenir.
5. /login endpoint’i ile kullanıcı adı ve şifre kontrolü yapar. Başarılı olursa, kullanıcı ID’sini ve süre sonu bilgisini içeren bir JWT oluşturup istemciye döner.
6. /protected endpoint’i, token_required decorator’ı ile korunmuştur. Sadece geçerli bir JWT ile erişilebilir.

DigitalOcean Üzerinde Dağıtım (Deployment)

API’mizi yerel ortamda test ettikten sonra, onu DigitalOcean Droplet’imize dağıtma zamanı.

Droplet Oluşturma

1. DigitalOcean Hesabınıza Giriş Yapın: Kontrol panelinden “Create” -> “Droplets” seçeneğini tıklayın.
2. İşletim Sistemi Seçimi: Ubuntu 22.04 LTS (veya en son LTS sürümü) tercih edin.
3. Plan Seçimi: İhtiyaçlarınıza göre bir plan seçin (örneğin, 1GB RAM / 1 CPU).
4. Veri Merkezi Bölgesi: Kullanıcılarınıza en yakın bölgeyi seçin.
5. Kimlik Doğrulama: SSH anahtarı ekleyin veya oluşturun. Bu, Droplet’inize güvenli bir şekilde bağlanmanızı sağlar. Şifre ile giriş yapmak yerine SSH anahtarları kullanmak her zaman daha güvenlidir.
6. Droplet Oluştur: Droplet’inizi oluşturun.

Sunucu Yapılandırması ve Gerekli Yazılımların Kurulumu

Droplet oluşturulduktan sonra, SSH ile bağlanın:

ssh root@your_droplet_ip_address

Sunucuyu güncelleyin ve gerekli yazılımları kurun:

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv git nginx -y

Uygulama Kodunu Droplet’e Aktarma

Uygulama kodunuzu GitHub gibi bir sürüm kontrol sistemine yüklediyseniz, Droplet üzerinde klonlayabilirsiniz:

git clone https://github.com/your_username/my_auth_api.git
cd my_auth_api

Eğer yerel olarak geliştirdiyseniz, scp komutu ile aktarabilirsiniz:

scp -r my_auth_api root@your_droplet_ip_address:/var/www/

Sonra Droplet’e bağlanıp /var/www/my_auth_api dizinine gidin.

Sanal ortamı kurun ve bağımlılıkları yükleyin:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

.env dosyanızı oluşturun ve hassas bilgileri (veritabanı bağlantı dizesi, gizli anahtar) buraya ekleyin. Bu dosyanın git deposuna yüklenmediğinden emin olun (.gitignore kullanın).

nano .env

İçeriği yerel .env dosyanızdaki gibi doldurun.

DigitalOcean Managed Database Oluşturma ve Yapılandırma

1. DigitalOcean Kontrol Paneli: “Create” -> “Databases” seçeneğini tıklayın.
2. Veritabanı Motoru: PostgreSQL seçin.
3. Plan ve Bölge: Droplet’inizle aynı bölgede ve uygun bir planı seçin.
4. Veritabanı Oluştur: Veritabanınızı oluşturun.
5. Bağlantı Bilgileri: Veritabanı oluşturulduktan sonra, bağlantı bilgilerini (host, port, user, password, database name) alacaksınız. Bu bilgileri .env dosyasındaki DATABASE_URL değişkenine doğru formatta girin:
postgresql://user:password@host:port/database_name

Güvenlik: DigitalOcean Managed Database’ler varsayılan olarak güvenlidir. Ancak, Droplet’inizin IP adresini veritabanının “Güvenilen Kaynaklar” listesine eklemeniz gerekebilir. Bu, yalnızca Droplet’inizin veritabanına erişmesine izin verir.

Veritabanı bağlantısını test etmek için:

python3
>>> from app import app, db
>>> with app.app_context():
...     db.create_all() # Eğer tablolarınız yoksa oluşturur
...     from models import User
...     # Test amaçlı bir kullanıcı ekleyebilirsiniz
...     # new_user = User(username='testuser', password='password123')
...     # db.session.add(new_user)
...     # db.session.commit()
...     # print(User.query.all())

Gunicorn ile Uygulamayı Çalıştırma

Gunicorn, Python WSGI (Web Server Gateway Interface) uygulamaları için bir HTTP sunucusudur. Flask uygulamasını Nginx arkasında çalıştırmak için Gunicorn kullanacağız.

pip install gunicorn

Gunicorn’ı bir systemd servisi olarak yapılandırarak uygulamanın arka planda sürekli çalışmasını ve sunucu yeniden başlatıldığında otomatik olarak başlamasını sağlayabiliriz.

/etc/systemd/system/myapi.service adında bir dosya oluşturun:

sudo nano /etc/systemd/system/myapi.service

İçeriği aşağıdaki gibi doldurun (kullanıcı adınızı ve uygulama dizininizi doğru ayarlayın):

[Unit]
Description=Gunicorn instance to serve my_auth_api
After=network.target

[Service]
User=root # veya kendi kullanıcı adınız
Group=www-data # veya kendi grubunuz
WorkingDirectory=/var/www/my_auth_api
Environment="PATH=/var/www/my_auth_api/venv/bin"
ExecStart=/var/www/my_auth_api/venv/bin/gunicorn --workers 3 --bind unix:myapi.sock -m 007 app:app
StandardOutput=append:/var/log/gunicorn_myapi.log
StandardError=append:/var/log/gunicorn_myapi.log
Restart=always

[Install]
WantedBy=multi-user.target

* WorkingDirectory: Uygulama kodunuzun bulunduğu dizin.
* Environment="PATH=...": Sanal ortamınızın yolunu belirtir.
* ExecStart: Gunicorn’ı çalıştıran komut. --workers 3 3 adet worker süreci başlatır, --bind unix:myapi.sock Gunicorn’ın bir Unix soketi üzerinden dinlemesini sağlar (Nginx bu soket üzerinden iletişim kuracak). app:app ise Flask uygulamanızın (app.py dosyasındaki app objesi) yolunu belirtir.

Servisi etkinleştirin ve başlatın:

sudo systemctl daemon-reload
sudo systemctl start myapi
sudo systemctl enable myapi
sudo systemctl status myapi # Durumunu kontrol edin

Nginx ile Ters Proxy ve SSL

Nginx, Gunicorn’ın önünde bir ters proxy görevi görecek, gelen HTTP/HTTPS isteklerini Gunicorn’a yönlendirecek ve SSL sonlandırması sağlayacaktır.

Nginx yapılandırma dosyasını oluşturun:

sudo nano /etc/nginx/sites-available/myapi

İçeriği aşağıdaki gibi doldurun (alan adınızı your_domain.com ile değiştirin):

server {
    listen 80;
    server_name your_domain.com www.your_domain.com your_droplet_ip_address;

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/my_auth_api/myapi.sock;
    }
}

Yapılandırma dosyasını etkinleştirin ve Nginx’i yeniden başlatın:

sudo ln -s /etc/nginx/sites-available/myapi /etc/nginx/sites-enabled/
sudo nginx -t # Yapılandırma sentaksını kontrol et
sudo systemctl restart nginx

Şimdi API’nize HTTP üzerinden erişebiliyor olmalısınız (IP adresi veya alan adı ile).

SSL Sertifikası (HTTPS): API’nizin güvenliği için HTTPS kullanmak zorunludur. Let’s Encrypt ve Certbot ile ücretsiz SSL sertifikası alabilirsiniz:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Certbot, Nginx yapılandırmanızı otomatik olarak güncelleyecek ve SSL sertifikasını kuracaktır. Ayrıca sertifikanın otomatik yenilenmesini de ayarlayacaktır.

Güvenlik Duvarı (Firewall) Yapılandırması

DigitalOcean kontrol panelinden veya ufw (Uncomplicated Firewall) kullanarak Droplet’inizin güvenlik duvarını yapılandırın.

DigitalOcean Firewall:
* Gelen Kurallar (Inbound Rules):
* SSH (Port 22): Yalnızca kendi IP adresinizden erişime izin verin (veya güvenli bir IP aralığı).
* HTTP (Port 80): Her yerden erişime izin verin.
* HTTPS (Port 443): Her yerden erişime izin verin.
* PostgreSQL (Port 5432) veya MySQL (Port 3306): Yalnızca Droplet’inizin özel IP adresinden erişime izin verin (eğer Managed Database kullanıyorsanız).

UFW (Droplet İçinden):

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full' # HTTP ve HTTPS için
sudo ufw enable
sudo ufw status

Bu adımlar, API’nizin DigitalOcean üzerinde güvenli bir şekilde çalışmasını sağlayacaktır.

Ek Güvenlik ve İyileştirmeler

API’nizi dağıttıktan sonra, daha fazla güvenlik ve performans iyileştirmesi düşünebilirsiniz.

Rate Limiting (Oran Sınırlama)

API’nize gelen istek sayısını sınırlayarak DDoS saldırılarını, brute-force denemelerini ve aşırı kaynak tüketimini önleyebilirsiniz. Nginx, bu amaçla kullanılabilecek yerleşik limit_req modülüne sahiptir.

Örnek Nginx yapılandırması:

# İstekleri IP adresine göre sınırla: 10r/s (saniyede 10 istek)
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
    # ...
    location / {
        limit_req zone=mylimit burst=20 nodelay; # 20 isteğe kadar patlamaya izin ver, gecikme yok
        # ...
    }
}

CORS Politikaları

Eğer API’niz farklı bir alan adından gelen web uygulamaları tarafından kullanılacaksa, CORS (Cross-Origin Resource Sharing) politikalarını yapılandırmanız gerekir. Flask-CORS gibi kütüphanelerle veya Nginx üzerinden bu ayarları yapabilirsiniz.

# app.py (Flask-CORS ile)
from flask_cors import CORS

...

app = Flask(__name__) CORS(app, resources={r"/*": {"origins": "https://your_frontend_domain.com"}}) # Belirli bir domainden gelen isteklere izin ver

CORS(app) # Tüm domainlere izin ver (Geliştirme için uygun, üretimde dikkatli olun)

Loglama ve İzleme

API’nizin sağlığını ve güvenlik olaylarını takip etmek için kapsamlı loglama ve izleme önemlidir. Gunicorn ve Nginx kendi log dosyalarını üretir. Bu logları düzenli olarak kontrol etmeli veya DigitalOcean’ın Monitoring hizmeti gibi araçlarla entegre etmelisiniz. Hataları ve anormal davranışları tespit etmek için log analizi araçları kullanmak faydalı olacaktır.

Otomatik Ölçeklendirme ve Yük Dengeleyiciler

Uygulamanızın trafiği arttığında, tek bir Droplet yetersiz kalabilir. DigitalOcean Load Balancers ve Droplet grupları ile uygulamanızı otomatik olarak ölçeklendirebilir, birden fazla Droplet arasında trafiği dağıtarak yüksek erişilebilirlik ve performans sağlayabilirsiniz. Bu, daha büyük ve kritik uygulamalar için olmazsa olmazdır.

Ortam Değişkenleri ve Gizli Anahtarların Yönetimi

Hassas bilgileri (veritabanı şifreleri, API anahtarları, JWT gizli anahtarları) doğrudan kod içinde tutmaktan kaçının. .env dosyaları veya DigitalOcean’ın “Secrets” gibi daha gelişmiş çözümlerle bu bilgileri güvenli bir şekilde yönetin. python-dotenv kütüphanesi, .env dosyasındaki değişkenleri uygulamanıza yüklemenizi sağlar.

Sonuç

DigitalOcean üzerinde kimlik doğrulamalı bir API oluşturmak, uygulamanızın güvenliğini sağlamak ve veri bütünlüğünü korumak için kritik bir adımdır. Bu makalede, JWT tabanlı kimlik doğrulama mekanizmasını kullanarak Python Flask ile bir API geliştirme sürecini, ardından bu API’yi DigitalOcean Droplet üzerinde Gunicorn ve Nginx ile nasıl dağıtacağımızı adım adım inceledik. Managed Databases gibi DigitalOcean servisleri, veritabanı yönetim yükünü hafifleterek geliştiricilerin ana odak noktasına yoğunlaşmasını sağlar.

Güvenli bir API sadece kimlik doğrulama ile sınırlı değildir; aynı zamanda HTTPS kullanımı, güvenlik duvarı yapılandırması, oran sınırlama, düzenli güncellemeler ve kapsamlı loglama gibi ek güvenlik önlemlerini de gerektirir. DigitalOcean’ın sunduğu esnek ve güçlü altyapı, bu gereksinimleri karşılamak ve API’nizi güvenli, ölçeklenebilir ve yüksek performanslı bir şekilde dağıtmak için ideal bir platform sunar. Bu adımları takip ederek, kendi güvenli ve kimlik doğrulamalı API’nizi DigitalOcean üzerinde başarıyla hayata geçirebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık