Gizli Alanı kullanarak makine öğrenimi modellerinin ve Fikri Mülkiyetin güvenliğini sağlama

1. Genel Bakış

Confidential Space, birden fazla taraf arasında işbirliği için güvenli bir ortam sunar. Bu codelab'de, Confidential Space'in makine öğrenimi modelleri gibi hassas fikri mülkiyetleri korumak için nasıl kullanılabileceği gösterilmektedir.

Bu codelab'de, bir şirketin tescilli makine öğrenimi modelini, modeli kullanmak isteyen başka bir şirketle güvenli bir şekilde paylaşmasını sağlamak için Confidential Space'i kullanacaksınız. Özellikle Company Primus, yalnızca Confidential Space'te çalışan bir iş yüküne yayınlanacak bir makine öğrenimi modeline sahiptir. Bu sayede Primus, fikri mülkiyeti üzerinde tam kontrol sahibi olabilir. Company Secundus, iş yükü operatörü olacak ve makine öğrenimi iş yükünü Confidential Space'te çalıştıracak. Secundus bu modeli yükler ve Secundus'a ait örnek verileri kullanarak çıkarım yapar.

Burada Primus, iş yükü kodunu yazan iş yükü yazarı ve fikri mülkiyetini güvenilmeyen iş yükü operatörü Secundus'tan korumak isteyen bir iş ortağıdır. Secundus, makine öğrenimi iş yükünün iş yükü operatörüdür.

5a86c47d935da998.jpeg

Neler öğreneceksiniz?

  • Bir tarafın, fikri mülkiyet üzerindeki kontrolünü kaybetmeden tescilli makine öğrenimi modelini başka bir tarafla paylaşabileceği bir ortam nasıl yapılandırılır?

Gerekenler

Gizli alan kurulumuna dahil olan roller

Bu codelab'de, Company Primus kaynak sahibi ve iş yükü yazarı olacak ve aşağıdakilerden sorumlu olacaktır:

  1. Gerekli bulut kaynaklarını makine öğrenimi modeliyle ayarlama
  2. İş yükü kodunu yazma
  3. İş yükü resmini yayınlama
  4. Workload Identity Pool politikasını, makine öğrenimi modelini güvenilmeyen bir operatöre karşı koruyacak şekilde yapılandırma

Secundus Company, operatör olarak aşağıdakilerden sorumlu olacaktır:

  1. İş yükü tarafından kullanılan örnek resimleri ve sonuçları depolamak için gerekli bulut kaynaklarını ayarlama
  2. Primus tarafından sağlanan modeli kullanarak Confidential Space'te makine öğrenimi iş yükünü çalıştırma

Gizli Alan'ın işleyiş şekli

İş yükünü Confidential Space'te çalıştırdığınızda, yapılandırılmış kaynaklar kullanılarak aşağıdaki işlem gerçekleşir:

  1. İş yükü, Workload Identity havuzundan $PRIMUS_SERVICEACCOUNT için genel bir Google erişim jetonu istiyor. İş yükü ve ortam talepleri içeren bir Attestation Verifier hizmet jetonu sunar.
  2. Attestation Verifier hizmeti jetonundaki iş yükü ölçümü talepleri, WIP'deki özellik koşuluyla eşleşirse $PRIMUS_SERVICEACCOUNT. için erişim jetonunu döndürür.
  3. İş yükü, $PRIMUS_SERVICEACCOUNT ile ilişkili hizmet hesabı erişim jetonunu kullanarak $PRIMUS_INPUT_STORAGE_BUCKET paketinde depolanan makine öğrenimi modeline erişir.
  4. İş yükü, Secundus'a ait veriler üzerinde bir işlem gerçekleştirir ve bu iş yükü, Secundus tarafından kendi projesinde çalıştırılır.
  5. İş yükü, bu işlemin sonuçlarını $SECUNDUS_RESULT_STORAGE_BUCKET paketine yazmak için $WORKLOAD_SERVICEACCOUNT hizmet hesabını kullanır.

