VPC Uç Noktaları ve S3 Erişim Noktaları ile Amazon S3 Erişimini Yönetme
Birçok kuruluş uygulamalarını Amazon VPC kullanarak özel ağlarda (private network) çalıştırır ve bu uygulamaların Amazon S3 üzerinde depolanan verilere güvenli bir şekilde erişmesini sağlamaya ihtiyaç duyar. Farklı VPC'lerdeki uygulamaların erişmesi gereken paylaşımlı veri setleriniz olduğunda, erişimi ve izinleri yönetmek hızla büyük bir zorluğa dönüşebilir.
Bu rehberde, Amazon S3 üzerindeki paylaşılan veri setlerine erişim yönetimini basitleştirmek ve güvenliğini artırmak için S3 Erişim Noktalarını (Access Points) ve VPC Uç Noktası (Endpoint) Politikalarını birlikte kullanan bir yaklaşımı inceleyeceğiz.
VPC'ye özel (VPC-only) bir S3 Erişim Noktası oluşturup bunu VPC uç noktası politikanızda kullanarak verilerinizi izole edebilir ve yalnızca belirlediğiniz özel ağlardan erişilebilir olmasını sağlayabilirsiniz.
Amazon S3 VPC Uç Noktalarını Kullanma
Amazon S3 için VPC uç noktaları, İnternet Ağ Geçidi (Internet Gateway), NAT Ağ Geçidi veya genel (public) IP adresleri gerektirmeden VPC'nizi doğrudan S3'e bağlamanıza olanak tanır. Bu sayede son derece güvenilir ve güvenli bir bağlantı elde edersiniz.
Bir S3 VPC uç noktası oluşturduğunuzda, erişimi kontrol etmek için ona bir uç noktası politikası (endpoint policy) ekleyebilirsiniz. Çoğu zaman, VPC içindeki uygulamaların yalnızca belirli paketlere (bucket) erişebilmesini sağlamak için VPC uç noktası politikasında bu paketleri tek tek belirtmeye çalışılır.
Aşağıda, bir VPC içinden belirli bir S3 paketine erişime izin veren örnek bir VPC uç noktası politikası bulunmaktadır:
{
"Statement": [
{
"Sid": "Access-to-specific-bucket-only",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::benim_guvenli_paketim",
"arn:aws:s3:::benim_guvenli_paketim/*"
]
}
]
}
Bu yöntem işe yarasa da ölçeklenmesi zordur. Paket sayısı arttıkça, yeni bir S3 paketi oluşturulduğunda VPC uç noktası politikasını manuel olarak güncellemek can sıkıcı ve hataya açık hale gelir. İşte bu noktada S3 Erişim Noktaları daha iyi bir çözüm sunar.
S3 Erişim Noktaları (Access Points) Nedir?
S3 Erişim Noktaları, üzerinden yapılan tüm istekler için belirli izinleri ve ağ kontrollerini zorunlu kılmak amacıyla oluşturulan benzersiz ana bilgisayar adlarıdır (hostnames).
S3 Erişim Noktalarının temel özellikleri şunlardır:
- Benzersiz bir ana bilgisayar adı, bir AWS ARN'si ve bir AWS IAM kaynak politikası (resource policy) içerirler.
- Varsayılan olarak genel (public) erişimi engellerler.
- Bir AWS hesabına ve Bölgesine (Region) özgüdürler.
- Kullanıcılar veya uygulamalar için özel IAM izinleri uygulayabilirler.
- Veri erişimini özel ağınızla sınırlandırmak için yalnızca bir VPC'den gelen istekleri kabul edecek şekilde yapılandırılabilirler.
VPC uç noktası politikanızda bir Erişim Noktası öneki (prefix) kullanarak, bir hesap altındaki tüm Erişim Noktalarına erişime izin verebilir ve her paketi manuel olarak listeleme ihtiyacını ortadan kaldırabilirsiniz.
Adım 1: VPC'ye Özel Bir Erişim Noktası Oluşturma
İlk olarak, yalnızca belirtilen bir VPC'den erişilebilen bir S3 Erişim Noktası oluşturmamız gerekiyor. Bu Erişim Noktasına VPC dışından yapılan herhangi bir istek reddedilecektir.
- Amazon S3 konsoluna gidin ve erişimine izin vermek istediğiniz paketi seçin.
- Erişim noktaları (Access points) sekmesine tıklayın.
- Erişim noktası oluştur (Create access point) butonuna tıklayın.
- Erişim Noktasına benzersiz bir isim verin.
- Ağ erişim türü (Network access type) olarak Sanal Özel Bulut (VPC - Virtual Private Cloud) seçeneğini belirleyin ve VPC ID'nizi girin.
- Tüm genel erişimi engelle (Block all public access) seçeneğinin işaretli olduğundan emin olun.
- Erişim noktası oluştur'a tıklayın ve oluşturulan Erişim Noktasının ARN'sini not alın.
Adım 2: Amazon S3 Gateway Uç Noktası Oluşturma
Ardından, tüm S3 trafiğinin güvenli bir şekilde yönlendirildiğinden emin olmak için VPC'nizde bir S3 Gateway Uç Noktası oluşturun.
- Amazon VPC konsoluna gidin.
- Sol menüden Uç Noktalar (Endpoints) seçeneğine tıklayın ve Uç Nokta Oluştur (Create Endpoint) butonuna basın.
- Hizmetler arasından S3'ü arayın ve seçin (Türün Gateway olduğundan emin olun).
- Uç noktanın oluşturulacağı VPC'yi ve erişim gerektiren alt ağların rota tablolarını (route tables) seçin.
- Politika (Policy) bölümünün altında Özel (Custom) seçeneğini belirleyin ve aşağıdaki politikayı yapıştırın.
<Hesap ID>kısmını kendi AWS Hesap ID'niz ile değiştirdiğinizden emin olun:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowUseOfS3",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "*"
},
{
"Sid": "OnlyIfAccessedViaAccessPoints",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"ArnNotLikeIfExists": {
"s3:DataAccessPointArn": "arn:aws:s3:us-east-1:<Hesap ID>:accesspoint/*"
}
}
}
]
}
Bu politika, Erişim Noktası ARN'sini belirtmek için bir joker karakter (*) kullanır. Bu sayede, hesap altında oluşturulan yeni S3 erişim noktalarına otomatik olarak erişim izni verilir ve VPC uç noktası politikalarını manuel olarak düzenleme süreci ortadan kalkar.
Adım 3: S3 Paketini Yalnızca VPC Erişimine Kapatma
Paketin kendisine (Erişim Noktasını atlayarak) internetten doğrudan erişilemeyeceğinden emin olmak için, erişimi kesinlikle VPC ile sınırlayan bir paket politikası (bucket policy) eklemelisiniz.
S3 paketinizin İzinler (Permissions) sekmesine gidin, Paket Politikası (Bucket Policy) kısmını düzenleyin ve aşağıdaki yapılandırmayı uygulayın (<paket adı> ve <vpc id> kısımlarını kendi bilgilerinizle değiştirin):
{
"Version": "2012-10-17",
"Id": "S3BucketPolicyVPCAccessOnly",
"Statement": [
{
"Sid": "DenyIfNotFromAllowedVPC",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::<paket adı>",
"arn:aws:s3:::<paket adı>/*"
],
"Condition": {
"StringNotEquals": {
"aws:SourceVpc": "<vpc id>"
}
}
}
]
}
VPC'ye Özel Erişim Noktalarını Kuruluş Çapında Zorunlu Kılma
Gelişmiş güvenlik yönetimi için, kuruluştaki herhangi bir yeni S3 Erişim Noktasının VPC ile sınırlandırılmasını zorunlu kılmak üzere AWS Organizations Servis Kontrol Politikalarını (SCP - Service Control Policy) kullanabilirsiniz.
Aşağıdaki SCP'yi root (kök), kuruluş birimi (organizational unit) veya hesap düzeyinde uygulamak, verilerinizin özel ağlarınız içinde izole kalmasını sağlar:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireVPCAccessPoints",
"Effect": "Deny",
"Action": [
"s3:CreateAccessPoint"
],
"Resource": [
"*"
],
"Condition": {
"StringNotEqualsIfExists": {
"s3:AccessPointNetworkOrigin": [
"vpc"
]
}
}
}
]
}
Sonuç
Paylaşılan Amazon S3 veri setleri için veri erişimini ölçekli bir şekilde yönetmek, özellikle sıkı ağ güvenliği sınırları gerektiğinde karmaşık olabilir.
S3 VPC Uç Noktalarını VPC'ye özel S3 Erişim Noktalarıyla birleştirerek, uç noktası politikalarını sürekli güncelleme operasyonel yükü olmadan, çok kiracılı (multi-tenant) paketleri kurum içi uygulamalarınıza güvenli bir şekilde sunabilirsiniz. Bu yaklaşım, hassas verilerin AWS VPC içerisinde sıkı bir şekilde korunmasını sağlarken altyapınızın sorunsuz bir şekilde ölçeklenmesine olanak tanır.