Cloud KMS'yi kullanmaya başlama

Cloud KMS; bulut hizmetiniz için şifreleme anahtarlarını, şirket içinde yapılana benzer şekilde yönetmenizi sağlayan, bulutta barındırılan bir anahtar yönetim hizmetidir. Donanım destekli anahtarlar için Cloud HSM de dahil olmak üzere çeşitli anahtar türleri ve kaynakları kullanılarak şifreleme, şifre çözme, imzalama ve doğrulama desteği sunar.

Bu eğitimde, Cloud Security and Privacy API'lerinin aşağıdaki gibi gelişmiş özelliklerini nasıl kullanacağınızı öğreneceksiniz:

  • Güvenli bir Cloud Storage paketi oluşturma
  • Cloud KMS kullanarak anahtarları ve şifrelenmiş verileri yönetme
  • Cloud Storage denetleme günlüklerini görüntüleme

Enron Corpus'tan kısaltılmış veriler alacak, bunları şifreleyecek ve Cloud Storage'a yükleyeceksiniz.

Öğrenecekleriniz

  • Anahtar Yönetim Hizmeti (KMS) kullanarak verileri şifreleme ve şifreleme anahtarlarını yönetme

Şunu kullanacaksınız:

  • Cloud KMS
  • Cloud Storage
  • Google Cloud SDK

Kendi hızınızda ortam kurulumu

Henüz bir Google Hesabınız (Gmail veya Google Apps) yoksa oluşturmanız gerekir. Google Cloud Platform Console'da (console.cloud.google.com) oturum açın ve yeni bir proje oluşturun:

Screenshot from 2016-02-10 12:45:26.png

Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.

Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i tamamlamak size birkaç dolardan fazla maliyet getirmemelidir. Ancak daha fazla kaynak kullanmaya karar verirseniz veya kaynakları çalışır durumda bırakırsanız maliyet daha yüksek olabilir (bu belgenin sonundaki "temizleme" bölümüne bakın).

Google Cloud Platform'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme sürümünden yararlanabilir.

Cloud Shell'i başlatma

Bu codelab'de, Google Cloud'da çalışan ücretsiz bir sanallaştırılmış ortam olan Cloud Shell'i kullanacaksınız. GCP Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Aksi belirtilmedikçe tüm komutları bu kabuktan çalıştırın.

Bu eğitimdeki verileri depolamak için bir Cloud Storage paketi oluşturun. Cloud Storage paketi adlarının global olarak benzersiz olması gerektiğinden paket adının önüne proje kimliğinizi ekleyin:

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Ardından paketi oluşturun:

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus,Enron Corporation'ın 158 çalışanı tarafından oluşturulan 600.000'den fazla e-postanın yer aldığı büyük bir veritabanıdır. Bu veriler, gs://enron_emails/ adlı Cloud Storage paketine kopyalandı.

E-posta dosyalarından birini yerel olarak indirin:

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

İndirilen dosyanın gerçekten bir e-posta olduğunu doğrulamak için dosyayı inceleyin:

$ tail 1.

E-postada şu gibi bir mesaj yer alır:

Attached is the Delta position for 1/18...
# ...

Pakette e-postaların yanı sıra resimler de bulunur. Bu eğitimde hem düz metin e-postalar hem de resimler kullanılmaktadır.

Cloud KMS'yi kullanabilmek için önce hizmeti projenizde etkinleştirmeniz gerekir. Bu işlemin proje başına bir kez yapılması yeterlidir. Cloud KMS hizmetini etkinleştirmek için aşağıdaki komutu çalıştırın:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

Etkinleştirme işlemi bir dakika kadar sürebilir. Komut tamamlandığında başarılı olduğunu bildirir.

Cloud KMS anahtarlığı oluşturun. Cloud KMS'de anahtarlık, şifreleme anahtarlarının mantıksal bir koleksiyonudur. Anahtarlık, anahtarlarla ilgili meta verileri (ör. konumları) içerir. global bölgesinde my-keyring adlı bir anahtarlık oluşturun:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Şimdi, az önce oluşturduğunuz anahtarlıkta enron-emails adlı ve encryption amaçlı bir şifreleme anahtarı oluşturun.

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

Cryptographic Keys Web UI'yi açın ve yeni oluşturulan kaynakları görüntüleyin. Bu seçenek, ana menüdeki IAM ve Yönetici bölümünde bulunur.

Anahtar halkalarını ve kripto anahtarlarını Cloud Console'da görüntüleyip yönetebilirsiniz.

Daha önce indirdiğimiz e-postanın içeriğini Cloud KMS kullanarak şifreleyin. Bu eğitimde gcloud komut satırı aracı kullanılmaktadır ancak Cloud KMS API'yi kullanarak da verileri şifreleyebilirsiniz.

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

Bu işlem, diskte 1.enc şifrelenmiş dosya içeriklerini içeren yeni bir dosya oluşturur. Veriler Cloud KMS ile şifrelendiğine göre, şifrelenmiş dosyayı Cloud Storage paketine yükleyin.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS, Google Cloud Identity and Access Management (IAM) ile entegredir. Cloud KMS IAM rolleri genel olarak iki kategoriye ayrılır:

  • Anahtarları yönetme izni
  • Anahtarları kullanma izni

Örneğin, roles/cloudkms.admin rolü, sahibinin anahtarlıklar ve kripto anahtarları oluşturmasına, IAM politikaları belirlemesine ve yönetimle ilgili işlemleri gerçekleştirmesine olanak tanır. roles/cloudkms.cryptoKeyEncrypterDecrypter, sahibine verileri şifreleme ve şifre çözme izni verir ancak yönetim izinlerini içermez.

IAM rolleri, üst kaynakları tarafından devralınır. Google Cloud projesinde roles/cloudkms.admin rolüne sahip olan kullanıcılar, söz konusu projedeki tüm anahtarların yöneticisidir. Anahtarlıkta roles/cloudkms.admin simgesi varsa ilgili anahtarlıktaki tüm anahtarların yöneticisidir. Tek bir kripto anahtarında roles/cloudkms.admin varsa yalnızca o anahtarın yöneticisidirler.

Bu alıştırmada kimliğinizi kullanın:

$ export MY_IDENTITY=you@gmail.com # or you@example.com

gcloud komut satırı aracını kullanarak kimliğe, yukarıda oluşturulan anahtarlıkta Cloud KMS kaynaklarını yönetme olanağı atayın:

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

roles/cloudkms.admin rolü, anahtarları kullanma izni içermez, yalnızca anahtarları yönetme izni içerir. Kimliğinize enron-emails şifreleme anahtarını kullanarak verileri şifreleme ve şifrelerini çözme olanağı vermek için:

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

İlk komutun, Key Ring'de roles/cloudkms.admin rolünü verdiğini ve bu role tüm alt Crypto Key kaynaklarının dahil olduğunu unutmayın. İkinci komut, roles/cloudkms.cryptoKeyEncrypterDecrypter iznini verir ancak yalnızca enron-emails şifreleme anahtarında.

Ayrıca Cloud Console'daki Cloud KMS kullanıcı arayüzünde rolleri görüntüleyip atayabilirsiniz.

Tek bir dosyayı şifrelemenin yanı sıra, bazı komut dosyalarıyla bir dosya koleksiyonunu da şifreleyebilirsiniz. Bu örnekte, allen-p kullanıcısının tüm e-postaları yayınlanır, şifrelenir ve sonuçta elde edilen şifrelenmiş değerler Cloud Storage paketine yüklenir:

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

Bu komut, örnek Cloud Storage paketindeki belirtilen dizinde bulunan tüm dosyaları yineler, Cloud KMS kullanarak şifreler ve Google Cloud Storage'ınıza yükler.

Komut dosyası tamamlandıktan sonra şifrelenmiş dosyaları Cloud Storage kullanıcı arayüzünde görüntüleyebilirsiniz. Aşağıdakine benzer bir tablo görürsünüz:

Cloud Denetleme Günlüğü'nde, Google Cloud Platform projelerinizde "Kim neyi, nerede ve ne zaman yaptı?" sorusunu yanıtlamanıza yardımcı olmak için Google Cloud hizmetleri tarafından oluşturulan iki günlük akışı (Yönetici Etkinlik Günlükleri ve Veri Erişimi Günlükleri) bulunur.

KMS'deki herhangi bir kaynağın etkinliğini görüntülemek için anahtarlığı tıklayın ve Etkinliği Görüntüle'yi seçin. Bu işlem sizi Cloud Etkinliği kullanıcı arayüzüne yönlendirir. Burada KeyRing'in oluşturulmasını ve KeyRing'de yapılan tüm değişiklikleri görmeniz gerekir.

Cloud KMS'yi kullanarak verileri başarıyla şifrelediniz ve şifrelenmiş verileri Cloud Storage'da depoladınız.

Temizleme

Bu eğitim sırasında oluşturulan kaynakları serbest bırakın. Daha önce oluşturulan Cloud Storage paketini silin:

$ gsutil rm -r gs://${BUCKET_NAME}

Cloud KMS kaynakları silinemez. Ancak anahtar materyalini tekrar kullanılamayacak şekilde yok edebilirsiniz:

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

İşlediğimiz konular

  • Cloud KMS izinlerini yönetmek için Cloud IAM'yi kullanma
  • Verileri şifrelemek için Cloud KMS'yi kullanma
  • Şifrelenmiş verileri depolamak için Cloud Storage'ı kullanma
  • Anahtarlar ve anahtar gruplarıyla ilgili tüm etkinlikleri görüntülemek için Cloud Audit Logging'i kullanma

Sonraki adımlar

  • BigQuery gibi bir veritabanındaki sütunu şifrelemek için Cloud KMS'yi kullanma
  • Cloud KMS anahtarlarınızda otomatik döndürme planı ayarlama

Daha fazla bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.