AWS Türkçe Blog

Amazon S3 klasörlerinizin varsayılan şifreleme yapılandırmasını geniş ölçekte denetleyin

Orijinal Makale: Link (Neil Mehta)

Depolanan verileri şifrelemek yetkisiz erişime karşı koruma sağlamak amacıyla ek bir güvenlik katmanı sağlarken, uyumluluk ve güvenlik standartlarını karşılar. Kuruluşlar ölçeklenirken, şifreleme anahtarlarını yönetmenin yükünü en aza indirmek için şifreleme uygulamayı standart hale getirmek kritik önem taşır. Şifreleme standartlarına sahip olmayan kuruluşlar, gerektiğinde kritik verilere erişemeyecek durumda kalabilir. Şifreleme standartlarını uygulama sürecinde olan birçok müşteri, genellikle hangi kaynakların bu standartlardaki pratiklere uygun olmadığını nasıl belirleyeceklerini sorgular.

Amazon S3, PUT, POST ve COPY işlemleri yapıldığında nesnelerin otomatik olarak şifrelenmesi için klasör düzeyinde varsayılan olarak sunucu tarafında şifrelemeyi (server side encryption – SSE) yapılandırmanıza olanak tanır. Amazon S3 ile kullanılabilen birden fazla şifreleme yapılandırması bulunur. Varsayılan olarak kullanılan şifrelemeyi bir S3 tarafından yönetilen anahtar (S3-managed key – SSE-S3) veya AWS Anahtar Yönetimi Hizmeti anahtarı (SSE-KMS) kullanacak şekilde yapılandırabilirsiniz. SSE-KMS kullandığınızda, AWS tarafından yönetilen anahtar (AWS managed key) veya müşteri tarafından yönetilen anahtar (customer managed key) kullanabilirsiniz. SSE-KMS anahtarları ile, Amazon S3 her bir nesne için benzersiz bir veri anahtarı kullanır. Bu nedenle şifrelenmiş nesnelere yapılan her istek için, Amazon S3 tarafından AWS KMS’e istek yapılır. Bu durum AWS KMS maliyetlerinde artışa neden olabilir. Amazon S3 Bucket Key, varsayılan şifreleme için SSE-KMS kullanan klasörlerde etkileştirebileceğiniz bir maliyet tasarrufu özelliğidir.

Bu gönderide, bir Boto3 komut dosyası kullanarak bir Amazon S3 klasörüne ait varsayılan şifreleme yapılandırmasının geniş ölçekte nasıl denetleneceğini açıklıyorum. Şifreleme anahtarlarınızın denetimini geniş ölçekte çalışacak şekilde otomatikleştirmek, çok sayıda kaynağı denetlemek için gereken zaman ve eforu azaltmaya yardımcı olurken kaynaklarınızın güvenliğini sağlamak için kritik önem taşıyan değişiklik yönetimini izlemeyi kolaylaştırır. Gönderide bahsedilen komut dosyası tüm bölgelerdeki tüm klasörlerdeki varsayılan şifreleme yapılandırmasını, KMS anahtarına ait ARN değerini, KMS anahtar türünü (AWS veya müşteri tarafından yönetilen anahtar) ve Amazon S3 Bucket Key yapılandırmasına ilişkin bilgileri toplamak için tasarlanmıştır. Son olarak ise her klasördeki SSE yapılandırmasını ilişkilendirmek için komut dosyası çıktısını nasıl analiz edeceğinizi göstereceğim. Bu da tüm kaynakların şifreleme standartlarına uygun olmasını sağlamanıza olanak tanırken aynı zamanda kullanımda olan ancak envanterde bulunmayan anahtarları otomatik ve ölçeklenebilir bir şekilde belirmenizi sağlar.

Çözüme genel bakış

AWS Config ve S3 Storage Lens, klasörlerin SSE-KMS kullanacak şekilde yapılandırıldığını veya klasörlerin şifrelenmiş olup olmadığını belirlemek için faydalanılabilecek araçlardır. Ancak klasörünüzün şifreleme yapılandırmasının daha derin bir analizini gerçekleştirmeye çalışırken, mevcut seçeneklerin iyi ölçeklenmediğini görebilirsiniz. Örneğin, AWS Config ve S3 Storage Lens tüm AWS bölgelerindeki klasörlerin aşağıdaki seçeneklerin yapılandırıldığını kontrol edemez:

  • SSE-S3 veya SSE-KMS
  • SSE-KMS AWS tarafından yönetilen anahtar veya müşteri tarafından yönetilen anahtar
  • Amazon S3 Bucket Key

