AWS Türkçe Blog

Açık Ağdan Özel Ağa Güvenli Bağlantı: EC2 Instance Connect Endpoint ile Tanışın

Orijinal makale : Link

Amazon Sanal Özel Bulut (Amazon Virtual Private Cloud – VPC) içindeki bir Amazon Elastic Compute Cloud (Amazon EC2) sunucusuna internet üzerinden bağlanmaya çalıştığınızı düşünün. Tipik olarak, önce yöneticinizin VPC’nizdeki bir İnternet Ağ Geçidi (Internet Gateway – IGW) üzerinden kurduğu açık (public) IP adresine sahip bir ana bilgisayara (bastion host) bağlanmanız ve ardından hedefinize ulaşmak için bağlantı noktası yönlendirmeyi kullanmanız gerekir.

Bugün, sunucularınıza ve diğer VPC kaynaklarına internetten güvenli bir şekilde bağlanmanızı sağlayacak yeni bir özellik olan Amazon EC2 Instance Connect (EIC) Endpoint‘i (EIC Uç Noktası) kullanıma sunduk. EIC Endpoint ile artık kaynaklarınıza bağlanmak için VPC’nizde bir IGW’ye, kaynağınızda açık bir IP adresine, bir ana sunucuya veya herhangi bir aracıya ihtiyacınız yok. EIC Endpoint, kimlik ve ağ tabanlı erişim kontrollerini birleştirerek kuruluşunuzun güvenlik gereksinimlerini karşılamak için gereken izolasyon, kontrol ve loglamayı sağlar. Ek olarak kuruluş yöneticiniz, bağlantı için ana sunucuların bakımı ve yamalanması gibi operasyonel ek yüklerden de kurtulur. EIC Endpoint, AWS Management Console ve AWS Komut Satırı Arabirimi (AWS CLI) ile birlikte çalışır. Ayrıca, PuTTY ve OpenSSH gibi favori araçlarınızı kullanmaya devam etme esnekliği sağlar.

Bu yazıda, EIC Endpoint’in nasıl çalıştığına ve güvenlik kontrollerine genel bir bakış sunuyor, ilk EIC Endpoint oluşturma işleminizde size rehberlik ediyor ve EIC Endpoint üzerinden internetten bir sunucuya nasıl SSH yapılacağını gösteriyoruz.

EIC Endpoint ürününe genel bakış

EIC Endpoint, kimlik duyarlı bir TCP proxy (vekil sunucu) olarak geçmektedir. İki modu vardır: İlk olarak AWS CLI istemcisi, AWS Kimlik ve Erişim Yönetimi (IAM) kimlik bilgilerinizle iş makinenizden uç noktaya güvenli bir WebSocket tüneli oluşturmak için kullanılır. Bir tünel oluşturduktan sonra, tercih ettiğiniz istemciyi geri dönüş adresinize (127.0.0.1 veya localhost) yönlendirir ve her zamanki gibi bağlanırsınız. İkinci olarak, AWS CLI kullanılmadığında, Konsol size VPC’niz içindeki kaynaklara güvenli ve sorunsuz erişim sağlar. Kimlik doğrulama ve yetkilendirme, trafik VPC’ye ulaşmadan önce değerlendirilir. Aşağıdaki şekilde bir EIC Endpoint üzerinden bağlanan bir kullanıcı gösterilmektedir:

Figure 1 shows a user connecting to private EC2 instances within a VPC through an EIC Endpoint

Şekil 1. Bir EIC Uç Noktası üzerinden özel EC2 sunucularına bağlanan kullanıcı

EIC Endpoint’ler yüksek derecede esneklik sağlar. İlk olarak, VPC’nizin bir IGW veya NAT Ağ Geçidi kullanarak doğrudan internet bağlantısına sahip olmasını gerektirmezler. İkinci olarak, bağlanmak istediğiniz kaynakta herhangi bir ajana gerek yoktur ve üçüncü parti cihazlar gibi ajanları desteklemeyen kaynakların kolayca uzaktan yönetilmesine olanak tanır. Üçüncü olarak, mevcut iş akışlarını koruyarak kaynaklarınıza bağlanmak ve yönetmek için yerel iş makinenizde tercih ettiğiniz istemci yazılımını kullanmaya devam etmenizi sağlar. Son olarak, erişimi kontrol etmek için IAM ve Güvenlik Grupları (security groups) kullanılabilir; bu konuyu bir sonraki bölümde daha ayrıntılı olarak ele alacağız.

