Cloud Storage'a Yüklenen Verilerin DLP API ve Cloud Functions ile Otomatik Olarak Sınıflandırılması
Bu codelab hakkında
1. Genel Bakış
Modern düzende, çeşitli kaynaklardan gelen veri miktarı her geçen gün artmaktadır. Bu süreçte, çoğu zaman bu verileri stratejik olarak saklamak ve korumak için karantinaya almak ve sınıflandırmak gerekir. Bu iş, manuel olarak kalırsa hızla maliyetli ve imkansız hale gelecektir.
Bu codelab'de, Cloud Storage'a yüklenen verileri otomatik olarak nasıl sınıflandırabileceğimizi ve bunları karşılık gelen bir depolama paketine nasıl taşıyacağımızı göreceğiz. Bunun için Cloud Pub/Sub, Cloud Functions, Cloud Veri Kaybını Önleme ve Cloud Storage kullanılır.
Yapacaklarınız
- Karantina ve sınıflandırma ardışık düzeninin bir parçası olarak kullanılacak Cloud Storage paketleri oluşturma
- Dosyalar yüklendiğinde DLP API'yi çağıran basit bir Cloud Functions işlevi oluşturun.
- Dosya işleme tamamlandığında bildirim almak için bir Pub/Sub konusu ve aboneliği oluşturun.
- Bir Cloud Functions işlevi ç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ırma ayarları yapılmış bir Google Cloud projesi. Hesabınız yoksa bir hesap oluşturmanız gerekir.
2. Kurulum
Bu codelab'de, Cloud Shell üzerinden komut satırını kullanarak farklı bulut kaynakları ve hizmetleri sağlayıp yöneteceğiz. Aşağıda Cloud Shell'i Cloud Shell Düzenleyici ile birlikte açıp tamamlayıcı proje deposunu klonlayabilirsiniz:
gcloud config set project [PROJECT_ID]
ile ayarlayarak doğru projeyi kullandığınızdan emin olun
API'leri etkinleştirin
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, görüntü ve Google Cloud Platform depolama depolarındaki gizliliğe duyarlı parçaların algılanması, risk analizi ve kimliğinin gizlemesi için yöntemler sunar.
- Bulut Depolama: Google Cloud Storage, Google'ın altyapısında verilerinizi depolamak ve bunlara erişmek için kullanılan bir RESTful hizmetidir.
Hizmet Hesapları İ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ı
Varsayılan App Engine 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ı, Düzenleyici rolü atanmış şekilde varsayılan olarak projenizde bulunur.
Öncelikle hizmet hesabımıza, veri kaybını önleme işlerini yönetmek için gereken Veri Kaybını Önleme Yöneticisi rolünü veririz:
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, Pubsub ve anahtar yönetim hizmeti için izinler verecek olan DLP API Hizmet Aracısı rolünü verin:
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 Veri Kaybını Önleme hizmet hesabı da kullanacağız. Bu hizmet hesabı, DLP API etkinleştirildiğinde otomatik olarak oluşturulur ve başlangıçta herhangi bir rol verilmedi. Şimdi izleyici 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 paketi: Verilerimiz başlangıçta buraya yüklenecek.
- Hassas veri paketi: DLP API'nin hassas olarak belirlediği veriler buraya taşınır.
- Hassas olmayan veri paketi: Veri Kaybını Önleme API'sinin hassas olmadığını belirlediği veriler buraya taşınır
Üç paketimizi 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]
Az önce oluşturduğunuz paketlerin adlarını not edin, daha sonra bunlara ihtiyacımız olacak.
4. Pub/Sub Konusu ve Aboneliği
Cloud Pub/Sub, uygulamalar arasında çoktan çoğa eşzamansız mesajlaşma sağlar. Yayıncı, bir mesaj oluşturur ve bunu konu adı verilen mesaj feed'inde yayınlar. Aboneler, bu mesajları abonelik yoluyla alır. Bizim örneğimizde, bu aboneliğe bağlı olarak bir Veri Kaybını Önleme işi çalıştırıldıktan sonra dosyaları ilgili paketlere taşıyan bir Cloud Functions işlevimiz olacak.
Öncelikle bir konu oluşturalım. Karantina depolama paketimize her dosya eklendiğinde burada bir mesaj yayınlanır. Bu öğeyi "classify-topic" olarak adlandıracağız
gcloud pubsub topics create classify-topic
Konuda bir mesaj yayınlandığında abonelik bilgilendirilir. "classify-sub" adlı bir pubsub aboneliği oluşturalım:
gcloud pubsub subscriptions create classify-sub --topic classify-topic
Bu abonelik ikinci bir Cloud Functions işlevini tetikler. Bu fonksiyon, bir Veri Kaybını Önleme işi başlatır ve dosyayı inceler ve doğru konuma taşır.
5. Cloud Functions
Cloud Functions, bir sunucuyu veya çalışma zamanı ortamını yönetmeye gerek kalmadan basit, etkinliğe dayalı, eşzamansız tek amaçlı işlevleri dağıtmamıza olanak tanır. Sağlanan main.py
dosyasını kullanarak dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
konumunda bulunan 2 Cloud işlevini dağıtacağız.
Değişkenleri Değiştir
İşlevlerimizi oluşturabilmemiz için main.py
dosyamızdaki bazı değişkenleri değiştirmemiz gerekiyor.
Cloud Shell Düzenleyici'de, daha önce oluşturulan ilgili paketleri kullanarak 28-34. satırlardaki proje kimliği ve paket değişkenleri değerlerini değiştirerek main.py'yi 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şkeni 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 dizinleri, main.py
dosyasının bulunduğu konumda gcs-dlp-classification-python olarak değiştirin:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python
Bazı işlevleri dağıtma zamanı geldi.
İlk olarak create_DLP_job
işlevini dağıtın ve [YOUR_QUARANTINE_BUCKET] değerini doğru paket adıyla değiştirin. Bu işlev, belirlenen Cloud Storage karantina paketine yeni dosyalar yüklendiğinde tetiklenir ve yüklenen her dosya için bir Veri Kaybını Önleme işi oluşturur:
gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-event google.storage.object.finalize \ --trigger-resource [YOUR_QUARANTINE_BUCKET]
Daha sonra, konumuzu tetikleyici olarak gösterecek şekilde resolve_DLP
işlevini dağıtın. Bu işlev, yukarıdaki işlev tarafından sonraki Veri Kaybını Önleme işinden başlatılan pub/sub bildirimini dinler. Pub/Sub bildirimi alır almaz Veri Kaybını Önleme işinden sonuçları alır ve dosyayı uygun şekilde hassas pakete veya hassas olmayan bir pakete taşır:
gcloud functions deploy resolve_DLP --runtime python37 \ --trigger-topic classify-topic
Doğrula
Her iki bulut işlevimizin de gcloud functions describe
komutuyla 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, çıkışta durum için ACTIVE
değeri gösterilir.
6. Örnek Verilerle Test Etme
Tüm parçalar yerine oturduktan sonra bazı örnek dosyalarla şeyleri test edebiliriz. Cloud Shell'inizde geçerli ç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. Dosyalar 'sample_s' ile başında ön eki "sample_n" olan veriler hassas veriler içerir . Örneğin, sample_s20.csv, ABD vatandaşlık numaralarına benzer şekilde biçimlendirilmiş verileri içerir:
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
Diğer 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 ele alacağını görmek için tüm test dosyalarımızı karantinamıza yükleyelim
grup:
gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]
Başlangıçta dosyalarımız, onları yüklediğimiz karantina paketinde bulunur. 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 giderek başlayın:
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üğümüzde, dosyalarımızın her biri için aşağıdaki bilgileri içeren en az 4 giriş olduğunu görüyoruz:
- İşlev yürütme işlemi başladı
- İşlev, belirli bir dosya için tetiklenmişti
- Bir iş oluşturuldu
- Fonksiyon,
create_DLP_job işlevi her dosya için tamamlandığında ilgili Veri Kaybını Önleme işi başlatılır. Sıradaki Veri Kaybını Önleme işlerinin listesini görmek için Veri Kaybını Önleme İşleri Sayfası'na gidin:
Beklemede, Çalışıyor veya Tamamlanan 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 dönüp çözümleme_DLP işlevine ait çıkışları 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şladı
- Pub/Sub bildirimi alındı
- İlgili Veri Kaybını Önleme işinin adı
- Durum kodu
- Hassas veri örneklerinin (varsa) sayısı
- Dosyanın taşınacağı paket
- Veri Kaybını Önleme işi, dosyayı ayrıştırmayı tamamladı
- Fonksiyon,
Fixed_DLP işlevine yapılan tüm çağrıların çalışması biter bitmez karantina paketinin içeriğine bir kez daha göz atın:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Bu kez tamamen boş olacaktır. Ancak, yukarıdaki komutu diğer gruplar için de çalıştırırsanız dosyalarımızı ilgili paketlere mükemmel bir şekilde ayrılmış olarak görürsünüz.
7. Temizleme
Veri sınıflandırmak için DLP API'nin Cloud Functions ile birlikte nasıl kullanılacağını öğrendiğinize göre 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çin ve Sil'i tıklayın. Proje kimliğini yazmanız istenir. Kodu girip Kapat'ı tıklayın.
Alternatif olarak, gcloud ile projenin tamamını doğrudan Cloud Shell'den silebilirsiniz:
gcloud projects delete [PROJECT_ID]
Farklı bileşenleri tek tek silmeyi tercih ederseniz sonraki bölüme geçin.
Cloud Functions
İki bulut işlevimizi de gcloud ile 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
Önce gcloud ile pub/sub aboneliğini silin:
gcloud pubsub subscriptions delete classify-sub
Son olarak, pub/sub konusunu gcloud ile 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 DLP API'yi Cloud Functions ile birlikte kullanmayı öğ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 bir Pub/Sub konusu ve aboneliği oluşturduk
- Dosyaları, içerdikleri hassas verilere göre kategorize eden bir Veri Kaybını Önleme işi başlatmak için tasarlanmış Cloud Functions'ı geliştirdik
- Test verilerini yükledik ve Cloud Functions'ın Sürecin nasıl gerçekleştiğini görmek için Stackdriver günlük kaydını kullanır