Sağlanan Boto3 komut dosyası, tüm bölgelerdeki tüm klasörlere ListBuckets, GetBucketLocation, GetBucketEncryption API çağrılarını gerçekleştirecektir. Daha sonra ise AWS KMS anahtarına bir DescribeKey API çağrısı yapacaktır. Bu API çağrılarının sonuçları düzenlenmiş bir tabloya çıkarılacaktır.

Aşağıdaki servisler varsayılan sunucu tarafı şifreleme modunu denetlemek için kullanılır:

  • Amazon S3
  • AWS KMS

Bu komut dosyası salt-okunur olarak çağrılar gerçekleştirir, kaynaklarınızda herhangi bir değişiklik yapılmaz.

Ön koşullar

Aşağıda çözüm gerekli olan ön koşullar listelenmiştir:

  • Bir AWS hesabı.
  • Amazon S3 klasörü.
  • Yerel makinanızda Python3 kurulu olması.
  • AWS hesabınızına erişmek için gerekli olan AWS kimlik bilgileri.
  • Aşağıdaki işlemleri gerçekleştirmek için gerekli izinler:
    • s3:ListAllMyBuckets
    • s3:GetBucketLocation
    • s3:GetEncryptionConfiguration
    • kms:DescribeKey

Bu komut dosyasını çalıştıran IAM kullanıcısı veya rolü için geçerli olan politikanın aşağıdaki minimum Amazon S3 ve AWS KMS izinlerine sahip olması gerekir.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3BucketListingBucketLocationsBucketEncryptConfig",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetEncryptionConfiguration",
        "s3:ListAllMyBuckets"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Sid": "AllowAccesstoKmsKeyMetadata",
      "Action": [
        "kms:DescribeKey"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:*"
    }
  ]
}

Ayrıca SSE-KMS müşteri tarafından yönetilen anahtarların IAM rolüne veya kullanıcı erişimine de izin verdiğinden emin olmanız gerekir. KMS anahtar politikası oluşturma ile ilgili daha fazla bilgi almak için dokümantasyonu inceleyebilirsiniz.

İsteğe bağlı (opt-in) AWS bölgelerinde Amazon S3 klasörleriniz varsa IAM rolü veya kullanıcısının bu AWS bölgeleri için etkinleştirilmesi gereklidir.

Çözüm adımları

  • Komut dosyasını indirmek için buraya tıklayın.
  • Komut dosyasının kaydedildiği cihazda bir terminal oturumu açın.
  • Aşağıdaki komutu kullanarak komut dosyasını çalıştırın:
$ python3 audit_s3_default_encryption.py
  • İstenildiğinde, rapor için çıktı konumunu girin.
  • Komut dosyasının çalışmasını tamamlanmasını bekleyin.
  • Çıktı konumuna ilerleyerek raporu açın.

Raporun analiz edilmesi

Aşağıdaki çıktı, komut dosyası tarafından oluşturulan sonuçlara bir örnektir:

Bucket name Default encryption mode SSE-KMS key type Bucket key
bucketA  AES256 N/A
bucketB  SSEConfigNotFound N/A
bucketC  AccessDenied Unknown
bucketD  arn:aws:kms:us-west-1:12345678908:key/da3f83a2-90c5-84e4-cbb88fb2f31e AccessDenied True
bucketE  arn:aws:kms:us-west-1:12345678908:key/da3f83a2-90c5-84e4-cbb88fb2f31e CUSTOMER True
bucketF  arn:aws:kms:ap-south-1:12345678908:key/c50cbc1e-f613-9564-f5b348ab7fc7 AWS
bucketG  arn:aws:kms:eu-east-2:98765432101:key/aa00aaff-e37b-bab2-c99463f5774c Customer False

