Gizli Alan ile paylaşılan verilerin güvenliğini sağlayın

Gizli Alan ile kullanımdaki paylaşılan verilerin güvenliğini sağlama

Bu codelab hakkında

subjectSon güncelleme Kas 22, 2024
account_circleYazan: Priya Pandey, Jiankun Lu, Meetrajsinh Vala

1. Genel Bakış

Gizli Alan, çok taraflı güvenli veri paylaşımı ve ortak çalışma sağlarken kuruluşların verilerinin gizliliğini korumasına olanak tanır. Bu sayede kuruluşlar, verileri üzerinde kontrol sahibi olmaya ve yetkisiz erişime karşı korumaya devam ederken birbirleriyle ortak çalışabilir.

Gizli Alan, hassas ve genellikle yasal düzenlemelere tabi verileri toplayarak ve analiz ederek karşılıklı değer elde etmek istediğiniz senaryolarda, bu veriler üzerinde tam kontrol sahibi olmanızı sağlar. Gizli Alan sayesinde kuruluşlar, kimliği tanımlayabilecek bilgiler (PII), korunan sağlık bilgileri (PHI), fikri mülkiyet ve kriptografik sırlar gibi hassas verileri toplayıp analiz ederek bu veriler üzerinde tam kontrol sahibi olurken karşılıklı değer elde edebilir.

Gerekenler

Neler öğreneceksiniz?

  • Gizli Alan'ı çalıştırmak için gerekli Cloud kaynaklarını yapılandırma
  • İş yükünü, Gizli Alan sanal makinesi görüntüsünü çalıştıran bir Gizli Sanal Makine'de çalıştırma
  • Korunan kaynaklara erişimi, iş yükü kodunun (ne), Gizli Alan ortamının (nerede) ve iş yükünü çalıştıran hesabın (kim) özelliklerine göre yetkilendirme.

Bu kod laboratuvarında, Primus ve Secundus Bank arasında ortak müşterilerini belirlemek için tam hesap listelerini paylaşmadan Gizli Alan oluşturacaksınız. Bu işlem aşağıdaki adımları içerir:

  • 1. Adım: Primus ve Secundus Bankalar için gerekli bulut kaynaklarını ayarlayın. Bu bulut kaynakları arasında Primus ve Secundus Bankalar için bulut depolama paketleri, KMS anahtarları, iş yükü kimlik havuzları ve hizmet hesapları bulunur. Primus Bank ve Secundus Bank, müşteri verilerini Cloud Storage paketlerinde depolar ve Cloud Key Management Service anahtarlarını kullanarak verileri şifreler.
  • 2. Adım: İş yükü sanal makinesi tarafından kullanılacak bir iş yükü hizmet hesabı oluşturun. İş yükünün operatörü olacak Secundus Bank, iş yükü sanal makinesini başlatır. Primus Bank, iş yükü kodunu yazar.
  • 3. Adım: Biri sağlanan konumdaki müşterileri saymak, diğeri Primus ve Secundus Bank'ın ortak müşterilerini bulmak için iki CLI komutu içeren bir iş yükü oluşturun. İş yükü Primus Bank tarafından yazılır ve Docker görüntüsü olarak paketlenir. Bu Docker görüntüsü Artifact Registry'de yayınlanır.
  • 4. Adım: Bir iş yüküne yetki verin. Primus Bank, iş yüklerini çalıştıran kullanıcının özelliklerine, iş yükünün ne yaptığına ve iş yükünün nerede çalıştığına göre iş yüklerinin müşteri verilerine erişmesine yetki vermek için bir iş yükü kimliği havuzu kullanır.
  • 5. adım: İş yükü çalıştırıldığında, iş yükü ve ortam iddiaları içeren bir Attestation Verifier hizmeti jetonu sunarak veri iş ortaklarının (Primus Bank ve Secundus Bank) bulut kaynaklarına erişim isteğinde bulunur. Jetondaki iş yükü ölçümü iddiaları Primus ve Secundus Bankalarının iş yükü kimlik havuzlarındaki özellik koşuluyla eşleşirse ilgili bulut kaynaklarına erişme izni olan hizmet hesabı erişim jetonunu döndürür. Bulut kaynaklarına yalnızca Gizli Alan'da çalışan iş yükü erişebilir.
  • 5. adım(a): Belirli konumlardaki Primus Bank müşterilerini sayan ilk iş yükünü çalıştırın. Bu iş yükü için Primus Bank, gizli alanda çalışan iş yüküne şifrelenmiş müşteri listesini sağlayan bir veri iş ortağı ve iş yükü yazarı olur. Secundus Bank, iş yükü operatörü olur ve iş yükünü Gizli Alan'da çalıştırır.
  • 5. adım(b): Primus ve Secundus Bankalarının ortak müşterilerini bulan ikinci iş yükünü çalıştırın. Bu iş yükü için Primus Bank ve Secundus Bank, veri iş ortakları olur. Şifrelenmiş müşteri listelerini Gizli Alan'da çalışan iş yüküne sağlarlar. Secundus Bank yine iş yükü operatörü olur. Bu iş yükü, ortak müşterileri bulmak için Secundus Bank'ın şifrelenmiş müşteri listelerine de erişmesi gerektiğinden Secundus Bank tarafından da yetkilendirilir. Bu durumda Secundus Bank, Primus Bank için 4. adımda belirtildiği gibi iş yükünü çalıştıran kullanıcının özelliklerine, iş yükünün ne yaptığına ve iş yükünün nerede çalıştırılacağına göre iş yüküne müşteri verilerine erişme yetkisi verir.

