2026-08-19devopsn

AWS Certificate Manager ACME Desteği ile EC2 Üzerinde SSL Otomasyonu

A

AWS Certificate Manager ACME Desteği ile EC2 Üzerinde SSL Otomasyonu

Yıllar boyunca, bir AWS EC2 bulut sunucusunda çalışan uygulamaları güvenli hale getirmek, Certbot ile birlikte Let's Encrypt kurmak anlamına geliyordu. Bu yaklaşım kusursuz çalışsa da, harici bir Sertifika Otoritesine (CA) güvenmeyi ve sunucu üzerindeki yapılandırmaları manuel olarak yönetmeyi gerektiriyordu.

Kısa süre önce AWS, AWS Certificate Manager (ACM) için ACME desteğini duyurdu. Bu değişiklik, doğrudan TLS sonlandırması (TLS termination) yapan iş yükleri için SSL sertifikalarını sorunsuz bir şekilde hazırlamanıza ve yenilemenize olanak tanıyarak iki dünyanın da en iyisini sunuyor: Certbot'un otomasyonu ve ACM'in kurumsal düzeydeki yönetişimi.

Bu rehberde, AWS ACM'in yeni ACME yeteneğini kullanarak EC2 üzerinde çalışan bir Nginx sunucusu için SSL sertifikasının nasıl dağıtılacağını adım adım inceleyeceğiz. Certbot gibi standart ACME istemcilerine zaten aşinaysanız, bu iş akışına uyum sağlamak inanılmaz derecede basittir; çünkü en büyük değişiklik ACME istemcisini Let's Encrypt yerine AWS'ye yönlendirmektir.

Mimariye Genel Bakış

AWS Certificate Manager aracılığıyla verilen bir SSL sertifikasını kullanarak bir EC2 bulut sunucusunda çalışan Nginx uygulamasını güvence altına alacağız.

Bu süreç için mimari şu şekilde çalışır:

  1. Bir Ubuntu EC2 sunucusu Nginx web sunucusunu çalıştırır.
  2. Sunucuya Certbot (ACME istemcisi olarak) kurulur.
  3. Certbot, herkese açık bir CA ile iletişim kurmak yerine AWS Certificate Manager ACME Uç Noktası (Endpoint) ile iletişim kurar.
  4. Sertifikalar Amazon Trust Services CA tarafından verilir ve Nginx'in kullanması için güvenli bir şekilde sunucuda saklanır.

Geleneksel ACM entegrasyonlarından (genellikle bir Application Load Balancer veya AWS CloudFront kullanan yapılar) farklı olarak, Nginx HTTPS sonlandırmasını gerçekleştirdiği için bu kurulumda sertifika doğrudan EC2 sunucusuna yüklenir.

Ön Koşullar

Kuruluma geçmeden önce aşağıdaki kaynakların hazır olduğundan emin olun:

  • Aktif bir AWS hesabı
  • Çalışır durumda bir Ubuntu EC2 sunucusu
  • Kayıtlı bir alan adı (domain)
  • Alan adınızdan gelen trafiği EC2 sunucusunun genel IP adresine (Public IP) yönlendiren bir DNS kaydı
  • Sunucuya SSH erişimi
  • AWS Certificate Manager'ı yapılandırmak için uygun AWS IAM izinleri

Bu gösterim için şunları varsayacağız:

  • Alan Adı: app.example.com
  • İşletim Sistemi: Ubuntu 24.04
  • Web Sunucusu: Nginx

Adım 1: EC2 Üzerine Nginx Kurulumu

İlk olarak, EC2 sunucunuza SSH üzerinden bağlanın. Paket yöneticinizi güncelleyin ve Nginx'i kurun.

sudo apt update
sudo apt install nginx -y

Kurulum tamamlandıktan sonra, Nginx servisinin aktif olarak çalıştığını doğrulayın:

sudo systemctl status nginx

Web tarayıcınızda http://app.example.com adresine gittiğinizde varsayılan Nginx karşılama sayfasını görüyorsanız, bir sonraki adıma geçmeye hazırsınız demektir.

Adım 2: Bir ACM ACME Uç Noktası (Endpoint) Oluşturma

Sırada, AWS'yi ACME isteklerini kabul edecek şekilde yapılandırmak var.

  1. AWS Management Console'u açın.
  2. AWS Certificate Manager hizmetine gidin.
  3. Yeni ACME Endpoints yapılandırma bölümünü bulun.
  4. Create ACME Endpoint (ACME Uç Noktası Oluştur) butonuna tıklayın.

Belirgin bir uç noktası adı verin, izin verilen alan adlarını belirtin ve tercih ettiğiniz doğrulama yöntemini seçin.

AWS uç noktasını hazırladıktan sonra, aşağıdaki kimlik bilgilerini dikkatlice not edin:

  • ACME Directory URL
  • External Account Binding (EAB) Key ID
  • EAB Secret

EC2 sunucunuzda Certbot'u yapılandırmak için bu değerlere ihtiyacınız olacak.

Adım 3: Certbot Kurulumu

EC2 sunucu terminalinize dönün ve Snap kullanarak Certbot'u kurun.

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot

Certbot sürümünü kontrol ederek kurulumun başarılı olduğunu doğrulayın:

certbot --version

Adım 4: Certbot'u AWS ACM İçin Yapılandırma

Varsayılan olarak Certbot, Let's Encrypt ile iletişim kurmaya çalışır. Adım 2'de oluşturulan kimlik bilgilerini kullanarak Certbot'u yeni oluşturduğumuz ACM ACME uç noktasına yönlendirmemiz gerekiyor.

Yer tutucuları gerçek AWS bilgilerinizle değiştirerek aşağıdaki komutu çalıştırın:

certbot certonly \
  --server <AWS_ACME_DIRECTORY_URL> \
  --eab-kid <EAB_KEY_ID> \
  --eab-hmac-key <EAB_SECRET> \
  -d app.example.com

Bu komut çalıştırıldığında Certbot, Let's Encrypt'i atlayacak ve doğrudan AWS Certificate Manager ile görüşecektir.

Adım 5: Alan Adı Doğrulaması

ACME uç noktanızın yapılandırmasına bağlı olarak, Certbot sizden alan adı sahipliğini doğrulamanızı isteyecektir.

  • HTTP Challenge: ACME sunucusunun doğrulama dosyasını denetleyebilmesi için EC2 sunucunuzdaki 80 numaralı portun internete açık olduğundan emin olun.
  • DNS Challenge: Belirtilen TXT kaydını DNS sağlayıcınıza ekleyin.

Doğrulama başarılı olduğunda, AWS SSL sertifikasını yayınlar. Varlığını AWS Console içinde Certificate Manager altında doğrulayabilirsiniz.

Adım 6: Nginx'i HTTPS İçin Yapılandırma

Sertifika artık sunucunuzda güvenli bir şekilde saklandığına göre, Nginx'i onu kullanacak şekilde yapılandırmalısınız.

Nginx virtual host (sanal sunucu) dosyanızı açın ve SSL trafiğini yönetecek şekilde güncelleyin:

server {
    listen 443 ssl;
    server_name app.example.com;
    ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
    
    location / {
        proxy_pass http://localhost:8080;
    }
}

Sertifikayı AWS oluşturmuş olsa bile, Certbot dosyaları standart dizin yapısında yerel olarak depolar ve Nginx'in bunları yerel olarak okumasına olanak tanır.

Yapılandırma değişikliklerini uygulamak için Nginx servisini yeniden başlatın:

sudo systemctl restart nginx

Adım 7: Güvenli Bağlantıyı Doğrulama

Web tarayıcınızı açın ve https://app.example.com adresine gidin.

Artık geçerli bir SSL sertifikasına sahip, tarayıcı uyarıları olmayan, güvenli ve şifrelenmiş bir bağlantı gözlemlemelisiniz. Komut satırı üzerinden daha fazla doğrulama yapmak için sertifika ayrıntılarını test edebilirsiniz:

openssl s_client -connect app.example.com:443

Adım 8: Otomatik Sertifika Yenilemeyi Test Etme

ACME protokolünün birincil avantajlarından biri de el değmeden yapılan sertifika yenileme işlemidir. Yapılandırmanızın otomatik yenilemeler için hazır olduğundan emin olmak için bir test (dry-run) çalıştırın:

sudo certbot renew --dry-run

Başarılı olursa Certbot, sertifikanın süresi dolmadan önce gelecekteki yenilemeleri sorunsuz bir şekilde ele alacak ve operasyonel yükü önemli ölçüde azaltacaktır.

Neden Let's Encrypt Yerine ACM ACME Seçilmeli?

Let's Encrypt harika bir hizmet olmaya devam etse de, AWS ACM'nin ACME desteğine geçiş, AWS ekosistemine derinden yatırım yapan kurumsal ekipler için önemli faydalar sunar.

Temel avantajlar şunları içerir:

  • Merkezi Görünürlük: Altyapınızdaki tüm sertifikaları tek bir AWS panosundan görüntüleyin.
  • Erişim Kontrolü: Katı yönetişim politikalarını zorunlu kılmak için AWS IAM'den yararlanın.
  • Denetim: CloudTrail günlükleri (logları) aracılığıyla sertifika işlemlerini izleyin.
  • Metrikler: CloudWatch kullanarak kullanımı ve performansı izleyin.

Bu kurulum, Apache veya Nginx çalıştıran EC2 bulut sunucuları, kendi yönettiğiniz Kubernetes düğümleri, Docker konteynerleri ve hibrit şirket içi ortamlar gibi iş yüklerinin kendi TLS sonlandırmasını yönettiği mimariler için idealdir.

Sonuç

AWS Certificate Manager'a ACME desteğinin eklenmesi, Certbot'un basitliği ile AWS'nin sağlam yönetişimi arasındaki boşluğu etkili bir şekilde dolduruyor.

Sadece bir ACME uç noktası oluşturarak ve Certbot komutunuzdaki birkaç bayrağı (flag) ayarlayarak, ekibinizin halihazırda güvendiği otomatik iş akışlarından ödün vermeden EC2 barındırmalı SSL sertifikalarınızın yönetilebilirliğini, görünürlüğünü ve güvenliğini önemli ölçüde artırabilirsiniz.