Bu codelab hakkında
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
- Google Cloud Platform projesi
- Chrome veya Firefox gibi bir tarayıcı
- Google Compute Engine ( codelab), Gizli Sanal Makine, Container ve uzak depolar hakkında temel düzeyde bilgi
- Cloud KMS hakkında temel bilgiler ( codelab)
- Hizmet hesapları, İş yükü kimliği federasyonu ve özellik koşulları hakkında temel düzeyde bilgi sahibi olmanız gerekir.
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.
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>
- Projeleriniz için Faturalandırmayı etkinleştirin.
- Gizli Bilgi İşleme API'yi ve aşağıdaki API'leri her iki proje için etkinleştirin.
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 Bank'ın müşteri verileri dosyasını depolayan paket. |
| Primus Bank'ın, iddiaları doğrulayan Workload Identity Pool'u (WIP). |
| 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 Bank'ın, |
| Primus Bank için |
| Primus Bank için |
| İş 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 Bank'ın müşteri verileri dosyasını depolayan paket |
| Secundus Bank'ın, iddiaları doğrulayan Workload Identity Havuzu (WIP). |
| 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 Bank için |
| Secundus Bank için |
| İş yükü sonuçlarını depolayan paket. |
| İş yükü kapsayıcı resminin adı. |
| İş yükü kapsayıcı resminin etiketi. |
| İş 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çinobjectViewer
.$SECUNDUS_INPUT_STORAGE_BUCKET
Cloud Storage paketinden veri okumak içinobjectViewer
.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.
- Projeyi $PRIMUS_PROJECT_ID olarak ayarlayın.
gcloud config set project $PRIMUS_PROJECT_ID
- 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>
- 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
- Projeyi
$SECUNDUS_PROJECT_ID
projesi olarak ayarlayın.
gcloud config set project $SECUNDUS_PROJECT_ID
- Sonuç dosyasını silin.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- 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...
- İmzalanmış kapsayıcı resmi codelab'i
- Çok taraflı hesaplama ve gizli alanlarla dijital öğelerle işlem yapma
- Gizli alanlarla gizli verileri analiz etme