fdef93a6868a976.png

2. Cloud Kaynakları Oluşturma

Başlamadan önce

  • Bu kod laboratuvarının bir parçası olarak kullanılan gerekli komut dosyalarını almak için aşağıdaki komutu kullanarak bu deposu klonlayın.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • Bu kod laboratuvarının dizinini değiştirin.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
  • Gerekli proje ortam değişkenlerini aşağıda gösterildiği gibi ayarladığınızdan emin olun. GCP projesi oluşturma hakkında daha fazla bilgi için lütfen bu kod laboratuvarına bakın. Proje kimliğinin nasıl alınacağı ve proje adından ve proje numarasından nasıl farklı olduğu hakkında ayrıntılı bilgi edinmek için bu makaleyi inceleyebilirsiniz.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
gcloud services enable \
    cloudapis.googleapis.com \
    cloudkms.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudshell.googleapis.com \
    container.googleapis.com \
    containerregistry.googleapis.com \
    iam.googleapis.com \
    confidentialcomputing.googleapis.com
  • Bu komutu kullanarak kaynak adları için değişkenleri aşağıda belirtildiği gibi ayarlayın. Bu değişkenleri kullanarak kaynak adlarını geçersiz kılabilirsiniz (ör.export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  • Primus projesinde aşağıdaki değişkenleri mevcut bulut kaynağı adlarıyla ayarlayabilirsiniz. Değişken ayarlanırsa Primus projesindeki ilgili mevcut bulut kaynağı kullanılır. Değişken ayarlanmamışsa bulut kaynağı adı, project-name değerinden oluşturulur ve aşağıdakiler kapsamında yeni bir cloud-resource oluşturulur:

$PRIMUS_INPUT_STORAGE_BUCKET

Primus Bank'ın müşteri verileri dosyasını depolayan paket.

$PRIMUS_WORKLOAD_IDENTITY_POOL

Primus Bank'ın, iddiaları doğrulayan Workload Identity Pool'u (WIP).

$PRIMUS_WIP_PROVIDER

Primus Bank'ın Workload Identity Pool sağlayıcısı. Bu sağlayıcı, Attestation Verifier Service tarafından imzalanan jetonlar için kullanılacak yetkilendirme koşulunu içerir.

$PRIMUS_SERVICE_ACCOUNT

Primus Bank'ın, $PRIMUS_WORKLOAD_IDENTITY_POOL'nin korumalı kaynaklara erişmek için kullandığı hizmet hesabı. Bu adımda, $PRIMUS_INPUT_STORAGE_BUCKET veri grubunda depolanan müşteri verilerini görüntüleme izni vardır.

$PRIMUS_ENC_KEY

Primus Bank için $PRIMUS_INPUT_STORAGE_BUCKET alanında depolanan verileri şifrelemek için kullanılan KMS anahtarı.

$PRIMUS_ENC_KEYRING

Primus Bank için $PRIMUS_ENC_KEY şifreleme anahtarını oluşturmak üzere kullanılacak KMS anahtar zinciri.

$PRIMUS_ARTIFACT_REPOSITORY

İş yükü Docker görüntüsünün gönderileceği yapı depolama alanı.

  • Aşağıdaki değişkenleri Secundus projesindeki mevcut bulut kaynağı adlarıyla ayarlayabilirsiniz. Değişken ayarlanmışsa Secundus projesindeki ilgili mevcut bulut kaynağı kullanılır. Değişken ayarlanmamışsa bulut kaynağı adı, proje adından oluşturulur ve aşağıdakiler kapsamında yeni bir bulut kaynağı oluşturulur:

$SECUNDUS_INPUT_STORAGE_BUCKET

Secundus Bank'ın müşteri verileri dosyasını depolayan paket

$SECUNDUS_WORKLOAD_IDENTITY_POOL

Secundus Bank'ın, iddiaları doğrulayan Workload Identity Havuzu (WIP).

$SECUNDUS_WIP_PROVIDER

Onay Doğrulayıcı Hizmeti tarafından imzalanan jetonlar için kullanılacak yetkilendirme koşulunu içeren Secundus Bank'ın Workload Identity Pool sağlayıcısı.

$SECUNDUS_SERVICE_ACCOUNT

$SECUNDUS_WORKLOAD_IDENTITY_POOL'nin, korunan kaynaklara erişmek için kullandığı Secundus Bank'ın hizmet hesabı. Bu adımda, $SECUNDUS_INPUT_STORAGE_BUCKET veri grubunda depolanan müşteri verilerini görüntüleme izni vardır.

$SECUNDUS_ENC_KEY

Secundus Bank için $SECUNDUS_INPUT_STORAGE_BUCKET'te depolanan verileri şifrelemek için kullanılan KMS anahtarı.

$SECUNDUS_ENC_KEYRING

Secundus Bank için $SECUNDUS_ENV_KEY şifreleme anahtarını oluşturmak üzere kullanılan KMS anahtar zinciri.

$SECUNDUS_RESULT_STORAGE_BUCKET

İş yükü sonuçlarını depolayan paket.

$WORKLOAD_IMAGE_NAME

İş yükü kapsayıcı resminin adı.

$WORKLOAD_IMAGE_TAG

İş yükü kapsayıcı resminin etiketi.

$WORKLOAD_SERVICE_ACCOUNT

İş yükünü çalıştıran Gizli Sanal Makine'ye erişme izni olan hizmet hesabı.

  • Aşağıda belirtildiği gibi, bu kod laboratuvarının bir parçası olarak kullanılan birkaç yapı vardır:
  • primus_customer_list.csv: Primus Bank'ın müşteri verilerini içeren dosya. Bu codelab'de kullanılan örnek dosyayı burada bulabilirsiniz.
  • secundus_customer_list.csv: Secundus Bank'ın müşteri verilerini içeren dosya. Bu codelab'de kullanılan örnek dosyayı burada bulabilirsiniz.
  • Bu iki proje için belirli izinlere ihtiyacınız vardır:
  • $PRIMUS_PROJECT_ID için Cloud KMS Yöneticisi, Depolama Yöneticisi, Artifact Registry Yöneticisi, Hizmet Hesabı Yöneticisi, IAM Workload Identity Havuz Yöneticisi izinlerine sahip olmanız gerekir.
  • $SECUNDUS_PROJECT_ID için Compute Yöneticisi, Depolama Yöneticisi, Hizmet Hesabı Yöneticisi, Cloud KMS Yöneticisi, IAM Workload Identity Havuz Yöneticisi, Güvenlik Yöneticisi (isteğe bağlı) izinlerine sahip olmanız gerekir.
  • Kalan değişken adlarını, kaynak adları için proje kimliğinize göre değerlere ayarlamak üzere aşağıdaki komut dosyasını çalıştırın.
source config_env.sh

Primus Bank için bulut kaynaklarını ayarlama

Primus Bank için aşağıdaki bulut kaynakları gerekir. Primus Bank'ın kaynaklarını ayarlamak için bu komut dosyasını çalıştırın:

  • Primus Bank'ın şifrelenmiş müşteri verileri dosyasını depolamak için Cloud Storage paketi ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus Bank'ın müşteri verileri dosyasını şifrelemek için KMS'de şifreleme anahtarı ($PRIMUS_ENC_KEY) ve anahtar zinciri ($PRIMUS_ENC_KEYRING).
  • Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL), sağlayıcısı altında yapılandırılan özellik koşullarına göre iddiaları doğrulamak için kullanılır.
  • Yukarıda belirtilen iş yükü kimlik havuzuna ($PRIMUS_WORKLOAD_IDENTITY_POOL) bağlı hizmet hesabı ($PRIMUS_SERVICE_ACCOUNT), KMS anahtarını kullanarak (roles/cloudkms.cryptoKeyDecrypter rolünü kullanarak) verilerin şifresini çözme, Cloud Storage paketinden veri okuma (objectViewer rolünü kullanarak) ve hizmet hesabını iş yükü kimlik havuzuna bağlama (roles/iam.workloadIdentityUser rolünü kullanarak) erişimine sahiptir.
