1. Genel Bakış
Confidential Space, kuruluşların verilerinin gizliliğini korumasına olanak tanırken güvenli çok taraflı veri paylaşımı ve ortak çalışma imkanı sunar. Bu sayede kuruluşlar, verileri üzerinde kontrolü sürdürmeye ve yetkisiz erişime karşı korumaya devam ederken birbirleriyle ortak çalışma yapabilir.
Confidential Space, hassas ve genellikle düzenlemelere tabi verileri toplayıp analiz ederek karşılıklı değer elde etmek istediğiniz senaryolarda veriler üzerinde tam kontrol sahibi olmanızı sağlar. Confidential Space ile 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 karşılıklı değer elde edebilir ve bu veriler üzerinde tam kontrol sahibi olmaya devam edebilir.
Gerekenler
- Google Cloud Platform projesi
- Chrome veya Firefox gibi bir tarayıcı
- Google Compute Engine ( codelab), Gizli Sanal Makine, Container'lar ve uzak depolar hakkında temel bilgiler
- Cloud KMS hakkında temel bilgiler ( codelab)
- Hizmet hesapları, iş yükü kimliği federasyonu ve özellik koşulları hakkında temel bilgiler.
Neler öğreneceksiniz?
- Confidential Space'i çalıştırmak için gereken Cloud kaynaklarını yapılandırma
- İş yükünü, Confidential Space VM görüntüsünü çalıştıran bir Gizli Sanal Makine'de çalıştırma
- İş yükü kodunun (ne), Confidential Space ortamının (nerede) ve iş yükünü çalıştıran hesabın (kim) özelliklerine göre korunan kaynaklara erişimi yetkilendirme.
Bu codelab'de, Primus ve Secundus Bank arasında, birbirleriyle tam hesap listelerini paylaşmadan ortak müşterilerini belirlemek için bir 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 bulut depolama paketleri, KMS anahtarları, iş yükü kimliği havuzları ve Primus ile Secundus Bankaları için hizmet hesapları yer alır. Primus Bank ve Secundus Bank, müşteri verilerini Cloud Storage paketlerinde depolar ve verileri Cloud Key Management Service anahtarlarını kullanarak şifreler.
- 2. adım: İş yükü VM'si tarafından kullanılacak bir iş yükü hizmet hesabı oluşturun. İş yükünün operatörü olan Secundus Bank, iş yükü VM'sini başlatır. Primus Bank, iş yükü kodunu oluşturur.
- 3. adım: İki CLI komutu içeren bir iş yükü oluşturun. Bu komutlardan biri, sağlanan konumdaki müşterileri saymak, diğeri ise Primus ve Secundus Bank'ın ortak müşterilerini bulmak için kullanılır. İş yükü Primus Bank tarafından oluşturulur 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ükünü çalıştıran kişinin özellikleri, iş yükünün ne yaptığı ve iş yükünün nerede çalıştığına göre iş yüklerinin müşteri verilerine erişmesine izin vermek için iş yükü kimliği havuzu kullanır.
- 5. adım: İş yükü çalıştırıldığında, iş yükü ve ortam talepleriyle birlikte bir Attestation Verifier hizmeti jetonu sunarak veri iş ortaklarının (Primus Bank ve Secundus Bank) bulut kaynaklarına erişim isteğinde bulunur. Jetonun iş yükü ölçümü talepleri, Primus ve Secundus Bankası'nın iş yükü kimliği havuzlarındaki özellik koşuluyla eşleşirse ilgili bulut kaynaklarına erişim izni olan hizmet hesabı erişim jetonunu döndürür. Bulut kaynaklarına yalnızca Confidential Space içinde ç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, veri iş ortağı ve iş yükü yazarı olur. Bu sayede, Confidential Space'te çalışan iş yüküne şifrelenmiş müşteri listesi sağlanır. Secundus Bank, iş yükü operatörü olarak iş yükünü Gizli Alan'da çalıştırır.
- 5. adım(b): Primus ve Secundus Bankası'nın ortak müşterilerini bulan ikinci iş yükünü çalıştırın. Bu iş yükü için hem Primus Bank hem de Secundus Bank veri işbirlikçisi olur. Şifrelenmiş müşteri listelerini, Confidential Space'te çalışan iş yüküne sağlarlar. Secundus Bank, tekrar 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 kişinin özellikleri, iş yükünün ne yaptığı ve iş yükünün nerede çalıştığına göre iş yükünün müşteri verilerine erişmesine yetki verir.