2. Cloud 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/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'i inceleyin. 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>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus>
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. (ör.export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  1. 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 bu adla yeni bir bulut kaynağı oluşturulur. Kaynak adları için desteklenen değişkenler şunlardır:

$PRIMUS_INPUT_STORAGE_BUCKET

Primus'un makine öğrenimi modelini depolayan paket.

$PRIMUS_WORKLOAD_IDENTITY_POOL

İddiaları doğrulayan Primus'un Workload Identity Pool'u (WIP).

$PRIMUS_WIP_PROVIDER

Primus'un Workload Identity havuzu sağlayıcısı. Bu sağlayıcı, Onay Doğrulayıcı hizmeti tarafından imzalanan jetonlar için kullanılacak yetkilendirme koşulunu içerir.

$PRIMUS_SERVICE_ACCOUNT

$PRIMUS_WORKLOAD_IDENTITY_POOL'nın korunan kaynaklara (bu kod laboratuvarındaki makine öğrenimi modeli) erişmek için kullandığı Primus hizmet hesabı. Bu adımda, $PRIMUS_INPUT_STORAGE_BUCKET paketinde depolanan makine öğrenimi modelini okuma izni vardır.

$PRIMUS_ARTIFACT_REPOSITORY

İş yükü Docker görüntüsünün aktarılacağı yapay ürün deposu.

  1. 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 bu adla yeni bir bulut kaynağı oluşturulur. Kaynak adları için desteklenen değişkenler şunlardır:

$SECUNDUS_INPUT_STORAGE_BUCKET

Secundus'un Primus tarafından sağlanan modeli kullanarak sınıflandırmak istediği örnek resimleri depolayan paket.

$SECUNDUS_RESULT_STORAGE_BUCKET

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

$WORKLOAD_IMAGE_NAME

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

$WORKLOAD_IMAGE_TAG

İş yükü container görüntüsünün etiketi.

$WORKLOAD_SERVICE_ACCOUNT

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

  • Bu iki proje için belirli izinlere ihtiyacınız olacak. GCP Console'u kullanarak IAM rolleri verme hakkında bilgi edinmek için bu kılavuza göz atabilirsiniz:
  • $PRIMUS_PROJECT_ID için Depolama Yöneticisi, Artifact Registry Yöneticisi, Hizmet Hesabı Yöneticisi ve IAM Workload Identity Havuz Yöneticisi rollerine sahip olmanız gerekir.
  • $SECUNDUS_PROJECT_ID için Compute Yöneticisi, Storage Yöneticisi, Hizmet Hesabı Yöneticisi, IAM Workload Identity Havuz Yöneticisi ve Güvenlik Yöneticisi (isteğe bağlı) rollerine 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 Company kaynaklarını ayarlama

Bu adımda, 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 kapsamında aşağıdaki kaynaklar oluşturulur:

  • 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 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) eklenmiş, bulut depolama alanındaki verileri okumak için (objectViewer rolü kullanılarak) IAM erişimine sahip ve bu hizmet hesabını iş yükü kimliği havuzuna bağlamak için (roles/iam.workloadIdentityUser rolü kullanılarak) kullanılan hizmet hesabı ($PRIMUS_SERVICEACCOUNT).

Bu bulut kaynakları kurulumunun bir parçası olarak TensorFlow modeli kullanacağız. Modelin mimarisi, ağırlıkları ve eğitim yapılandırması dahil olmak üzere tüm modeli bir ZIP arşivine kaydedebiliriz. Bu codelab'de, burada bulunan ImageNet veri kümesi üzerinde eğitilmiş MobileNet V1 modelini kullanacağız.

./setup_primus_company_resources.sh

Yukarıda bahsedilen komut dosyası, bulut kaynağını ayarlayacaktır. Şimdi modeli indirip komut dosyası tarafından oluşturulan Cloud Storage paketinde yayınlayacağız.

  1. Önceden eğitilmiş modeli buradan indirin.
  2. İndirildikten sonra indirilen tar dosyasını model.tar.gz olarak yeniden adlandırın.
  3. model.tar.gz dosyasını içeren dizinden aşağıdaki komutu kullanarak model.tar.gz dosyasını Cloud Storage paketinde yayınlayın.
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/

Secundus Company kaynaklarını ayarlama

Bu adımda, Secundus için gerekli bulut kaynaklarını ayarlayacaksınız. Secundus için kaynakları ayarlamak üzere aşağıdaki komut dosyasını çalıştırın. Bu adımlar kapsamında aşağıdaki kaynaklar oluşturulur:

  • Secundus tarafından çıkarım çalıştırmak için örnek görüntülerin depolandığı Cloud Storage paketi ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Secundus tarafından makine öğrenimi iş yükü yürütme sonucunu depolamak için kullanılan Cloud Storage paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).

Bu codelab için bazı örnek resimler burada sunulmaktadır.

./setup_secundus_company_resources.sh

3. İş Yükü Oluşturma

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

Şimdi, iş yükü için gerekli roller ve izinlere sahip bir hizmet hesabı oluşturacaksınız. Secundus projesinde iş yükü hizmet hesabı oluşturmak için aşağıdaki komut dosyasını çalıştırın. Bu hizmet hesabı, makine öğrenimi iş yükünü çalıştıran sanal makine tarafından kullanılır.

Bu iş yükü hizmet hesabında ($WORKLOAD_SERVICEACCOUNT) aşağıdaki roller bulunur:

  • confidentialcomputing.workloadUser onay jetonu almak için
  • logging.logWriter Cloud Logging'e günlük kaydı yazmak için.
  • objectViewer bulut depolama paketinden veri okumak için $SECUNDUS_INPUT_STORAGE_BUCKET.
  • objectUser iş yükü sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET Cloud Storage paketine yazmak için.
./create_workload_service_account.sh

İş yükü oluşturma

Bu adımda bir iş yükü Docker görüntüsü oluşturacaksınız. İş yükü Primus tarafından oluşturulur. Bu codelab'de kullanılan iş yükü, Primus'un depolama paketinde depolanan makine öğrenimi modeline erişen ve depolama paketinde depolanan örnek resimlerle çıkarımlar yürüten makine öğrenimi Python kodudur.