./setup_primus_bank_resources.sh

Secundus Bank için bulut kaynaklarını ayarlama

Secundus Bank için aşağıdaki bulut kaynakları gereklidir. Secundus Bank kaynaklarını ayarlamak için bu komut dosyasını çalıştırın. Bu adımlar kapsamında aşağıdaki kaynaklar oluşturulur:

  • Secundus Bank'ın şifrelenmiş müşteri verileri dosyasını depolamak için Cloud Storage paketi ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Secundus Bank'ın veri dosyasını şifrelemek için KMS'deki şifreleme anahtarı ($SECUNDUS_ENC_KEY) ve anahtar zinciri ($SECUNDUS_ENC_KEYRING).
  • Workload Identity Pool ($SECUNDUS_WORKLOAD_IDENTITY_POOL), sağlayıcısı altında yapılandırılan özellik koşullarına göre iddiaları doğrulamak için kullanılır.
  • Yukarıda belirtilen iş yükü kimlik havuzuna ($SECUNDUS_WORKLOAD_IDENTITY_POOL) bağlı hizmet hesabı ($SECUNDUS_SERVICE_ACCOUNT), KMS anahtarını kullanarak (roles/cloudkms.cryptoKeyDecrypter rolünü kullanarak) verilerin şifresini çözme, Cloud Storage paketinden veri okuma (objectViewer rolünü kullanarak) ve hizmet hesabını iş yükü kimlik havuzuna bağlama (roles/iam.workloadIdentityUser rolünü kullanarak) erişimine sahiptir.
  • Secundus Bank tarafından iş yükü yürütmenin sonucunu depolamak için Cloud Storage paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).
