Hassas verileri işleyen dahili API'lar oluşturmak, sağlam kimlik doğrulama mekanizmaları gerektirir. Dışa dönük hizmetler genellikle standart API anahtarlarına güvenirken, dahili iş akışları daha ince ayarlı kontrol ve dinamik kimlik bilgisi yönetimi gerektirir. Windmill, bu betikleri çalıştırmak için güçlü bir ortam sağlar, ancak bunları etkili bir şekilde güvence altına almak, OAuth2 ve JSON Web Token (JWT) gibi modern kimlik doğrulama protokollerini iş akışı mantığınıza doğrudan nasıl entegre edeceğinizi derinlemesine anlamayı gerektirir.
Neden Standart API Anahtarları Yetersiz Kalır
Geleneksel statik API anahtarları, mikroservis mimarilerinde önemli güvenlik riskleri oluşturur. Kesinti olmadan döndürmeleri zordur, kullanıcıya özgü bağlam eksikliği yaşarlar ve sınırlı kapsayıcı kontrol sunarlar. Buna karşılık, OAuth2 ve JWT, durumdan bağımsız, süreli ve kapsama özgü erişim jetonları sağlar. Bu protokolleri Windmill betiklerine gömerek, her iş akışı çalıştırmasının en az yetki erişim kontrolleri altında gerçekleşmesini ve dahili altyapınızın saldırı yüzeyinin azaltılmasını sağlarsınız.
OAuth2 İstemci Kimlik Bilgileri Akışını Uygulama
İstemci Kimlik Bilgileri akışı, Windmill'de sunucu-sunucu iletişimi için idealdir. Bu yöntem, iş akışı betiğinizin kullanıcı etkileşimi olmadan yetkilendirme sunucusundan bir erişim jetonu istemesine olanak tanır. Aşağıda, bu akışı güvenli bir şekilde yönetmek için Windmill betiği içinde Python kullanan pratik bir örnek bulunmaktadır.
import requests
import json
def get_access_token(client_id, client_secret, token_url):
"""
İstemci Kimlik Bilgileri yetkisi kullanarak bir OAuth2 erişim jetonu alır.
"""
response = requests.post(
token_url,
data={
'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': client_secret
},
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
response.raise_for_status()
return response.json().get('access_token')
# Windmill betiğinde kullanım örneği
def main(client_id: str, client_secret: str, token_url: str, target_api_url: str):
access_token = get_access_token(client_id, client_secret, token_url)
# Jetonu sonraki API çağrısında kullanın
result = requests.get(
target_api_url,
headers={'Authorization': f'Bearer {access_token}'}
)
return json.loads(result.text)
İş Akışı Girdilerinde JWT Doğrulama
Windmill iş akışlarınız web kancaları (webhooks) veya diğer hizmetler tarafından tetiklendiğinde, herhangi bir mantık çalıştırmadan önce istek başlıklarında sağlanan JWT'yi doğrulamalısınız. Bu, yalnızca güvenilir kaynakların iş akışlarınızı tetikleyebileceğini garanti eder. Python'un PyJWT kütüphanesi bu görev için mükemmeldir.
import jwt
import os
def validate_jwt(token: str, secret_key: str):
"""
Ortak bir gizli anahtar kullanarak bir JWT jetonunu doğrular.
"""
try:
payload = jwt.decode(
token,
secret_key,
algorithms=["HS256"]
)
return payload
except jwt.ExpiredSignatureError:
raise ValueError("Token has expired")
except jwt.InvalidTokenError:
raise ValueError("Invalid token")
def main(token: str):
secret = os.environ.get('JWT_SECRET', 'your-secret-key')
payload = validate_jwt(token, secret)
# Yükten (payload) kullanıcı kimliğini veya rolünü çıkarın
user_id = payload.get('sub')
return {'status': 'ok', 'user_id': user_id}
Gizli Bilgi Yönetimi İçin En İyi Uygulamalar
İstemci kimlikleri, gizli anahtarlar veya JWT anahtarları gibi gizli bilgileri asla Windmill betiklerinizde sabit kod olarak (hardcode) kullanmayın. Bunun yerine, Windmill'in yerleşik gizli bilgi yönetimini veya ortam değişkenlerini kullanın. Bu, hassas verilerin dinlenme halindeyken şifreli kalmasını ve çalışma zamanında güvenli bir şekilde enjekte edilmesini sağlar. Ayrıca, olası bir jeton sızıntısının etkisini en aza indirmek için mümkün olan her yerde kısa ömürlü jetonlar uygulayın.
Sonuç
Windmill içinde dahili API'ları güvence altına almak, statik anahtarlardan dinamik, protokol odaklı kimlik doğrulamaya geçişi gerektirir. Servis-servis iletişimi için OAuth2 ve istek doğrulaması için JWT entegre ederek, dayanıklı ve güvenli bir iş akışı otomasyonu altyapısı oluşturursunuz. Bu uygulamalar yalnızca verilerinizi korumakla kalmaz, aynı zamanda karmaşık mikroservis manzaralarında erişim kontrollerinin yönetimini de basitleştirir.