Primus'un depolama paketinde saklanan 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ü yetkilendirme ile ilgili sonraki bölümde daha ayrıntılı olarak açıklanmıştır.

Bu codelab'de oluşturulacak ve kullanılacak iş yükünün run_inference() yöntemi aşağıda verilmiştir. İş 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.
  • Makine öğrenimi iş yükünü oluşturun ve iş yükü kodunun Docker görüntüsünü oluşturmak için Dockerfile oluşturun. Bu codelab'de kullanılan Dockerfile'ı burada bulabilirsiniz.
  • Docker görüntüsünü Primus'a ait Artifact Registry'de ($PRIMUS_ARTIFACT_REGISTRY) oluşturup yayınlayın.
  • $WORKLOAD_SERVICEACCOUNT için $PRIMUS_ARTIFACT_REGISTRY 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, kullanılmadan önce modelin karma veya imzası kontrol edilerek makine öğrenimi modelinin beklenen sürümünü yüklediğinden emin olacak şekilde kodlanabilir. Bu tür ek kontrollerin avantajı, makine öğrenimi modelinin bütünlüğünü sağlamasıdır. Bu durumda, iş yükünün makine öğrenimi modelinin farklı sürümlerini kullanması beklendiğinde iş yükü operatörünün iş yükü resmini 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 iş yüklerinin makine öğrenimi modeline 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, 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. Şunlar gerekir:

  • Ne: En son $WORKLOAD_IMAGE_NAME, $PRIMUS_ARTIFACT_REPOSITORY deposuna 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 $WORKLOAD_SERVICE_ACCOUNT hizmet hesabı.
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 $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ü Çalıştırma

Bu adım kapsamında, iş yükünü Gizli Alan VM'sinde çalıştıracağız. Zorunlu 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.

gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --project=${SECUNDUS_PROJECT_ID} \
 --maintenance-policy=MIGRATE \
 --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 makine öğrenimi iş yükünün sonucu $SECUNDUS_RESULT_STORAGE_BUCKET adresinde yayınlanır.

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result

Aşağıda, örnek resimlerdeki çı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}]}

Bir Secundus depolama paketindeki her örnek resim için sonuçlarda bir giriş görürsünüz. Bu girişte iki önemli bilgi yer alır:

  • Index of predicted_class: Bu, modelin resmin ait olduğunu tahmin ettiği sınıfı temsil eden sayısal bir indekstir.
  • Top_k_predictions: Bu, resim için en olasıdan en az olasıya doğru sıralanmış en fazla k tahmin sağlar. Bu kod laboratuvarında k değeri 5 olarak ayarlanmıştır ancak daha fazla veya daha az tahmin almak için iş yükü kodunda bu değeri ayarlayabilirsiniz.

Sınıf dizinini kullanıcıların okuyabileceği bir sınıf adına çevirmek için buradaki etiket listesine bakın. Örneğin, 2 sınıf dizini görürseniz bu, etiketler listesindeki "tench" sınıf etiketine karşılık gelir.

Bu codelab'de, yalnızca TEE'de çalışan iş yüküne yayınlanan Primus'a ait bir modelin nasıl oluşturulacağını gösterdik. Secundus, ML iş yükünü bir TEE'de çalıştırır ve bu iş yükü, Primus'un sahip olduğu modeli kullanabilir. Primus ise model üzerinde tam kontrol sahibi olmaya devam eder.

Yetkisiz İş Yükü Çalıştırma

Secundus, kendi yapay ürün deposundan Primus tarafından yetkilendirilmemiş farklı bir iş yükü resmi çekerek iş yükü resmini değiştirir. 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 iş yükü resmini yetkilendirdi.

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

Secundus, orijinal iş yükünü bu yeni iş yükü resmiyle çalıştırmaya çalıştığında 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.

Lütfen Secundus'un (us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}) Artifact Registry'si altında yeni bir Docker görüntüsünün yayınlandığından ve iş yükü hizmet hesabına ($WORKLOAD_SERVICEACCOUNT), bu yeni iş yükü görüntüsünü okumak için Artifact Registry okuyucu izni verildiğinden emin olun. Bu, iş yükünün, Primus'un WIP politikası tarafından iş yükü tarafından sunulan jeton reddedilmeden önce çıkmamasını sağlamak içindir.

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/result
  1. Gizli Sanal Makine örneğini silin.
gcloud compute instances delete ${WORKLOAD_VM} --zone=${SECUNDUS_PROJECT_ZONE}

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

gcloud compute instances create ${WORKLOAD_VM} \
 --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_SERVICEACCOUNT}@${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üyorsunuz.

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ına buradan ulaşabilirsiniz. Bu temizlik kapsamında aşağıdaki kaynaklar silinecek:

  • Primus'un giriş depolama paketi ($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ü işlem örnekleri.
  • Secundus'un sonuç depolama paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).
$ ./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.

Yapabilecekleriniz

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