B kolonu aşağıdaki değerleri içerebilir:

  • AWS KMS Key ARN: klasör için varsayılan şifreleme yapılandırılmasında kullanılan KMS anahtarına ait ARN değerini verir.
  • AWS KMS Key Alias: klasör için varsayılan şifreleme yapılandırılmasında kullanılan KMS anahtarına ait alias değerini verir.
  • AES256: klasörün SSE-S3 şifreleme için yapılandırıldığını belirtir.
  • SSEConfigNotFound: klasörde varsayılan bir şifreleme yapılandırması bulunmadığını belirtir.
  • AccessDenied: kullanılan IAM kullanıcısı veya rolünün GetBucketEncryption API çağrısı yapmak için gerekli izinlere sahip olmadığını belirtir.

C kolonu aşağıdaki değerleri içerebilir:

  • CUSTOMER: AWS KMS Anahtarının SSE-KMS müşteri tarafından yönetilen anahtar olduğunu belirtir.
  • AWS: AWS KMS Anahtarının SSE-KMS AWS tarafından yönetilen anahtar olduğunu belirtir.
  • N/A: SSE-KMS yapılandırmasının bulunmadığını belirtir.
  • AccessDenied: kullanılan IAM kullanıcısı veya rolünün DescribeKey API çağrısı yapmak için gerekli izinlere sahip olmadığını veya AWS KMS anahtarının Amazon S3 klasörünün bulunduğu bölgeden farklı bir bölgede yer aldığını belirtir.
  • Unknown: GetBucketEncryption API çağrısının hata alması nedeniyle DescribeKey API çağrısının yapılamadığını belirtir.
  • KeyNotFound: geçersiz bir AWS KMS anahtarı nedeniyle DescribeKey API çağrısının hata aldığını belirtir.

D kolonu aşağıdaki değerleri içerebilir:

  • Empty: ilgili klasör için SSE-KMS yapılandırılmasının bulunmadığını, Klasör Anahtarının kullanılmadığını belirtir.
  • True: ilgili klasör için Bucket Key yapılandırıldığını belirtir.
  • False: ilgili klasör için Bucket Key yapılandırmasının “false” olarak belirlendiğini gösterir.
  • AccessDenied: GetBucketEncryption API çağrısının hata aldığını belirtir.

Bu rapor, tüm AWS bölgelerinde varsayılan klasör şifreleme yapılandırmanızı standart hale getirmek için kullanılabilir. Standarttaki gereksinimlerinize uymayan klasörleri ve Amazon S3 Bucket Key etkinleştirilmeyen klasörleri kolayca tespit edebileceksiniz. Bu rapordaki bulguları kullanarak standarttaki gereksinimlerinize uymayan klasörleri ve Amazon S3 Bucket Key özelliğinden yararlanmayan klasörleri düzeltmek için bir plan oluşturabileceksiniz.

Sonuç

Bu gönderide, bir Boto3 komut dosyası kullanarak Amazon S3 klasörünüzün varsayılan şifreleme yapılandırmasını geniş ölçekte nasıl denetleyebileceğinizi gösterdim. Bu çözüm, şifreleme standartları uygulamanızın gerekli olup olmadığı veya mevcut şifreleme standartlarınızdaki pratiklerin uygulanıp uygulanmadığını anlamanıza yardımcı olabilir. Üretilen çıktıyı kullanarak tüm bölgelerde bulunan tüm klasörlerdeki farklı şifreleme tiplerini ilişkilendirebileceksiniz. Ayrıca, maliyet optimizasyonu özelliklerinin etkinleştirildiğinden emin olmak için hangi klasörlerin Amazon S3 Bucket Key ile yapılandırıldığını anlayabileceksiniz. Son olarak bu komut dosyasını, hangi klasörlerde SSE-S3 özelliğinin etkinleştirildiğinin ve hangi klasörlerde uygulanmadığının takibi için de kullanabilirsiniz.

Kuruluşunuz genelinde şifrelemeyi standart hale getirmek, yönetimi kolaylaştırmak ve güvenliği sağlamak için önemlidir. Bu nedenle, Amazon S3 kullanırken bu komut dosyasını kullanarak şifreleme yapılandırmasını denetlerken verilerinin güvenliğini sağlamak için başlangıç yapın.