EIC Endpoints’in lansmanından önce AWS, açık ağ adres alanından bir VPC’ye erişimi daha dikkatli bir şekilde yönetmeye yardımcı olmak için iki temel hizmet sunuyordu. Bunlardan ilki, geçici SSH anahtarlarını bir sunucuya göndermek için IAM kimlik bilgilerini kullanan ve uzun ömürlü anahtarları gereksiz kılan bir mekanizma sağlayan EC2 Instance Connect‘tir. Ancak, şimdiye kadar EC2 Instance Connect, internet üzerinden bağlanırken sunucunuzda açık bir IP adresi gerektiriyordu. Bu lansmanla birlikte, EC2 Instance Connect’i EIC Uç Noktaları ile birlikte kullanabilir, iki özelliği birleştirerek açık internet ağına maruz kalmadan örneklerinize geçici anahtar tabanlı SSH bağlantısı sağlayabilirsiniz. EC2 Instance Connect ve EIC Uç Noktası tabanlı bağlantıya alternatif olarak AWS, sunuculara aracı tabanlı bağlantı sağlayan Systems Manager Session Manager‘ı (SSM) da sunar. SSM, kimlik doğrulama ve yetkilendirme için IAM kullanır ve bir ajanın çalışacak şekilde yapılandırılabileceği ortamlar için idealdir.

EIC Endpoint’in açık IP ağ alanından özel kaynaklara erişim sağladığı göz önüne alındığında, ilk EIC Endpoint’inizi oluşturmayı tartışmadan önce güvenlik kontrollerini ve yeteneklerini daha ayrıntılı olarak inceleyelim.

Güvenlik yetenekleri ve kontrolleri

VPC’lerindeki kaynakları internet üzerinden uzaktan yöneten birçok AWS müşterisi hala ilgili kaynaklarda açık IP adresleri ya da en iyi ihtimalle uzun ömürlü SSH anahtarlarıyla birleştirilmiş bir ana bilgisayar kullanma yaklaşımındadur. Açık IP’lerin kullanımı, IGW yönlendirme ve/veya güvenlik grupları kullanılarak bir şekilde kısıtlanabilir. Ancak dinamik bir ortamda bu kontrolleri yönetmek zor olabilir. Sonuç olarak, uzun ömürlü SSH anahtarlarının dikkatli yönetimi tek savunma katmanı olarak kalır, bu da en iyi çözüm değildir çünkü bu kontrollerin zaman zaman başarısız olduğunu biliyoruz ve bu nedenle katmanlı savunma yöntemleri önemlidir. Ana bilgisayarlar (bastion host) yardımcı olabilse de, altyapıyı yönetme, yamalama ve bakımını yapma gibi operasyonel ek yükleri önemli ölçüde artırırlar.

EIC Endpoint oluşturmak ve ayrıca endpoint’in güvenli tünel oluşturma teknolojisi aracılığıyla bir bağlantı kurmak için IAM yetkilendirmesi gereklidir. Hangi kullanıcıların, nasıl, ne zaman ve ne kadar süreyle bağlanabileceğini düzenleyen kimlik tabanlı erişim kontrollerinin yanı sıra güvenlik grupları gibi daha geleneksel ağ erişim kontrolleri de kullanılabilir. VPC kaynaklarınızla ilişkilendirilmiş güvenlik grupları erişim izni vermek/engellemek için kullanılabilir. İster IAM ilkeleri ister güvenlik grupları olsun, varsayılan davranış açıkça izin verilmediği sürece trafiği reddetmektir.