./setup_secundus_bank_resources.sh

3. İş Yükü Oluşturma

İş yükü hizmet hesabı oluşturma

Ardından, aşağıda belirtilen gerekli rollere ve izinlere sahip bir hizmet hesabı oluşturun. Secundus Bank projesinde iş yükü hizmet hesabı oluşturmak için aşağıdaki komut dosyasını çalıştırın. İş yükünü çalıştıran sanal makine bu hizmet hesabını kullanır.

Bu iş yükü hizmet hesabı ($WORKLOAD_SERVICE_ACCOUNT) aşağıdaki rollere sahip olacaktır:

  • İş yükü hizmet hesabına confidentialcomputing.workloadUser rolünü verin . Bu işlem, kullanıcı hesabının bir doğrulama jetonu oluşturmasına olanak tanır.
  • İş yükü hizmet hesabına logging.logWriter rolünü verin. Bu sayede Gizli Alan ortamı, seri konsola ek olarak Cloud Logging'a günlük yazabilir. Böylece günlükler, sanal makine sonlandırıldıktan sonra kullanılabilir.
  • $PRIMUS_INPUT_STORAGE_BUCKET Cloud Storage paketinden veri okumak için objectViewer.
  • $SECUNDUS_INPUT_STORAGE_BUCKET Cloud Storage paketinden veri okumak için objectViewer.
  • objectAdmin, iş yükü sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET Cloud Storage paketine yazar.