2. Bulut Kaynaklarını Ayarlama
Başlamadan önce
- Bu kod laboratuvarında kullanılan gerekli komut dosyalarını almak için aşağıdaki komutu kullanarak bu depoyu klonlayın.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Bu codelab'in 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 codelab'e bakın. Proje kimliğinin nasıl alınacağı ve proje adı ile 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.
- Her iki proje için Confidential Computing API'yi ve aşağıdaki API'leri 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 şekilde ayarlayın. Bu değişkenleri kullanarak kaynak adlarını geçersiz kılabilirsiniz (ör.
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'). - Primus projesindeki mevcut bulut kaynağı adlarıyla aşağıdaki değişkenleri ayarlayabilirsiniz. Değişken ayarlanırsa Primus projesindeki mevcut ilgili bulut kaynağı kullanılır. Değişken ayarlanmamışsa bulut kaynağı adı proje adından oluşturulur ve yeni bulut kaynağı aşağıdakilerin bir parçası olarak oluşturulur:
| Primus Bank'ın müşteri verileri dosyasını depolayan paket. |
| İddiaları doğrulayan Primus Bank'ın Workload Identity Pool'u (WIP). |
| Primus Bank'ın, Onay Doğrulayıcı Hizmeti tarafından imzalanan jetonlar için kullanılacak yetkilendirme koşulunu içeren Workload Identity Pool sağlayıcısı. |
|
|
| Primus Bank için |
| Primus Bank için şifreleme anahtarı |
| İş yükü Docker görüntüsünün aktarılacağı yapay ürün deposu. |
- Secundus projesindeki mevcut bulut kaynağı adlarıyla aşağıdaki değişkenleri ayarlayabilirsiniz. Değişken ayarlanırsa Secundus projesindeki mevcut ilgili bulut kaynağı kullanılır. Değişken ayarlanmamışsa bulut kaynağı adı proje adından oluşturulur ve yeni bulut kaynağı aşağıdakilerin bir parçası olarak oluşturulur:
| Secundus Bank'ın müşteri verileri dosyasını depolayan paket |
| İddiaları doğrulayan Secundus Bank'ın Workload Identity Pool'u (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 şifreleme anahtarı |
| İş yükü sonuçlarını depolayan paket. |
| İş yükü kapsayıcı resminin adı. |
| İş yükü container görüntüsünün etiketi. |
| İş yükünü çalıştıran Gizli Sanal Makine'ye erişme izni olan hizmet hesabı. |
- Bu codelab'de kullanılan birkaç yapay nesne vardır. Bunlar aşağıda belirtilmiştir:
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_IDiçin Cloud KMS Yöneticisi, Storage Yöneticisi, Artifact Registry Yöneticisi, Hizmet Hesabı Yöneticisi, IAM Workload Identity Pool Yöneticisi izinlerine ihtiyacınız vardır.$SECUNDUS_PROJECT_IDiçin Compute Yöneticisi, Storage Yöneticisi, Hizmet Hesabı Yöneticisi, Cloud KMS Yöneticisi, IAM Workload Identity Pool Yöneticisi, Güvenlik Yöneticisi (isteğe bağlı) izinlerine ihtiyacınız vardır.- Kaynak adları için kalan değişken adlarını 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ı gereklidir. Primus Bank için kaynakları ayarlamak üzere 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 anahtarlık ($PRIMUS_ENC_KEYRING). - Sağlayıcısı altında yapılandırılan özellik koşullarına göre talepleri doğrulamak için Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL). - Yukarıda belirtilen iş yükü kimliği havuzuna (
$PRIMUS_WORKLOAD_IDENTITY_POOL) eklenen hizmet hesabının ($PRIMUS_SERVICE_ACCOUNT) KMS anahtarını kullanarak (roles/cloudkms.cryptoKeyDecrypterrolüyle) verilerin şifresini çözme, Cloud Storage paketinden veri okuma (objectViewerrolüyle) ve hizmet hesabını iş yükü kimliği havuzuna bağlama (roles/iam.workloadIdentityUserrolüyle) erişimi vardır.
./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ğıda belirtilen 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'de şifreleme anahtarı (
$SECUNDUS_ENC_KEY) ve anahtarlık ($SECUNDUS_ENC_KEYRING). - Sağlayıcısı altında yapılandırılan özellik koşullarına göre talepleri doğrulamak için Workload Identity Pool (
$SECUNDUS_WORKLOAD_IDENTITY_POOL). - Yukarıda belirtilen iş yükü kimliği havuzuna (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) eklenen hizmet hesabı ($SECUNDUS_SERVICE_ACCOUNT), KMS anahtarını kullanarak (roles/cloudkms.cryptoKeyDecrypterrolüyle) verilerin şifresini çözme, Cloud Storage paketinden veri okuma (objectViewerrolüyle) ve hizmet hesabını iş yükü kimliği havuzuna bağlama (roles/iam.workloadIdentityUserrolüyle) erişimine sahiptir. - Secundus Bank tarafından iş yükü yürütme sonucunu depolamak için kullanılan Cloud Storage paketi (
$SECUNDUS_RESULT_STORAGE_BUCKET).
./setup_secundus_bank_resources.sh
3. İş Yükü Oluşturma
İş yükü hizmet hesabı oluşturma
Şimdi, iş yükü için aşağıda belirtilen gerekli roller ve izinlerle bir hizmet hesabı oluşturacaksınız. 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ında ($WORKLOAD_SERVICE_ACCOUNT) aşağıdaki roller bulunur:
- İş yükü hizmet hesabına
confidentialcomputing.workloadUserrolünü verin . Bu işlem, kullanıcı hesabının onay jetonu oluşturmasına olanak tanır. - İş yükü hizmet hesabına
logging.logWriterrolünü verin. Bu sayede, Confidential Space ortamı, günlükleri seri konsola ek olarak Cloud Logging'e de yazabilir. Böylece, sanal makine sonlandırıldıktan sonra günlükler kullanılabilir. objectViewerbulut depolama paketinden veri okumak için$PRIMUS_INPUT_STORAGE_BUCKET.objectViewerbulut depolama paketinden veri okumak için$SECUNDUS_INPUT_STORAGE_BUCKET.objectAdminiş yükü sonucunu$SECUNDUS_RESULT_STORAGE_BUCKETCloud Storage paketine yazmak için.
./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, kendi bulut depolama paketlerinde saklanan müşteri listelerindeki ortak müşterilerini bulur.
Aşağıdaki adımların gerçekleştirildiği bir iş yükü oluşturmak için aşağıdaki komut dosyasını çalıştırın:
- İş yükünün yayınlanacağı Primus Bank'a ait 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 burada bulabilirsiniz.
- Kodu oluşturun ve Docker görüntüsünde paketleyin. İlgili Dockerfile'ı burada bulabilirsiniz.
- Docker görüntüsünü Primus Bank'ın sahip olduğu Artifact Registry'ye (
$PRIMUS_ARTIFACT_REGISTRY) yayınlayın. - Hizmet hesabına, Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) için$WORKLOAD_SERVICE_ACCOUNTokuma 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 izin vermek istiyor:
- Ne: Doğrulanmış kod
- Nerede: Güvenli bir ortam
- Kim: Güvenilen bir operatör
Primus, bu şartlara dayalı bir erişim politikasını zorunlu kılmak için iş yükü kimliği federasyonunu kullanır.
İş yükü kimliği federasyonu, özellik koşulları belirtmenize olanak tanır. Bu koşullar, hangi kimliklerin Workload Identity Pool (WIP) ile kimlik doğrulayabileceğini kısıtlar. Ölçümleri sunmak ve politikayı zorunlu kılmak için Attestation Verifier Service'i WIP'ye Workload Identity Pool sağlayıcısı olarak ekleyebilirsiniz.
İş yükü kimliği havuzu, daha önce bulut kaynakları kurulum adımının bir parçası olarak oluşturulmuştu. Primus Bank artık yeni bir OIDC Workload Identity Pool sağlayıcısı oluşturacak. Belirtilen --attribute-condition, iş yükü kapsayıcısına erişimi yetkilendirir. Bu özellik için gerekenler:
- Ne: En son
$WORKLOAD_IMAGE_NAME,$PRIMUS_ARTIFACT_REPOSITORYdeposuna yüklendi. - Nerede: Confidential Space güvenilir yürütme ortamı, tam olarak desteklenen Confidential Space VM görüntüsünde çalışır.
- Kim: Secundus Bank
$WORKLOAD_SERVICE_ACCOUNThizmet 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 da iş yüklerinin müşteri verilerine erişmesini aşağıdaki ölçütlere göre yetkilendirmek istiyor:
- Ne: İş yükü.
- Nerede: Gizli Alan Ortamı.
- Kim: İş yükünü çalıştıran hesap (
$WORKLOAD_SERVICE_ACCOUNT).
Primus Bank, erişimi yetkilendirmesi gerekip gerekmediğini belirlemek için resim etiketini içeren image_reference hak talebini kullanır. Uzaktan depoyu kontrol ettikleri için yalnızca verilerini sızdırmayan resimleri etiketleyebilirler.
Buna karşılık Secundus Bank, görüntüyü aldığı depoyu kontrol etmediği için bu varsayımı güvenli bir şekilde yapamaz. Bunun yerine, iş yüküne erişimi image_digest temelinde yetkilendirmeyi tercih ederler. Primus Bank'ın farklı bir resme yönlendirmek için değiştirebileceği image_reference öğesinin aksine, Primus Bank, image_digest öğesinin Secundus Bank'ın önceki adımda denetlediği resimden farklı bir resmi referans almasını sağlayamazdı.
Workload Identity Pool sağlayıcıları oluşturmadan önce, sağlayıcının özellik koşullarında kullanılacak iş yükü kapsayıcı görüntüsü için image_digest 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ü Confidential Space'te çalıştıracak. Bu iş yükü, sırasıyla Primus Bank ve Secundus Bank'ın müşteri verilerini okumak ve şifrelerini çözmek için Primus'un Workload Identity havuzundan ve Secundus'un Workload Identity 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ı için bağımsız değişkenler, işaretin "tee-cmd" kısmı kullanılarak iletilir. İş yükü yürütme sonucu $SECUNDUS_RESULT_STORAGE_BUCKET adresinde yayınlanır.
İlk iş yükünü çalıştırma
İlk iş yükü yürütme kapsamında 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 çalıştırır ve sonuç $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result konumunda saklanı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ütmeyi tamamlaması ve sonucun bulut depolama paketi üzerinde 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 3 kişi listelenmiştir.
İ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 bulacağız. Aşağıda gösterildiği gibi, ikinci iş yükü "list-common-customers" komutunu çalıştıracak ve sonuç $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count konumunda saklanacaktı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ütmeyi tamamlaması ve sonucun bulut depolama paketi üzerinde 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
Sonuç, Primus ve Secundus Bank arasındaki ortak müşteriler olduğu için aşağıdaki liste olmalıdır.
Çıkış:
Eric
Clinton
Ashley
Cooper
Yetkisiz İş Yükü Çalıştırma
Primus Bank'ın Secundus Bank'ın verilerine erişmesine izin veren sözleşmesi sona erer. Bu nedenle Primus Bank, yeni iş ortağı Tertius Bank'ın hizmet hesabına sahip VM'lere izin vermek için özellik koşulunu günceller.
Primus Bank, Workload Identity Pool sağlayıcısını değiştirir.
$PRIMUS_PROJECT_ID bölümünde, yeni bir konumdaki 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. Daha sonra Primus Bank, bunu iş yükü kimliği 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ının yetkilendirilmesini 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 Pool'daki OIDC sağlayıcısını 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ştiriliyor. Secundus Bank'ın iş yükü hizmet hesabını yetkilendirmek yerine artık Tertius Bank'ın iş yükü hizmet hesabı yetkilendirilecek.
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 bu işlem başarısız olur. Hatayı görüntülemek için orijinal sonuçlar 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_IDprojesi olarak ayarlayın.
gcloud config set project $SECUNDUS_PROJECT_ID
- Sonuçlar 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ırın:
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üyorsunuz.
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Buna benzer şekilde, Primus Bank, Secundus Bank'ın tüm müşteri listesini Primus Bank'ın sahip olduğu bir pakete göndermek için iş yükünü gizlice değiştirirse bu girişim başarısız olur. Bunun nedeni, kötü amaçlı iş yükünün özetinin, Secundus Bank'ın Workload Identity havuzunda yetkilendirilen resim özetinden farklı olmasıdır.
5. Temizleme
Bu codelab kapsamında oluşturduğumuz kaynakları temizlemek için kullanılabilecek komut dosyasına buradan ulaşabilirsiniz. Bu temizlik kapsamında aşağıdaki kaynaklar silinecek:
- Primus Bank'ın giriş bulut depolama paketi (
$PRIMUS_INPUT_STORAGE_BUCKET). - Primus Bank'ın hizmet hesabı (
$PRIMUS_SERVICE_ACCOUNT). - Primus Bank'ın, resim imzalarını (
$PRIMUS_COSIGN_REPOSITORY) içeren bir yapı kayıt defteri. - Primus Bank'ın(
$PRIMUS_WORKLOAD_IDENTITY_POOL) Workload Identity Pool'u. - Secundus Bank'ın iş yükü hizmet hesabı (
$WORKLOAD_SERVICE_ACCOUNT). - Secundus Bank'ın giriş bulut depolama paketi (
$SECUNDUS_INPUT_STORAGE_BUCKET). - Secundus Bank'ın hizmet hesabı (
$SECUNDUS_SERVICE_ACCOUNT). - Secundus Bank'ın, resim imzalarını (
$SECUNDUS_COSIGN_REPOSITORY) barındıran bir yapay nesne kayıt defteri. - Secundus Bank'ın(
$SECUNDUS_WORKLOAD_IDENTITY_POOL) Workload Identity Pool'u. - Secundus Bank'ın iş yükü hizmet hesabı (
$WORKLOAD_SERVICE_ACCOUNT). - İş yükü işlem örnekleri.
- Secundus Bank'ın sonuç depolama paketi (
$SECUNDUS_RESULT_STORAGE_BUCKET). - Primus Bank'ın (
$PRIMUS_ARTIFACT_REPOSITORY) bir yapay nesne deposu.
./cleanup.sh
Keşfetme işlemini tamamladıysanız lütfen projenizi silin.
- Cloud Platform Console'a gidin.
- Kapatmak istediğiniz projeyi seçin, ardından üst kısımdaki "Sil"i tıklayın. Bu işlem, projenin silinmesini planlar.
Tebrikler
Tebrikler, codelab'i başarıyla tamamladınız.
Gizli Alan'ı kullanarak paylaşılan verilerin gizliliğini korurken güvenliğini nasıl sağlayacağınızı öğrendiniz.
Yapabilecekleriniz
Benzer codelab'lere göz atın...
- İmzalı kapsayıcı resmi Codelab'i
- Çok taraflı hesaplama ve gizli alanlarla dijital varlık işlemleri yapma
- Gizli alanlarla gizli verileri analiz etme