EIC Endpoint, kontrol düzlemi (control plane) ve veri düzlemi (data plane) için yetkilerin ayrılması açısından önemli güvenlik gereksinimlerini karşılar. Tüm EC2 IAM ayrıcalıklarına sahip bir yönetici, EIC Endpoint’leri (kontrol düzlemi) oluşturabilir ve kontrol edebilir. Ancak, EC2 Instance Connect IAM ayrıcalıklarına da (veri düzlemi) sahip olmadan bu endpoint’leri kullanamazlar. Buna karşılık, VPC kaynaklarına tünel açmak için EIC Endpoint kullanması gerekebilecek DevOps mühendislerinin bunu yapmak için kontrol düzlemi ayrıcalıklarına ihtiyacı yoktur. Her durumda, EIC Endpoint kullanan IAM sorumluları aynı AWS hesabının bir parçası olmalıdır (doğrudan veya hesaplar arası rol üstlenimi yoluyla). EIC Endpoint API’sini yapılandırmak ve bağlanmak için yapılan tüm API çağrıları AWS CloudTrail‘de kaydedildiğinden, güvenlik yöneticileri ve denetçileri endpoint etkinliğine ilişkin merkezi bir bakış elde eder. Veri düzlemi bağlantılarının kayıtları, isteği yapan IAM sorumlusunu, kaynak IP adresini, istenen hedef IP adresini ve hedef bağlantı noktasını içerir. Örnek bir CloudTrail kaydı için aşağıdaki şekle bakın.

Figure 2 shows a sample cloud trail entry for SSH data-plane connection for an IAMUser. Specific entry: Şekil 2. Örnek bir SSH veri düzlemi bağlantısı için kısmi CloudTrail kaydı

EIC Endpoint, belirli kuruluşlar için önemli bir güvenlik unsuru olan İstemci IP Korumasının – Client IP Preservation (diğer adıyla Kaynak IP Koruması – Source IP Preservation) isteğe bağlı kullanımını destekler. Örneğin, bağlandığınız kaynağın sizin belirli açık IP adresinize göre kapsamlandırılmış ağ erişim denetimlerine sahip olduğunu veya sunucu erişim kayıtlarınızın istemcinin “gerçek” IP adresini içermesi gerektiğini varsayalım. Bir endpoint oluştururken bu özelliği etkinleştirmeyi seçebilseniz de varsayılan olarak bu ayar kapalıdır. Kapalı olduğunda, endpoint aracılığıyla proxy yapılan bağlantılar, ağ paketlerinin kaynak IP alanında endpoint’in özel IP adresini kullanır. Bu varsayılan davranış, uç nokta aracılığıyla proxy’lenen bağlantıların yönlendirme tablolarınızın izin verdiği kadar erişim sağlamasına olanak tanır. Bununla birlikte bu ayarı ne şekilde yapılandırdığınızdan bağımsız olarak CloudTrail’in istemcinin gerçek IP adresini kaydettiğini unutmayın.

EIC Endpoint, kimlik tabanlı doğrulama ve yetkilendirmeyi geleneksel ağ ortamı denetimleriyle birleştirerek güvenliği sağlamlaştırır ve ayrıntılı erişim denetimi, kayıt tutma, izleme ve daha fazla kapsamlı savunma sağlar. Üstelik tüm bunları VPC’nizde interneti etkinleştiren bir altyapı gerektirmeden yaparak özel VPC kaynaklarına istenmeyen erişim olasılığını en aza indirir.

Başlarken

EIC Endpoint’inizi Oluşturma

VPC başına yalnızca bir endpoint gereklidir. Bir endpoint oluşturmak veya değiştirmek ve bir kaynağa bağlanmak için, bir kullanıcının gerekli IAM izinlerine sahip olması ve VPC kaynaklarınızla ilişkili tüm güvenlik gruplarının bağlantıya izin vermek için bir kuralı olması gerekir. Güvenlik gruplarının yapılandırılması ve örnek IAM izinleri hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.

Bir EIC Endpoint oluşturmak için AWS CLI veya Konsol kullanılabilir ve aşağıda AWS CLI gösterilmektedir. Konsolu kullanarak bir EIC Endpoint oluşturmak için dökümantasyona bakın.

AWS CLI ile EIC Endpoint Oluşturma

AWS CLI ile bir EIC Endpoint oluşturmak için, [SUBNET] yerine alt ağ kimliğinizi ve [SG-ID] yerine güvenlik grubu kimliğinizi yazarak aşağıdaki komutu çalıştırın:

aws ec2 create-instance-connect-endpoint \
    --subnet-id [SUBNET] \
    --security-group-id [SG-ID]

AWS CLI veya Konsolu kullanarak bir EIC Endpoint oluşturduktan ve kullanıcıya bir tünel oluşturmak için IAM izni verdikten sonra, bir bağlantı kurulabilir. Şimdi SSH kullanarak Linux sunucularına nasıl bağlanılacağını anlatacağız. Ancak, sunuculara RDP aracılığıyla bağlanmak için OpenTunnel API’sini de kullanabileceğinizi unutmayın.