./create_workload_service_account.sh

İş yükü oluşturma

Bu adımda, bu codelab'de kullanılan iş yükü için bir Docker görüntüsü oluşturacaksınız. İş yükü, aşağıdakileri yapan basit bir GoLang uygulamasıdır:

  • Belirtilen coğrafi konumdaki müşterileri sayar.
  • Primus ve Secundus Bank'ın ortak müşterilerini, ilgili bulut depolama paketlerinde depolanan müşteri listelerinden bulur.

Aşağıdaki adımların uygulandığı bir iş yükü oluşturmak için aşağıdaki komut dosyasını çalıştırın:

  • Primus Bank'a ait, iş yükünün yayınlanacağı bir Artifact Registry ($PRIMUS_ARTIFACT_REPOSITORY) oluşturun.
  • Kodu oluşturun ve gerekli kaynak adlarıyla güncelleyin. Bu codelab'de kullanılan iş yükü kodunu buradan bulabilirsiniz.
  • Kodu derleyin ve Docker görüntüsünde paketleyin. İlgili Dockerfile'i burada bulabilirsiniz.
  • Docker görüntüsünü Primus Bank'a ait Artifact Registry'de ($PRIMUS_ARTIFACT_REGISTRY) yayınlayın.
  • $WORKLOAD_SERVICE_ACCOUNT hizmet hesabına Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY) için okuma izni verin.
./create_workload.sh

4. İş Yüklerini Yetkilendirme ve Çalıştırma

İş yükünü yetkilendirme

Primus Bank, aşağıdaki kaynakların özelliklerine göre iş yüklerinin müşteri verilerine erişmesine yetki vermek istiyor:

  • Nedir?: Doğrulanmış kod
  • Nerede: Güvenli bir ortam
  • Who: Güvenilir bir operatör

Primus, bu şartlara dayalı bir erişim politikasını zorunlu kılmak için Workload Identity federasyonu'nu kullanır.

İş yükü kimliği federasyonu, özellik koşullarını belirtmenize olanak tanır. Bu koşullar, iş yükü kimliği havuzu (WIP) ile hangi kimliklerin kimlik doğrulaması yapabileceğini kısıtlar. Ölçümleri sunmak ve politikayı uygulamak için Attestation Verifier Hizmeti'ni WIP'ye workload identity pool sağlayıcısı olarak ekleyebilirsiniz.

Workload Identity havuzu, bulut kaynakları kurulum adımı kapsamında daha önce oluşturulmuştur. Primus Bank artık yeni bir OIDC Workload Identity Pool sağlayıcısı oluşturacaktır. Belirtilen --attribute-condition, iş yükü kapsayıcısına erişimi yetkilendirir. Bunun için:

  • Ne: $PRIMUS_ARTIFACT_REPOSITORY deposuna yüklenen en son $WORKLOAD_IMAGE_NAME.
  • Kullanılabileceği yerler: Gizli Alan güvenilir yürütme ortamı, tam destekli Gizli Alan sanal makine görüntüsünde çalışır.
  • Kim: Secundus Bank $WORKLOAD_SERVICE_ACCOUNT hizmet hesabı.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Primus Bank için oluşturulan WIP'ye benzer şekilde Secundus Bank, iş yüklerinin müşteri verilerine erişmesi için aşağıdakilere göre yetkilendirme yapmak istiyor:

  • Ne: İş yükü.
  • Nerede: Gizli Alan Ortamı.
  • Kim: İş yükünü çalıştıran hesap ($WORKLOAD_SERVICE_ACCOUNT).

Primus Bank, erişime yetki verip vermeyeceğini belirlemek için resim etiketini içeren image_reference hak talebini kullanır. Uzaktan deposu kontrol ettikleri için yalnızca verilerini sızdırmayan resimleri etiketlediklerinden emin olabilirler.

Buna karşılık Secundus Bank, resmi aldığı deposu kontrol etmediği için bu varsayımı güvenli bir şekilde yapamaz. Bunun yerine, iş yüküne erişimi image_digest değerine göre yetkilendirmeyi seçerler. Primus Bank'ın farklı bir resmi işaret edecek şekilde değiştirebileceği image_reference'in aksine Primus Bank, image_digest'ın önceki adımda Secundus Bank'ın denetlediği resimden başka bir resmi işaret etmesini sağlayamaz.

Workload Identity Pool sağlayıcıları oluşturmadan önce, sağlayıcının özellik koşullarında kullanılacak workload kapsayıcı resmi için image_digest'yi toplarız.

export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG  --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
 assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

İş Yüklerini Çalıştırma

Bu adım kapsamında Secundus Bank, iş yükünü Gizli Alan'da çalıştıracaktır. Bu iş yükü, sırasıyla Primus Bank ve Secundus Bank'ın müşteri verilerini okuyup şifresini çözmek için Primus'un iş yükü kimliği havuzundan ve Secundus'un iş yükü kimliği havuzundan erişim jetonlarını alır.

Gerekli TEE bağımsız değişkenleri, meta veri işareti kullanılarak iletilir. İş yükü kapsayıcısıyla ilgili bağımsız değişkenler, işaretin "tee-cmd" kısmı kullanılarak iletilir. İş yükünün yürütülmesinin sonucu $SECUNDUS_RESULT_STORAGE_BUCKET'te yayınlanır.

İlk iş yükünü çalıştırma

İlk iş yükü yürütme işleminin bir parçası olarak iş yükü, iş yükü kapsayıcı bağımsız değişkenlerinde sağlanan konumdaki Primus Bank müşterilerini sayar. Aşağıda gösterildiği gibi, ilk iş yükü "count-location" komutunu yürütür ve sonuç $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result adresinde depolanır.

gcloud compute instances create ${WORKLOAD_VM1} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""

Sonuçları görüntüle

Secundus projesinde ilk iş yükünün sonuçlarını görüntüleyin. İş yükünün yürütülmesinin tamamlanması ve sonucun bulut depolama alanında kullanılabilir olması için 3-5 dakika bekleyin.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

Sonuç 3 olmalıdır. Çünkü primus_customer_list.csv dosyasında Seattle'dan gelen kişilerin sayısı bu değerdir.

İkinci iş yükünü çalıştırma

İkinci iş yükü yürütme kapsamında, Primus Bank ve Secundus Bank'ın ortak müşterilerini buluruz. Aşağıda gösterildiği gibi, ikinci iş yükü "list-common-customers" komutunu yürütür ve sonuç $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count konumunda depolanır.

gcloud compute instances create ${WORKLOAD_VM2} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
  --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

Sonuçları görüntüle

Secundus projesinde ikinci iş yükünün sonuçlarını görüntüleyin. İş yükünün yürütülmesinin tamamlanması ve sonucun bulut depolama alanında kullanılabilir olması için 3-5 dakika bekleyin.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

Primus ve Secundus Bank'ın ortak müşterileri olduğu için sonuç aşağıdaki liste olmalıdır.

Çıkış:

Eric
Clinton
Ashley
Cooper

Yetkisiz iş yükü çalıştırma

Primus Bank'ın, Secundus Bank'ın verilerine erişmesine izin veren sözleşmesinin süresi dolar. Primus Bank, özellik koşulunu yeni iş ortağı Tertius Bank'ın hizmet hesabına sahip sanal makinelere izin verecek şekilde günceller.

Primus Bank, Workload Identity Pool sağlayıcısını değiştirir

$PRIMUS_PROJECT_ID dosyasında, yeni bir konumda iş yüklerini yetkilendirmek için Attestation Verifier kimlik sağlayıcısının özellik koşulunu güncelleyin.

  1. Projeyi $PRIMUS_PROJECT_ID olarak ayarlayın.
