Cloudflare ve MCP: Kurumsal MCP Sunucularını Güvence Altına Alma
MCP (Model Context Protocol) sunucuları artık sadece localhost'ta değil, uzak sunucularda da çalışıyor. Peki bu sunuculara erişimi nasıl kontrol edeceksiniz? Cloudflare Zero Trust, tam da bu problemi çözmek için AI Controls adı altında üç güçlü araç sunuyor.
TL;DR - Hızlı Karar Rehberi
- Birden fazla MCP sunucusunu tek endpoint'te toplamak istiyorsanız: MCP Server Portals
- MCP sunucusuna OAuth ile güvenli erişim sağlamak istiyorsanız: Access for SaaS
- MCP sunucusunun şirket içi uygulamalara erişmesini istiyorsanız: Linked Apps
Cloudflare AI Controls Nedir?
Cloudflare Zero Trust platformunda "AI Controls" adlı yeni bir bölüm var. Bu bölüm üç ana özellik sunuyor:
AI Controls içindeki araçlar:
- MCP Server Portals (Beta): Birden fazla MCP sunucusunu tek endpoint'te birleştirir
- Access for SaaS: OAuth/OIDC ile MCP sunucu güvenliği sağlar
- Linked Apps: MCP'den şirket içi uygulamalara güvenli erişim
Şimdi her birini detaylıca inceleyelim.
1. MCP Server Portals (Beta)
Ne İşe Yarar?
MCP Server Portal, birden fazla MCP sunucusunu tek bir HTTP endpoint altında birleştiren bir "gateway" görevi görür. Claude Desktop veya VS Code'dan tek bir URL'e bağlanıp, arka planda birçok farklı MCP sunucusuna erişebilirsiniz.
Mimarisi
Yapı şöyle çalışır:
- MCP Client (Claude Desktop, VS Code) → portal.example.com/mcp → Cloudflare Access
- Cloudflare Access içinde MCP Server Portal bulunur
- Portal, arka planda GitHub MCP Server, Slack MCP Server ve Database MCP Server'a bağlanır
- Kullanıcı tek endpoint üzerinden tüm sunuculara erişir
Temel Avantajları
Tek Endpoint: Kullanıcılar tek bir URL üzerinden tüm sunuculara erişir
Merkezi Yetkilendirme: Access Policy ile kimin neye erişeceğini belirlersiniz
Tool Seçimi: Her portal için hangi tool ve prompt'ların aktif olacağını seçebilirsiniz
Loglama: Tüm istekler merkezi olarak loglanır
Kurulum Adımları
Adım 1: MCP Sunucusu Ekleme
- Cloudflare One Dashboard → Access Controls → AI Controls
- "MCP servers" sekmesine gidin
- "Add an MCP server" butonuna tıklayın
- Sunucu bilgilerini girin:
{
"name": "My GitHub MCP Server",
"server_id": "github-mcp-01",
"http_url": "https://github-mcp.example.com/sse",
"access_policies": ["Allow Engineering Team"]
}
Adım 2: Portal Oluşturma
- "Add MCP server portal" butonuna tıklayın
- Portal adı ve subdomain belirleyin
- Portala eklenecek MCP sunucularını seçin
- Access Policy tanımlayın
Adım 3: Client Konfigürasyonu
{
"mcpServers": {
"company-portal": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://portal.yourcompany.com/mcp"
]
}
}
}
Sunucu Durumları
Ready: Sunucu senkronize, kullanıma hazır - Aksiyon gerekmez
Waiting: Tool ve prompt'lar senkronize ediliyor - Bekleyin
Error: Kimlik doğrulama hatası - Yeniden authenticate edin
User Auth Seçenekleri
Portal oluştururken "Require user auth" seçeneği var:
- Enabled (Varsayılan): Her kullanıcı kendi hesabıyla MCP sunucusuna login olur
- Disabled: Tüm kullanıcılar admin credential'ı üzerinden erişir
2. Access for SaaS - MCP OAuth Güvenliği
Ne İşe Yarar?
MCP sunucunuzu doğrudan OAuth ile korumak istiyorsanız, Cloudflare Access'i OAuth provider olarak kullanabilirsiniz. Kullanıcılar MCP client'tan bağlandığında şirketin Identity Provider'ına (Okta, Google, Azure AD) yönlendirilir.
Akış Diyagramı
OAuth akışı şöyle çalışır:
- MCP Client → MCP Server'a bağlanmak ister
- MCP Server (Cloudflare Workers) → Cloudflare Access'e yönlendirir
- Cloudflare Access → Identity Provider'a (Google, Okta, Azure AD, GitHub) yönlendirir
- Kullanıcı login olur → access_token alınır
- MCP Client artık authenticated durumda
Workers ile MCP Server Deploy Etme
Cloudflare'in örnek projesini kullanarak hızlıca başlayabilirsiniz:
# Projeyi oluştur
npm create cloudflare@latest -- mcp-server-cf-access \
--template=cloudflare/ai/demos/remote-mcp-cf-access
cd mcp-server-cf-access
# KV namespace oluştur (OAuth token'ları için)
npx wrangler kv namespace create "OAUTH_KV"
wrangler.jsonc dosyasına KV binding ekleyin:
{
"kv_namespaces": [
{
"binding": "OAUTH_KV",
"id": "<YOUR_KV_NAMESPACE_ID>"
}
]
}
Access for SaaS Uygulaması Oluşturma
- Cloudflare One → Access Controls → Applications
- "Add an application" → SaaS seçin
- OIDC protokolünü seçin
- Redirect URL'i girin:
https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback
- Şu değerleri not edin:
- Client ID
- Client Secret
- Token Endpoint
- Authorization Endpoint
- Key Endpoint
Worker Secrets Tanımlama
# Her birini tek tek ekleyin
wrangler secret put ACCESS_CLIENT_ID
wrangler secret put ACCESS_CLIENT_SECRET
wrangler secret put ACCESS_TOKEN_URL
wrangler secret put ACCESS_AUTHORIZATION_URL
wrangler secret put ACCESS_JWKS_URL
# Cookie şifreleme anahtarı
openssl rand -hex 32 # Çıktıyı kopyalayın
wrangler secret put COOKIE_ENCRYPTION_KEY
Deploy ve Test
# Deploy
npx wrangler deploy
# Test için Workers AI Playground kullanın
# https://playground.ai.cloudflare.com/
# URL: https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp
3. Linked Apps - MCP'den Şirket İçi Uygulamalara Erişim
Ne İşe Yarar?
MCP sunucunuzun şirket içi uygulamalara (wiki, dashboard, internal API) erişmesi gerekiyorsa, Linked Apps özelliğini kullanırsınız. Bu, bir OAuth token'ının başka bir uygulamaya yetki vermesini sağlar.
Kullanım Senaryosu
Linked Apps akışı:
- MCP Client (VS Code) → MCP Server (Internal Tools) → OAuth token alır
- Token, Cloudflare Access'e gönderilir (Token Validator)
- Cloudflare Access, token'ı doğrularsa şirket içi uygulamalara erişim verir:
- Admin Dashboard
- Company Wiki
- Internal API
Kurulum Adımları
Adım 1: MCP Sunucusu için Access for SaaS Kurulumu
Önce MCP sunucunuzu Access for SaaS ile koruyun (yukarıdaki bölüme bakın).
Adım 2: Linked App Token Policy Oluşturma
- Cloudflare One → Access Controls → Applications
- Şirket içi uygulamayı bulun (örn: internal-wiki.company.com)
- Yeni bir Access Policy ekleyin:
- Action: Service Auth
- Selector: Linked App Token
- Value: mcp-server-cf-access (SaaS app adı)
Adım 3: MCP Server'ı Yapılandırma
MCP sunucunuz, her API isteğinde OAuth token'ı header olarak göndermelidir:
import httpx
class MCPServerWithLinkedApps:
def __init__(self, access_token: str):
self.access_token = access_token
async def call_internal_api(self, endpoint: str):
"""Şirket içi API'ya token ile erişim"""
async with httpx.AsyncClient() as client:
response = await client.get(
f"https://internal-api.company.com{endpoint}",
headers={
"Authorization": f"Bearer {self.access_token}"
}
)
return response.json()
@mcp.tool()
async def get_wiki_page(self, page_id: str) -> str:
"""Company wiki'den sayfa çeker"""
data = await self.call_internal_api(f"/wiki/pages/{page_id}")
return data["content"]
Authorization Akışı
Adım adım akış:
- Kullanıcı MCP Client'tan bağlanır
- MCP Server, Access for SaaS üzerinden OAuth yapar
- Kullanıcı Identity Provider'a login olur
- MCP Server, access_token alır
- MCP Server, şirket içi API'ya istek yapar (
Authorization: Bearer <access_token>) - Cloudflare Access, token'ı doğrular: Token geçerli mi? Token, linked SaaS app'ten mi geldi?
- İstek başarılı veya 401/403 döner
Bilinen Kısıtlamalar
Sadece Self-Hosted Apps: SaaS uygulamalarında çalışmaz
JWT Bazlı Auth: Uygulama, Cloudflare Access JWT'sine güvenmeli
Uygulama Katmanı Auth: Uygulama kendi auth'u varsa sorun çıkabilir
Karşılaştırma: Hangi Çözümü Seçmeli?
5+ MCP sunucusu var, tek endpoint istiyorsanız: MCP Server Portals - Merkezi yönetim ve loglama sağlar
Tek MCP sunucusu, OAuth güvenliği istiyorsanız: Access for SaaS - Doğrudan OIDC entegrasyonu sunar
MCP'den internal API'lara erişim gerekiyorsa: Linked Apps - Token delegation yapar
Hepsi birden gerekiyorsa: Üçünü de kombine kullanın - En güvenli kurulum
Pratik Örnek: Kurumsal MCP Kurulumu
Örnek mimari:
- Developer (VS Code) → MCP Server Portal (portal.company.com/mcp) üzerinden bağlanır
- Portal, Access Policy ile Engineering Team'e erişim verir
- Portal arkasında 3 MCP sunucusu bulunur:
- GitHub MCP (Public)
- Jira MCP (Public)
- Internal Tools MCP (Access for SaaS + Linked Apps ile korumalı)
- Internal Tools MCP, şirket içi uygulamalara erişir:
- Internal Wiki
- Admin Dashboard
- Customer Database
VS Code Konfigürasyonu
{
"mcpServers": {
"company-ai-tools": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://portal.company.com/mcp"
]
}
}
}
Sorun Giderme
"No allowed servers available" Hatası
Neden?
- Portal'a bağlı sunucularda Access Policy eksik
- Admin auth süresi dolmuş
Çözüm:
- Her MCP sunucusunun bir Access Policy'si olduğundan emin olun
- Sunucu durumunu kontrol edin (Ready olmalı)
- Error varsa, sunucuyu yeniden authenticate edin
Portal URL Authentication Sorunu
Neden?
- Portal'da Access Policy tanımlı değil
- Başka bir Cloudflare yapılandırması (Workers, Page Rules) çakışıyor
Çözüm:
- Portal'a Access Policy ekleyin
- Portal URL'inin başka yapılandırmalarla çakışıp çakışmadığını kontrol edin
Session Temizleme
MCP client'ın yeniden authenticate olmasını istiyorsanız:
rm -rf ~/.mcp-auth
Bu komut tüm mcp-remote@latest kullanan sunucuların session'ını temizler.
Sonuç
Cloudflare'in AI Controls özellikleri, MCP sunucularını kurumsal düzeyde yönetmek için güçlü araçlar sunuyor:
- MCP Server Portals: Birden fazla MCP sunucusunu tek endpoint'te birleştirin
- Access for SaaS: OAuth ile güvenli erişim sağlayın
- Linked Apps: MCP sunucusunun şirket içi uygulamalara erişmesini sağlayın
Bu üç özelliği birlikte kullanarak, AI araçlarınızı güvenli ve yönetilebilir bir şekilde kurumsal ortamınıza entegre edebilirsiniz.
Kaynaklar: