1. Genel Bakış
Günümüz kuruluşlarında çeşitli kaynaklardan gelen verilerin miktarı sürekli artmaktadır. Bu işlem genellikle verilerin stratejik olarak depolanması ve korunması için karantinaya alınmasını ve sınıflandırılmasını gerektirir. Bu görev, manuel olarak yapılmaya devam ederse hızla maliyetli ve imkansız hale gelir.
Bu codelab'de, Cloud Storage'a yüklenen verileri nasıl otomatik olarak sınıflandırıp ilgili depolama paketine taşıyabileceğimizi göreceğiz. Bu işlemi Cloud Pub/Sub, Cloud Functions, Cloud Data Loss Prevention ve Cloud Storage kullanarak gerçekleştireceğiz.
Yapacaklarınız
- Karantina ve sınıflandırma ardışık düzeninin bir parçası olarak kullanılacak Cloud Storage paketleri oluşturun.
- Dosyalar yüklendiğinde DLP API'yi çağıran basit bir Cloud Function oluşturun.
- Dosya işleme tamamlandığında sizi bilgilendirmek için bir Pub/Sub konusu ve aboneliği oluşturun.
- Cloud Functions işlevini çağırmak için karantina paketine örnek dosyalar yükleyin
- Dosyaları incelemek, sınıflandırmak ve uygun pakete taşımak için DLP API'yi kullanın.
Gerekenler
- Faturalandırmanın ayarlandığı bir Google Cloud projesi. Hesabınız yoksa hesap oluşturmanız gerekir.
2. Hazırlanma
Bu codelab boyunca, Cloud Shell üzerinden komut satırını kullanarak farklı bulut kaynaklarını ve hizmetlerini sağlayıp yöneteceğiz. Aşağıdaki işlem, Cloud Shell'i Cloud Shell Düzenleyici ile birlikte açar ve yardımcı proje deposunu klonlar:
gcloud config set project [PROJECT_ID] ile ayarlayarak doğru projeyi kullandığınızdan emin olun.
API'leri etkinleştirme
Google Cloud projenizde gerekli API'leri etkinleştirin:
- Cloud Functions API: Kullanıcılar tarafından sağlanıp etkinliklere göre yürütülen basit işlevleri yönetir.
- Cloud Data Loss Prevention (DLP) API: Metin, resim ve Google Cloud Platform depolama depolarındaki gizliliğe duyarlı parçaların algılanması, risk analizi ve kimlik gizleme için yöntemler sağlar.
- Cloud Storage: Google Cloud Storage, Google'ın altyapısında verilerinizi depolamak ve bunlara erişmek için kullanılan bir RESTful hizmetidir.
Hizmet Hesabı İzinleri
Hizmet hesabı, uygulamalar ve sanal makineler tarafından yetkili API çağrıları yapmak için kullanılan özel bir hesap türüdür.
App Engine varsayılan hizmet hesabı
App Engine varsayılan hizmet hesabı, App Engine'de çalışan uygulamalarınız adına Cloud projenizdeki görevleri yürütmek için kullanılır. Bu hizmet hesabı, varsayılan olarak projenizde bulunur ve Düzenleyici rolü atanmıştır.
Öncelikle, hizmet hesabımıza veri kaybını önleme işlerini yönetmek için gereken DLP yöneticisi rolünü vereceğiz:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.admin
Son olarak, hizmet hesabına BigQuery, Storage, Datastore, Pub/Sub ve anahtar yönetim hizmeti için izinler verecek olan DLP API Hizmet Aracısı rolünü atayın:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.serviceAgent
Veri Kaybını Önleme Hizmet Hesabı
App Engine hizmet hesabına ek olarak bir DLP hizmet hesabı da kullanacağız. Bu hizmet hesabı, DLP API etkinleştirildiğinde otomatik olarak oluşturulur ve başlangıçta herhangi bir rol verilmez. Bu kullanıcıya görüntüleyici rolü verelim:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:service-`gcloud projects list --filter="PROJECT_ID:$GOOGLE_CLOUD_PROJECT" --format="value(PROJECT_NUMBER)"`@dlp-api.iam.gserviceaccount.com \ --role roles/viewer
3. Cloud Storage Paketleri
Şimdi verilerimizi depolamak için 3 Cloud Storage paketi oluşturmamız gerekiyor:
- Karantina grubu: Verilerimiz ilk olarak buraya yüklenir.
- Hassas veri paketi: DLP API tarafından hassas olduğu belirlenen veriler buraya taşınır.
- Hassas olmayan verilerin bulunduğu paket: DLP API tarafından hassas olmadığı belirlenen veriler buraya taşınır.
Üç paketimizi de tek seferde oluşturmak için gsutil komutunu kullanabiliriz:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Yeni oluşturduğunuz paketlerin adlarını not edin. Bu adlara daha sonra ihtiyacımız olacak.
4. Pub/Sub konusu ve aboneliği
Cloud Pub/Sub, uygulamalar arasında çoka-çok eşzamansız mesajlaşma sağlar. Yayıncı, bir mesaj oluşturup konu adı verilen mesaj akışında yayınlar. Abone, bu mesajları abonelik yoluyla alır. Bu aboneliğe göre, bizim durumumuzda bir Veri Kaybını Önleme işi çalıştırıldıktan sonra dosyaları ilgili paketlerine taşıyan bir Cloud Function'ımız olacak.
Öncelikle konu oluşturalım. Karantina depolama paketimize her dosya eklendiğinde burada bir mesaj yayınlanır. Bu işlevi "classify-topic" olarak adlandıracağız.
gcloud pubsub topics create classify-topic
Abonelik, konu mesaj yayınladığında bilgilendirilir. "classify-sub" adlı bir Pub/Sub aboneliği oluşturalım:
gcloud pubsub subscriptions create classify-sub --topic classify-topic
Bu abonelik, dosyayı inceleyecek ve uygun yerine taşıyacak bir DLP işi başlatacak ikinci bir Cloud Function'ı tetikler.
5. Cloud Functions
Cloud Functions, bir sunucuyu veya çalışma zamanı ortamını yönetme gereği olmadan hafif, olay tabanlı, zaman uyumsuz tek amaçlı işlevler dağıtmamıza olanak tanır. dlp-cloud-functions-tutorials/gcs-dlp-classification-python/ içinde bulunan main.py dosyasını kullanarak 2 Cloud Functions işlevi dağıtacağız.
Değişkenleri Değiştirme
İşlevlerimizi oluşturabilmemiz için öncelikle main.py dosyamızdaki bazı değişkenleri değiştirmemiz gerekir.
Cloud Shell Düzenleyici'de, 28-34. satırlardaki proje kimliği ve paket değişkenlerinin değerlerini daha önce oluşturulan ilgili paketlerle değiştirerek main.py dosyasını düzenleyin:
main.py
PROJECT_ID = '[PROJECT_ID_HOSTING_STAGING_BUCKET]'
"""The bucket the to-be-scanned files are uploaded to."""
STAGING_BUCKET = '[YOUR_QUARANTINE_BUCKET]'
"""The bucket to move "sensitive" files to."""
SENSITIVE_BUCKET = '[YOUR_SENSITIVE_DATA_BUCKET]'
"""The bucket to move "non sensitive" files to."""
NONSENSITIVE_BUCKET = '[YOUR_NON_SENSITIVE_DATA_BUCKET]'
Ayrıca, pub/sub konu değişkeninin değerini önceki adımda oluşturulan pub/sub konusuyla değiştirin:
""" Pub/Sub topic to notify once the DLP job completes."""
PUB_SUB_TOPIC = 'classify-topic'
İşlevleri dağıtma
Cloud Shell'inizde, main.py dosyasının bulunduğu gcs-dlp-classification-python dizinine geçin:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python
Bazı işlevleri dağıtma zamanı.
İlk olarak, [YOUR_QUARANTINE_BUCKET] yerine doğru paket adını yazarak create_DLP_job işlevini dağıtın. Bu işlev, belirlenen Cloud Storage karantina paketine yeni dosyalar yüklendiğinde tetiklenir ve yüklenen her dosya için bir DLP işi oluşturur:
gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-event google.storage.object.finalize \ --trigger-resource [YOUR_QUARANTINE_BUCKET]
Ardından, resolve_DLP işlevini dağıtın ve tetikleyici olarak konunuzu belirtin. Bu işlev, yukarıdaki işlevden başlatılan sonraki Veri Kaybını Önleme işinden gelen pub/sub bildirimini dinler. Pub/Sub bildirimi alır almaz DLP işinden sonuçları alır ve dosyayı buna göre hassas pakete veya hassas olmayan pakete taşır:
gcloud functions deploy resolve_DLP --runtime python37 \ --trigger-topic classify-topic
Doğrula
gcloud functions describe komutuyla her iki Cloud Functions işlevinin de başarıyla dağıtıldığını doğrulayın:
gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP
Başarıyla dağıtıldığında durum için ACTIVE çıkışı gösterilir.
6. Örnek verilerle test etme
Tüm parçalar yerine oturduğuna göre artık bazı örnek dosyalarla test edebiliriz. Cloud Shell'de mevcut çalışma dizininizi sample_data olarak değiştirin:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/sample_data
Örnek dosyalarımız, çeşitli veri parçalarını içeren txt ve csv dosyalarından oluşur. "sample_s" önekli dosyalar hassas veriler içerirken "sample_n" önekli dosyalar içermez. Örneğin, sample_s20.csv dosyasında ABD vatandaşlık numarası gibi görünecek şekilde biçimlendirilmiş veriler bulunur:
sample_s20.csv
Name,SSN,metric 1,metric 2
Maria Johnson,284-73-5110,5,43
Tyler Parker,284-73-5110,8,17
Maria Johnson,284-73-5110,54,63
Maria Johnson,245-25-8698,53,19
Tyler Parker,475-15-8499,6,67
Maria Johnson,719-12-6560,75,83
Maria Johnson,616-69-3226,91,13
Tzvika Roberts,245-25-8698,94,61
Öte yandan, sample_n15.csv dosyasındaki veriler hassas olarak kabul edilmez:
sample_n15.csv
record id,metric 1,metric 2,metric 3
1,59,93,100
2,53,13,17
3,59,67,53
4,52,93,34
5,14,22,88
6,18,88,3
7,32,49,5
8,93,46,14
Kurulumumuzun dosyalarımızı nasıl işleyeceğini görmek için tüm test dosyalarımızı karantina klasörümüze yükleyelim.
paket:
gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]
Dosyalarımız ilk olarak, yüklendikleri karantina paketinde yer alır. Bunu doğrulamak için dosyaları yükledikten hemen sonra karantina paketinin içeriğini listeleyin:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Başlattığımız etkinlik serisine göz atmak için Cloud Functions sayfasına gidin:
create_DLP_job işlevi için İşlemler menüsünü tıklayın ve Günlükleri Görüntüle'yi seçin:

Bu işlevin günlüğünde, dosyalarımızın her biri için en az 4 giriş görüyoruz. Bu girişler şunları gösteriyor:
- İşlev yürütme işlemi başlatıldı
- İşlev belirli bir dosya için tetiklenmişse
- Bir iş oluşturulduysa
- İşlevin yürütülmesi tamamlanmış olmalıdır.

create_DLP_job işlevi her dosya için tamamlandığında ilgili veri kaybını önleme işi başlatılır. Kuyruktaki Veri Kaybını Önleme işlerinin listesini görmek için Veri Kaybını Önleme İşleri sayfasına gidin:
Beklemede, Çalışıyor veya Tamamlandı durumundaki işlerin listesini görürsünüz. Bunların her biri, yüklediğimiz dosyalardan birine karşılık gelir:

Daha fazla ayrıntı görmek için bu işlerden herhangi birinin kimliğini tıklayabilirsiniz.
Cloud Functions sayfasına geri dönüp resolve_DLP işlevinin günlüklerini kontrol ederseniz her dosya için en az 8 giriş görürsünüz. Bu girişler şunları gösterir:
- İşlev yürütme işlemi başlatıldı
- Bir pub/sub bildirimi alındı
- İlgili Veri Kaybını Önleme işinin adı
- Durum kodu
- Hassas veri örneklerinin sayısı (varsa)
- Dosyanın taşınacağı paket
- Veri kaybını önleme işi, dosyayı ayrıştırmayı tamamladı
- İşlevin yürütülmesi tamamlanmış olmalıdır.

resolve_DLP işlevine yapılan tüm çağrılar çalışmayı tamamladığında karantina paketinin içeriğini tekrar kontrol edin:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Bu kez tamamen boş olmalıdır. Ancak yukarıdaki komutu diğer paketler için de çalıştırırsanız dosyalarımızın ilgili paketlere mükemmel şekilde ayrıldığını görürsünüz.
7. Temizleme
Verileri sınıflandırmak için Cloud Functions ile birlikte DLP API'nin nasıl kullanılacağını gördüğümüze göre şimdi projemizi oluşturduğumuz tüm kaynaklardan temizleyelim.
Projeyi silme
İsterseniz projenin tamamını silebilirsiniz. GCP Console'da Cloud Resource Manager sayfasına gidin:
Proje listesinde, üzerinde çalıştığımız projeyi seçip Sil'i tıklayın. Proje kimliğini girmeniz istenir. Girip Kapat'ı tıklayın.
Alternatif olarak, projenin tamamını doğrudan Cloud Shell'den gcloud ile silebilirsiniz:
gcloud projects delete [PROJECT_ID]
Farklı bileşenleri tek tek silmeyi tercih ediyorsanız bir sonraki bölüme geçin.
Cloud Functions
gcloud ile her iki Cloud Functions işlevini de silin:
gcloud functions delete -q create_DLP_job && gcloud functions delete -q resolve_DLP
Depolama paketleri
Yüklenen tüm dosyaları kaldırın ve gsutil ile paketleri silin:
gsutil rm -r gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Pub/Sub
Öncelikle gcloud ile pub/sub aboneliğini silin:
gcloud pubsub subscriptions delete classify-sub
Son olarak, gcloud ile pub/sub konusunu silin:
gcloud pubsub topics delete classify-topic
8. Tebrikler!
Mükemmel! Başardınız. Dosyaların sınıflandırılmasını otomatikleştirmek için Cloud Functions ile birlikte DLP API'yi nasıl kullanacağınızı öğrendiniz.
İşlediğimiz konular
- Hassas ve hassas olmayan verilerimizi depolamak için Cloud Storage paketleri oluşturduk.
- Bir Cloud Functions işlevini tetiklemek için Pub/Sub konusu ve aboneliği oluşturduk.
- Dosyaları, içerdiği hassas verilere göre sınıflandıran bir DLP işini başlatmak için tasarlanmış Cloud Functions oluşturduk.
- Test verilerini yükledik ve süreci iş başında görmek için Cloud Functions'ın Stackdriver günlüklerini inceledik.