SSH kullanarak Linux Sunucunuza bağlanma

EIC Endpoint’iniz VPC alt ağınızda kurulduğunda, SSH kullanarak bağlantı kurabilirsiniz. Geleneksel olarak, SSH kullanarak bir EC2 sunucusuna erişim, anahtar çiftleri ve ağ erişim kontrolleri tarafından kontrol edilir. EIC Endpoint ile, IAM politikası aracılığıyla ek bir kontrol katmanı etkinleştirilerek uzaktan erişim için gelişmiş bir güvenlik postürü sağlanır. Aşağıda SSH üzerinden bağlanmak için iki yöntem açıklanmaktadır.

Tek tıklama komutu

SSH anahtarları oluşturma ve değiştirme işlemlerinin operasyonel yükünü daha da azaltmak için AWS CLI üzerinden yeni ec2-instance-connect ssh komutunu kullanabilirsiniz. Bu yeni komutla, sunucunuza bağlanmanız için geçici anahtarlar oluşturuyoruz. Bu komutun OpenSSH istemcisinin ve AWS CLI’nin en son sürümünün kullanılmasını gerektirdiğini unutmayın. Bu komutu kullanmak ve bağlanmak için burada ayrıntılı olarak açıklanan IAM izinlerine ihtiyacınız vardır.

Yapılandırma tamamlandıktan sonra, aşağıdaki şekilde gösterilen yeni AWS CLI komutunu kullanarak bağlantı kurabilirsiniz:
Figure 3 shows the AWS CLI view if successfully connecting to your instance using the one-click command. When running the command, you are prompted to connect and can access your instance.

Şekil 3. Sunucunuza başarılı SSH bağlantısının ardından AWS CLI görünümü

AWS CLI’dan sunucunuza bağlanmayı test etmek için aşağıdaki komutu çalıştırabilirsiniz; burada [INSTANCE] EC2 sunucunuza ait kimlik bilgisidir:

aws ec2-instance-connect ssh --instance-id [INSTANCE]

Mevcut iş akışlarını sürdürmeniz gerekiyorsa bağlanmak için uzun ömürlü SSH kimlik bilgilerini kullanmaya devam edebileceğinizi unutmayın, bunu aşağıda göstereceğiz. Ancak dinamik, sık değiştirilen kimlik bilgilerinin genellikle daha güvenli olduğunu unutmayın.

Open-tunnel komutu

Standart araçlarla SSH kullanarak veya proxy komutunu kullanarak da bağlanabilirsiniz. Sunucunuza bir özel tünel (TCP proxy) kurmak için, aşağıdaki şekilde görebileceğiniz bir AWS CLI komutu çalıştırmanız gerekir:Figure 4 shows the AWS CLI view after running the aws ec2-instance-connect open-tunnel command and connecting to your instance.Şekil 4. EC2 sunucumuza bağlanmak için özel tünel oluşturan yeni SSH open-tunnel komutunu çalıştırdıktan sonra AWS CLI görünümü

Bağlantıyı test etmek için aşağıdaki komutu çalıştırabilirsiniz; burada [INSTANCE] EC2 sunucunuzun kimliği ve [SSH-KEY] SSH anahtarınızın konumu ve adıdır. SSH anahtarlarının kullanımıyla ilgili bilgi için Amazon EC2 anahtar çiftleri ve Linux sunucuları hakkındaki dokümantasyonumuzu inceleyin.

ssh ec2-user@[INSTANCE] \
    -i [SSH-KEY] \
    -o ProxyCommand='aws ec2-instance-connect open-tunnel \
    --instance-id %h'

EIC Endpoint’imizi yapılandırdıktan sonra, AWS CLI’yi kullanarak açık IP veya IGW olmadan EC2 sunucularımıza SSH ile bağlanabiliriz.

Sonuç

EIC Endpoint, IGW’ler, açık IP’ler, ajanlar ve ana bilgisayarlar olmadan özel alt ağlarda SSH veya RDP aracılığıyla sunucularınıza bağlanmak için güvenli bir çözüm sağlar. VPC’niz için bir EIC Endpoint yapılandırarak, mevcut istemci araçlarınızı veya Console/AWS CLI’yi kullanarak güvenli bir şekilde bağlanabilirsiniz. Daha fazla bilgi edinmek için EIC Endpoint dokümanlarını ziyaret edin.