1. Genel Bakış
Gizli Alan, birden çok tarafın ortaklaşa çalışabileceği güvenli bir ortam sunar. Bu codelab'de, makine öğrenimi modelleri gibi hassas fikri mülkiyeti korumak için Gizli Alan'ın nasıl kullanılabileceği gösterilmektedir.
Bu codelab'de bir şirketin kendi özel makine öğrenimi modelini kullanmak isteyen başka bir şirketle güvenli bir şekilde paylaşmasını sağlamak için Gizli Alan'ı kullanacaksınız. Şirket Primus yalnızca Gizli Alan'da çalışan bir iş yüküne yayınlanabilecek bir makine öğrenimi modeline sahip. Böylece Primus, fikri mülkiyeti üzerinde tam kontrol sahibi oluyor. Şirket Secundus, iş yükü operatörü olacak ve makine öğrenimi iş yükünü Gizli Alan'da çalıştıracak. Secundus, bu modeli yükler ve Secundus'a ait örnek verileri kullanarak bir çıkarım çalıştırır.
Burada Primus, iş yükü kodunu yazan iş yükü yazarı ve fikri mülkiyetini güvenilir olmayan iş yükü operatörü Secundus'tan korumak isteyen bir ortak çalışandır. Secundus, makine öğrenimi iş yükünün iş yükü operatörüdür.
Neler öğreneceksiniz?
- Bir tarafın, fikri mülkiyet üzerindeki kontrolünü kaybetmeden, kendisine ait makine öğrenimi modelini başka bir tarafla paylaşabileceği bir ortam yapılandırma.
Gerekenler
- Bir Google Cloud Platform Projesi
- Google Compute Engine ( codelab), Gizli Sanal Makine, container'lar ve uzak depolar hakkında temel düzeyde bilgi
- Hizmet Hesapları, İş Yükü Kimlik Federasyonu ve özellik koşulları hakkında temel bilgilere sahiptir.
Gizli Alan kurulumunda yer alan roller
Bu codelab'de Şirket Primus kaynak sahibi ve iş yükü yazarı olacak ve şunlardan sorumlu olacak:
- Gerekli bulut kaynaklarını makine öğrenimi modeliyle ayarlama
- İş yükü kodunu yazma
- İş yükü görüntüsünü yayınlama
- ML modelini güvenilmeyen bir operatöre karşı korumak için Workload Identity Pool politikasını yapılandırma
Secundus Company, operatör olacak ve şunlardan sorumlu olacak:
- İş yükü ve sonuçlar tarafından kullanılan örnek görüntüleri depolamak için gerekli bulut kaynaklarını ayarlama
- Primus'un sağladığı modeli kullanarak Gizli Alan'da makine öğrenimi iş yükünü çalıştırma
Gizli Alanın işleyiş şekli
İş yükünü Gizli Alan'da çalıştırdığınızda, yapılandırılmış kaynaklar kullanılarak aşağıdaki işlem gerçekleştirilir:
- İş yükü, Workload Identity Pool'dan
$PRIMUS_SERVICEACCOUNT
için genel bir Google erişim jetonu istiyor. İş yükü ve ortam talepleriyle birlikte bir Onay Doğrulayıcı hizmet jetonu sunar. - Onay Doğrulayıcı hizmeti jetonundaki iş yükü ölçümü, WIP'deki özellik durumuyla eşleşiyorsa
$PRIMUS_SERVICEACCOUNT.
için erişim jetonunu döndürür. - İş yükü,
$PRIMUS_INPUT_STORAGE_BUCKET
paketinde depolanan makine öğrenimi modeline erişmek için$PRIMUS_SERVICEACCOUNT
ile ilişkili hizmet hesabı erişim jetonunu kullanır. - İş yükü, Secundus'un sahip olduğu veriler üzerinde bir işlem gerçekleştirir. Bu iş yükü Secundus'un projesinde yürütülüp çalıştırılır.
- İş yükü,
$WORKLOAD_SERVICEACCOUNT
hizmet hesabını kullanarak bu işlemin sonuçlarını$SECUNDUS_RESULT_STORAGE_BUCKET
paketine yazar.
2. Cloud Kaynakları'nı kurun
Başlamadan önce
- Bu codelab'in bir parçası olarak 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/ml_model_protection/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 farkı hakkında bilgi için bu makaleye bakabilirsiniz.
export PRIMUS_PROJECT_ID=<GCP project id of Primus>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus>
- Projeleriniz için Faturalandırmayı etkinleştirin.
- Her iki proje için de Gizli Bilişim API'sini ve izleme API'lerini etkinleştirin.
gcloud services enable \
cloudapis.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- Aşağıdaki komutu kullanarak yukarıda belirtilen kaynak adları için değişkenlere değer atayın. Bu değişkenler, kaynak adlarını gerektiği gibi özelleştirmenize ve daha önce oluşturulmuşsa mevcut kaynakları kullanmanıza olanak tanır. (örn.
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'
)
- Aşağıdaki değişkenleri, Primus projesindeki mevcut bulut kaynağı adlarıyla ayarlayabilirsiniz. Değişken ayarlanırsa Primus projesindeki karşılık gelen mevcut bulut kaynağı kullanılır. Değişken ayarlanmazsa bulut kaynağı adı, proje adından oluşturulur ve bu adla yeni bulut kaynağı oluşturulur. Aşağıda, kaynak adları için desteklenen değişkenler bulunmaktadır:
| Primus'un makine öğrenimi modelini depolayan paket. |
| Primus'un iddiaları doğrulayan iş yükü kimlik havuzu (WIP). |
| Primus'un, Onay Doğrulayıcı hizmeti tarafından imzalanan jetonlar için kullanılacak yetkilendirme koşulunu içeren iş yükü kimlik havuzu sağlayıcısı. |
|
|
| İş yükü Docker görüntüsünün aktarılacağı yapı deposu. |
- Aşağıdaki değişkenleri Secundus projesindeki mevcut bulut kaynağı adlarıyla ayarlayabilirsiniz. Değişken ayarlanırsa Secundus projesindeki karşılık gelen mevcut bulut kaynağı kullanılır. Değişken ayarlanmazsa bulut kaynağı adı, proje adından oluşturulur ve bu adla yeni bir bulut kaynağı oluşturulur. Aşağıda, kaynak adları için desteklenen değişkenler bulunmaktadır:
| Secundus'un, Primus'un sağladığı modeli kullanarak sınıflandırmak istediği örnek görüntüleri depolayan paket. |
| İş yükünün sonuçlarını depolayan paket. |
| İş yükü container görüntüsünün adı. |
| İş yükü container görüntüsünün etiketi. |
| İş yükünü çalıştıran Gizli Sanal Makine'ye erişim izni olan hizmet hesabı. |
- Bu iki proje için belirli izinlere ihtiyacınız vardır. GCP Console'u kullanarak IAM rolleri verme hakkında bilgi edinmek için bu rehberi inceleyebilirsiniz:
$PRIMUS_PROJECT_ID
için Depolama Alanı Yöneticisi, Artifact Registry Yöneticisi, Hizmet Hesabı Yöneticisi, IAM Workload Identity Havuz Yöneticisi gerekir.$SECUNDUS_PROJECT_ID
için Compute Yöneticisi, Depolama Alanı Yöneticisi, Hizmet Hesabı Yöneticisi, IAM Workload Identity Havuz Yöneticisi, Güvenlik Yöneticisi (isteğe bağlı) ihtiyacınız olacaktır.- Kalan değişken adlarını, kaynak adları için proje kimliğinize göre değerlere göre ayarlamak üzere aşağıdaki komut dosyasını çalıştırın.
source config_env.sh
Primus Company kaynaklarını ayarlayın
Bu adımın bir parçası olarak Primus için gerekli bulut kaynaklarını ayarlayacaksınız. Primus için kaynakları ayarlamak üzere aşağıdaki komut dosyasını çalıştırın. Komut dosyası yürütme işleminin bir parçası olarak aşağıdaki kaynaklar oluşturulacak:
- Primus'un makine öğrenimi modelini depolamak için Cloud Storage paketi (
$PRIMUS_INPUT_STORAGE_BUCKET
). - Sağlayıcısı altında yapılandırılan özellik koşullarına göre hak taleplerini doğrulamak için kullanılan Workload Identity havuzu (
$PRIMUS_WORKLOAD_IDENTITY_POOL
). objectViewer
rolüyle bulut depolama paketinden veri okumak için IAM erişimi ve bu hizmet hesabını iş yükü kimlik havuzuna bağlamak (roles/iam.workloadIdentityUser
rolü kullanılarak) ile yukarıda belirtilen iş yükü kimliği havuzuna ($PRIMUS_WORKLOAD_IDENTITY_POOL
) ekli hizmet hesabı ($PRIMUS_SERVICEACCOUNT
).
Bu bulut kaynakları kurulumunun bir parçası olarak bir TensorFlow modeli kullanacağız. Modelin mimarisini, ağırlıklarını ve eğitim yapılandırmasını içeren modelin tamamını bir ZIP arşivine kaydedebiliriz. Bu codelab'in amacı doğrultusunda, buradaki ImageNet veri kümesinde eğitilmiş MobileNet V1 modelini kullanacağız.
./setup_primus_company_resources.sh
Yukarıda belirtilen komut dosyası, bulut kaynağını oluşturur. Şimdi modeli, komut dosyası tarafından oluşturulan Cloud Storage paketine indirip yayınlayacağız.
- Önceden eğitilmiş modeli buradan indirin.
- İndirildikten sonra, indirilen tar dosyasını model.tar.gz olarak yeniden adlandırın.
- model.tar.gz dosyasını içeren dizinden aşağıdaki komutu kullanarak model.tar.gz dosyasını Cloud Storage paketine yayınlayın.
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/
Secundus Company kaynaklarını ayarlama
Bu adımın bir parçası olarak Secundus için gerekli bulut kaynaklarını kuracaksınız. Secundus kaynaklarını ayarlamak için aşağıdaki komut dosyasını çalıştırın. Bu adımlar kapsamında aşağıdaki kaynaklar oluşturulacaktır:
- Secundus'tan çıkarımlar çalıştırmak üzere örnek görüntüleri depolamak için kullanılan bulut depolama paketi (
$SECUNDUS_INPUT_STORAGE_BUCKET
). - Secundus tarafından makine öğrenimi iş yükü yürütmenin sonucunu depolamak için Cloud Storage paketi (
$SECUNDUS_RESULT_STORAGE_BUCKET
).
Bu codelab için bazı örnek resimleri burada bulabilirsiniz.
./setup_secundus_company_resources.sh
3. İş Yükü oluşturma
İş yükü hizmet hesabı oluşturma
Şimdi, gerekli rol ve izinlere sahip iş yükü için bir hizmet hesabı oluşturacaksınız. Secundus projesinde bir iş yükü hizmet hesabı oluşturmak için aşağıdaki komut dosyasını çalıştırın. Bu hizmet hesabı, ML iş yükünü çalıştıran sanal makine tarafından kullanılır.
Bu iş yükü hizmet hesabı ($WORKLOAD_SERVICEACCOUNT
) aşağıdaki rollere sahip olacak:
- Onay jetonu almak için
confidentialcomputing.workloadUser
- Cloud Logging'e günlük yazmak için
logging.logWriter
. $SECUNDUS_INPUT_STORAGE_BUCKET
bulut depolama paketindeki verileri okumak içinobjectViewer
.- İş yükü sonucunu
$SECUNDUS_RESULT_STORAGE_BUCKET
bulut depolama alanı paketine yazmak içinobjectUser
.
./create_workload_service_account.sh
İş yükü oluşturun
Bu adımın parçası olarak bir iş yükü Docker görüntüsü oluşturacaksınız. İş yükü Primus tarafından yazılır. Bu codelab'de kullanılan iş yükü, Primus'un depolama paketinde depolanan makine öğrenimi modeline erişen ve depolama paketinde depolanan örnek görüntülerle çıkarımlar çalıştıran makine öğrenimi Python kodudur.
Primus'un depolama paketinde depolanan makine öğrenimi modeline yalnızca gerekli özellik koşullarını karşılayan iş yükleri erişebilir. Bu özellik koşulları, iş yükünü yetkilendirmeyle ilgili bir sonraki bölümde daha ayrıntılı olarak açıklanmıştır.
Bu codelab'de oluşturulup kullanılacak iş yükünün run_inference() yöntemini aşağıda bulabilirsiniz. İş yükü kodunun tamamını burada bulabilirsiniz.
def run_inference(image_path, model):
try:
# Read and preprocess the image
image = tf.image.decode_image(tf.io.read_file(image_path), channels=3)
image = tf.image.resize(image, (128, 128))
image = tf.image.convert_image_dtype(image, tf.float32)
image = tf.expand_dims(image, axis=0)
# Get predictions from the model
predictions = model(image)
predicted_class = np.argmax(predictions)
top_k = 5
top_indices = np.argsort(predictions[0])[-top_k:][::-1]
# Convert top_indices to a TensorFlow tensor
top_indices_tensor = tf.convert_to_tensor(top_indices, dtype=tf.int32)
# Use TensorFlow tensor for indexing
top_scores = tf.gather(predictions[0], top_indices_tensor)
return {
"predicted_class": int(predicted_class),
"top_k_predictions": [
{"class_index": int(idx), "score": float(score)}
for idx, score in zip(top_indices, top_scores)
],
}
except Exception as e:
return {"error": str(e)}
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:
- Primus'a ait Artifact Registry(
$PRIMUS_ARTIFACT_REGISTRY
) oluşturun. - İş yükü kodunu gerekli kaynak adlarıyla güncelleyin.
- ML iş yükünü derleyin ve iş yükü kodunun Docker görüntüsü oluşturmak için Dockerfile oluşturun. Bu codelab için kullanılan Dockerfile'ı burada bulabilirsiniz.
- Docker görüntüsünü derleyip Primus'a ait Artifact Registry'de (
$PRIMUS_ARTIFACT_REGISTRY
) yayınlayın. $WORKLOAD_SERVICEACCOUNT
uygulamasına$PRIMUS_ARTIFACT_REGISTRY
için okuma izni verin. Bu, iş yükü container'ının iş yükü Docker görüntüsünü Artifact Registry'den çekmesi için gereklidir.
./create_workload.sh
Ayrıca iş yükleri, makine öğrenimi modelinin beklenen sürümünü yüklemeden önce modelin karmasını veya imzasını kontrol ederek yükleneceğinden emin olmak için kodlanabilir. Bu tür ek denetimlerin avantajı, makine öğrenimi modelinin bütünlüğünü sağlamasıdır. Bu sayede, iş yükünün ML modelinin farklı sürümlerini kullanması beklendiğinde iş yükü operatörünün iş yükü görüntüsünü veya parametrelerini de güncellemesi gerekir.
4. İş Yükünü Yetkilendirme ve Çalıştırma
İş Yükünü yetkilendirme
Primus, aşağıdaki kaynakların özelliklerine göre makine öğrenimi modellerine erişmek için iş yüklerini yetkilendirmek istiyor:
- Ne: Doğrulanan kod
- Yer: Güvenli bir ortam
- Kim: Güvenilir bir operatör
Primus, bu gereksinimlere göre bir erişim politikası uygulamak için İş Yükü kimlik federasyonu'nu kullanır. İş yükü kimliği federasyonu, özellik koşullarını belirtmenize olanak tanır. Bu koşullar, iş yükü kimlik havuzu (WIP) ile hangi kimliklerin kimlik doğrulaması yapabileceğini kısıtlar. Ölçümler sunmak ve politikayı uygulamak için Onay Doğrulayıcı Hizmeti'ni WIP'ye bir iş yükü kimlik havuzu sağlayıcısı olarak ekleyebilirsiniz.
Workload Identity havuzu, daha önce bulut kaynakları kurulum adımı kapsamında oluşturulmuş. Primus, şimdi yeni bir OIDC iş yükü kimliği havuzu sağlayıcı oluşturacak. Belirtilen --attribute-condition
, iş yükü kapsayıcısına erişim yetkisi verir. Bunun için gerekenler:
- Ne:
$PRIMUS_ARTIFACT_REPOSITORY
deposuna en son$WORKLOAD_IMAGE_NAME
yüklendi. - Nerede: Gizli Alan güvenilir yürütme ortamı, tam olarak desteklenen Gizli Alan Sanal Makine görüntüsünde çalışıyor.
- Kim: Secundus
$WORKLOAD_SERVICE_ACCOUNT
hizmet hesabı.
export WORKLOAD_IMAGE_DIGEST=$(docker images –digests ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}| awk 'NR>1{ print $3 }')
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_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_SERVICEACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
İş Yükünü Çalıştır
Bu adım kapsamında, iş yükünü Gizli Alan sanal makinesinde çalıştıracağız. Gerekli TEE bağımsız değişkenleri meta veri işareti kullanılarak iletilir. İş yükü container'ının bağımsız değişkenleri "tee-cmd
" kullanılarak iletilir bir kısmı. İş yükü yürütmenin sonucu $SECUNDUS_RESULT_STORAGE_BUCKET
üzerinde yayınlanır.
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=TERMINATE \
--scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${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}
Sonuçları görüntüle
İş yükü başarıyla tamamlandıktan sonra ML iş yükünün sonucu $SECUNDUS_RESULT_STORAGE_BUCKET
üzerinde yayınlanır.
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
Aşağıda, örnek görüntülerle ilgili çıkarım sonuçlarının nasıl görünebileceğine dair bazı örnekler verilmiştir:
Image: sample_image_1.jpeg, Response: {'predicted_class': 531, 'top_k_predictions': [{'class_index': 531, 'score': 12.08437442779541}, {'class_index': 812, 'score': 10.269512176513672}, {'class_index': 557, 'score': 9.202644348144531}, {'class_index': 782, 'score': 9.08737564086914}, {'class_index': 828, 'score': 8.912498474121094}]}
Image: sample_image_2.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 9.53619384765625}, {'class_index': 557, 'score': 7.928380966186523}, {'class_index': 783, 'score': 7.70129919052124}, {'class_index': 531, 'score': 7.611623287200928}, {'class_index': 906, 'score': 7.021416187286377}]}
Image: sample_image_3.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 6.09878396987915}, {'class_index': 447, 'score': 5.992854118347168}, {'class_index': 444, 'score': 5.9582319259643555}, {'class_index': 816, 'score': 5.502010345458984}, {'class_index': 796, 'score': 5.450454235076904}]}
Secundus depolama paketindeki her örnek görüntü için sonuçlarda bir giriş görürsünüz. Bu giriş iki temel bilgi içerecektir:
- Tahmin edilen_sınıf dizini: Bu, modelin resmin ait olduğunu tahmin ettiği sınıfı temsil eden sayısal bir dizindir.
- Top_k_predictions: Bu, resim için en yüksek olasılıktan en az olasıya doğru sıralanmış şekilde k adede kadar tahmin sağlar. k değeri, bu codelab'de 5 olarak ayarlanmıştır. Ancak daha fazla veya daha az tahmin almak için iş yükü kodunda ayarlayabilirsiniz.
Sınıf dizinini kullanıcıların okuyabileceği bir sınıf adına dönüştürmek için buradaki etiketlerin listesine bakın. Örneğin, 2 olan bir sınıf dizinini görüyorsanız bu, "tench" sınıf etiketine karşılık gelir. etiketini ekleyin.
Bu codelab'de, Primus'a ait olan ve yalnızca TEE'de çalışan iş yüküne yayınlanan bir model olduğunu gösterdik. Secundus, makine öğrenimi iş yükünü bir TEE'de çalıştırır ve bu iş yükü Primus'un sahip olduğu modeli kullanırken Primus model üzerinde tam kontrole sahiptir.
Yetkisiz İş Yükü Çalıştırma
Secundus, Primus tarafından yetkilendirilmemiş kendi yapı deposundan farklı bir iş yükü görüntüsü çekerek iş yükü görüntüsünü değiştiriyor. Primus'un Workload Identity havuzu yalnızca ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
İş Yükü görüntüsünü yetkilendirdi.
İş yükünü yeniden çalıştırma
Secundus, bu yeni iş yükü görüntüsüyle 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 silip iş yükünü tekrar çalıştırmayı deneyin.
Lütfen Secundus'un (us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
olarak) yapı kaydı altında yayınlanan yeni bir Docker görüntüsü ve iş yükü hizmet hesabının ($WORKLOAD_SERVICEACCOUNT
) yapı kayıt defteri okuyucusuna bu yeni iş yükü görüntüsünü okuma izni verdiğinden emin olun. Bunun amacı, Primus'un WIP politikası iş yükü tarafından sunulan jetonu reddetmeden önce iş yükünün çıkmamasını sağlamaktır.
Mevcut sonuç dosyasını ve sanal makine örneğini silin
- 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/result
- Gizli Sanal Makine örneğini silin.
gcloud compute instances delete ${WORKLOAD_VM}
Yetkisiz iş yükünü çalıştırın:
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=TERMINATE \
--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=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
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/result
5. Temizleme
Bu codelab kapsamında oluşturduğumuz kaynakları temizlemek için kullanılabilecek komut dosyasını burada bulabilirsiniz. Bu temizlik işlemi kapsamında aşağıdaki kaynaklar silinecek:
- Primus'un (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - Primus hizmet hesabı (
$PRIMUS_SERVICEACCOUNT
). - Primus'un yapı deposu (
$PRIMUS_ARTIFACT_REPOSITORY
). - Primus Workload Identity havuzu (
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Secundus'un iş yükü hizmet hesabı (
$WORKLOAD_SERVICEACCOUNT
). - Secundus'un giriş depolama paketi (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - İş Yükü Compute Örnekleri.
- Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
) sonuç depolama paketi.
$ ./cleanup.sh
Keşfi tamamladıysanız lütfen projenizi silin.
- Cloud Platform Console'a gidin
- Kapatmak istediğiniz projeyi seçin, ardından "Sil"i tıklayın üstte görünür: Bu işlem, projeyi silinmek üzere programlar
Sırada ne var?
Aşağıdaki benzer codelab'lerden birkaçına göz atın...