gcloud config set project $PRIMUS_PROJECT_ID
  1. Aşağıdaki komutu kullanarak Tertius Bank'ın GCP proje kimliğini dışa aktarın. Primus Bank daha sonra bunu, iş yükü kimlik havuzu sağlayıcısının özellik koşulunu güncellemek için kullanır. Primus Bank, Secundus Bank iş yükü hizmet hesaplarına yetki vermeyi durdurmaz. Artık Tertius Bank iş yükü hizmet hesaplarına izin verilecek.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. Workload Identity havuzundaki OIDC sağlayıcıyı güncelleyin. Burada '$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts, '$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts. olarak değiştirilir. Secundus Bank'taki iş yükü hizmet hesabı yerine Tertius Bank'taki iş yükü hizmet hesabı yetkilendirilir.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

İş yükünü yeniden çalıştırma

Secundus Bank, orijinal iş yükünü çalıştırmaya çalıştığında başarısız olur. Hatayı görüntülemek için orijinal sonuç dosyasını ve sanal makine örneğini silin, ardından iş yükünü tekrar çalıştırmayı deneyin.

Mevcut sonuç dosyasını ve sanal makine örneğini silme

  1. Projeyi $SECUNDUS_PROJECT_ID projesi olarak ayarlayın.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. Sonuç dosyasını silin.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. Gizli Sanal Makine örneğini silin.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}

Yetkisiz iş yükünü çalıştırma:

gcloud compute instances create ${WORKLOAD_VM2} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE}\
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

Hatayı görüntüle

İş yükünün sonuçları yerine bir hata (The given credential is rejected by the attribute condition) görürsünüz.

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

Buna benzer şekilde, Primus Bank, Secundus Bank'ın müşteri listesinin tamamını Primus Bank'a ait bir pakete gönderecek şekilde iş yükünü gizlice değiştirirse kötü amaçlı iş yükünün özeti, Secundus Bank'ın iş yükü kimlik havuzunda yetkilendirilmiş resim özetinin farklı olması nedeniyle bu girişim başarısız olur.

5. Temizleme

Bu codelab kapsamında oluşturduğumuz kaynakları temizlemek için kullanılabilecek komut dosyası burada verilmiştir. Bu temizleme kapsamında aşağıdaki kaynaklar silinecek:

  • Primus Bank'ın Cloud Storage paketini girin ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus Bank'ın ($PRIMUS_SERVICE_ACCOUNT) bir hizmet hesabı.
  • Primus Bank'ın resim imzalarını ($PRIMUS_COSIGN_REPOSITORY) içeren yapı kayıt defteri.
  • Primus Bank'ın($PRIMUS_WORKLOAD_IDENTITY_POOL) bir iş yükü kimliği havuzu.
  • Secundus Bank'ın ($WORKLOAD_SERVICE_ACCOUNT) iş yükü hizmet hesabı.
  • Secundus Bank'ın Cloud Storage paketini girin ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Secundus Bank'ın ($SECUNDUS_SERVICE_ACCOUNT) hizmet hesabı.
  • Secundus Bank'ın resim imzalarını ($SECUNDUS_COSIGN_REPOSITORY) içeren bir yapı kayıt defteri.
  • Secundus Bank'ın($SECUNDUS_WORKLOAD_IDENTITY_POOL) bir iş yükü kimliği havuzu.
  • Secundus Bank ($WORKLOAD_SERVICE_ACCOUNT) iş yükü hizmet hesabı.
  • İş yükü bilgi işlem örnekleri.
  • Secundus Bank'ın ($SECUNDUS_RESULT_STORAGE_BUCKET) sonuç depolama paketi.
  • Primus Bank'ın ($PRIMUS_ARTIFACT_REPOSITORY) yapı arşivi.
./cleanup.sh

Keşif yapmayı tamamladıysanız lütfen projenizi silin.

  • Cloud Platform Console'a gidin.
  • Kapatmak istediğiniz projeyi seçin, ardından en üstteki "Sil"i tıklayın. Bu işlem, projenin silinmesi için planlama yapar.

Tebrikler

Tebrikler, kod laboratuvarını başarıyla tamamladınız.

Gizli Alan'ı kullanarak paylaşılan verileri gizliliğini korurken nasıl güvence altına alacağınızı öğrendiniz.

Sırada ne var?

Benzer codelab'lerden bazılarına göz atın...

Daha fazla bilgi