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

1. Genel Bakış

Gizli Alan, birden fazla taraf arasında işbirliği için güvenli bir ortam sunar. Bu codelab'de, Gizli Alan'ın makine öğrenimi modelleri gibi hassas fikri mülkleri 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 Gizli Alan'ı kullanacaksınız. Daha açık belirtmek gerekirse Primus adlı şirket, yalnızca Gizli Alan'da çalışan bir iş yüküne yayınlanacak bir makine öğrenimi modeline sahiptir. Bu model, Primus'un fikri mülkiyeti üzerinde tam kontrol sahibi olmasını sağlar. Secundus şirketi, 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 çı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ülkiyeti üzerinde kontrolünü kaybetmeden tescilli ML modelini başka bir tarafla paylaşabileceği bir ortam nasıl yapılandırılır?

Gerekenler

Gizli Alan kurulumunda yer alan roller

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

  1. Gerekli bulut kaynaklarını makine öğrenimi modeli ile ayarlama
  2. İş yükü kodunu yazma
  3. İş yükü resmini yayınlama
  4. ML modelini güvenilmeyen bir operatöre karşı korumak için Workload Identity havuzu politikasını yapılandırma

Secundus Company, operatör olacak ve 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 makine öğrenimi iş yükünü Gizli Alan'da çalıştırma

Gizli Alan'ın işleyiş şekli

Yük dengeleyiciyi 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 ister. İş yükü ve ortam iddiaları içeren bir Attestation Verifier hizmet jetonu sunar.
  2. Attestation Verifier hizmetinde bulunan iş yükü ölçümü hak talepleri WIP'deki özellik koşuluyla eşleşirse $PRIMUS_SERVICEACCOUNT. için erişim jetonunu döndürür.
  3. İş 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.
  4. İş yükü, Secundus'a ait veriler üzerinde bir işlem gerçekleştirir ve bu iş yükü, Secundus tarafından projesinde işletilir ve ç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ı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/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 kod laboratuvarını 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 oluşturulmuşsa mevcut kaynakları kullanmanıza olanak tanır. (ör.export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  1. 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 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

Primus'un hak taleplerini doğrulayan iş yükü kimliği havuzu (WIP).

$PRIMUS_WIP_PROVIDER

Primus'un Workload Identity havuzu sağlayıcısı. 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'nin, 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 gönderileceği yapı depolama alanı.

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

$SECUNDUS_INPUT_STORAGE_BUCKET

Primus tarafından sağlanan modeli kullanarak Secundus'un 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ü kapsayıcı resminin 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 bu kılavuza göz atabilirsiniz:
  • $PRIMUS_PROJECT_ID için Depolama Yöneticisi, Artifact Registry Yöneticisi, Hizmet Hesabı Yöneticisi, IAM Workload Identity Havuz Yöneticisi rolüne sahip olmanız gerekir.
  • $SECUNDUS_PROJECT_ID için Compute Yöneticisi, Depolama Yöneticisi, Hizmet Hesabı Yöneticisi, IAM Workload Identity Havuz Yöneticisi, Güvenlik Yöneticisi (isteğe bağlı) rolüne 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 Company kaynaklarını ayarlama

Bu adımda, Primus için gerekli bulut kaynaklarını ayarlarsı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 iddiaları doğrulamak için Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Yukarıda belirtilen iş yükü kimlik havuzuna ($PRIMUS_WORKLOAD_IDENTITY_POOL) bağlı hizmet hesabı ($PRIMUS_SERVICEACCOUNT), bulut depolama alanındaki verileri okumak (objectViewer rolü kullanılarak) ve bu hizmet hesabını iş yükü kimlik havuzuna bağlamak (roles/iam.workloadIdentityUser rolü kullanılarak) için IAM erişimine sahiptir.

Bu bulut kaynağı kurulumu kapsamında 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şivinde kaydedebiliriz. Bu codelab'de, burada bulunan ImageNet veri kümesinde eğitilen MobileNet V1 modelini kullanacağız.

./setup_primus_company_resources.sh

Yukarıda belirtilen komut dosyası bulut kaynağını oluşturur. Ardından modeli indirip komut dosyası tarafından oluşturulan Cloud Storage paketinde yayınlayacağız.

  1. Önceden eğitilmiş modeli buradan indirin.
  2. İndirilen tar dosyasını model.tar.gz olarak yeniden adlandırın.
  3. model.tar.gz dosyasını içeren dizinde 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 şirket 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 resimleri depolayacak Cloud Storage paketi ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Secundus tarafından ML iş yükünün yürütülmesinin sonucunu depolamak için Cloud Storage paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).

Bu kod laboratuvarının bazı örnek resimleri burada sunulmaktadır.

./setup_secundus_company_resources.sh

3. İş Yükü Oluşturma

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

Artık iş yükü için gerekli rollere 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ı, 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 olacaktır:

  • confidentialcomputing.workloadUser onay jetonu almak için
  • logging.logWriter kullanarak Cloud Logging'e günlük yazabilirsiniz.
  • $SECUNDUS_INPUT_STORAGE_BUCKET Cloud Storage paketinden veri okumak için objectViewer.
  • objectUser, iş yükü sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET Cloud Storage paketine yazar.
./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 kod laboratuvarındaki iş yükü, Primus'un depolama paketinde depolanan makine öğrenimi modeline erişen ve bir depolama paketinde depolanan örnek resimlerle çıkarım yapan 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ü için yetkilendirmeyle ilgili bir 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 uygulandığı bir iş yükü oluşturmak için aşağıdaki komut dosyasını çalıştırın:

  • Primus'a ait bir Artifact Registry($PRIMUS_ARTIFACT_REGISTRY) oluşturun.
  • İş yükü kodunu gerekli kaynak adlarıyla güncelleyin.
  • ML 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 için kullanılan Dockerfile'i burada bulabilirsiniz.
  • Docker görüntüsünü oluşturun ve Primus'un sahip olduğu Artifact Registry'de ($PRIMUS_ARTIFACT_REGISTRY) yayınlayın.
  • $WORKLOAD_SERVICEACCOUNT kullanıcısına $PRIMUS_ARTIFACT_REGISTRY için okuma izni verin. Bu, iş yükü kapsayıcısı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ün yüklenmesini sağlamak için modelin karmasını veya imzasını kullanmadan önce kontrol edecek şekilde kodlanabilir. Bu tür ek kontrollerin avantajı, makine öğrenimi modelinin bütünlüğünü sağlamasıdır. Bu durumda, iş yükü operatörünün, iş yükünün makine öğrenimi modelinin farklı sürümlerini kullanması beklendiğinde 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 iş yüklerinin makine öğrenimi modeline 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 şimdi 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 $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ünü çalıştırma

Bu adımda, iş yükünü Gizli Alan sanal makinesinde çalıştıracağız. Zorunlu 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.

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, ML iş yükünün sonucu $SECUNDUS_RESULT_STORAGE_BUCKET'te yayınlanır.

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result

Örnek resimlerdeki çıkarım sonuçlarının nasıl görünebileceğine dair bazı örnekler aşağıda 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 alanındaki her örnek resim için sonuçlarda bir giriş görürsünüz. Bu girişte iki önemli bilgi yer alır:

  • predicted_class dizini: Bu, modelin resmin ait olduğunu tahmin ettiği sınıfı temsil eden sayısal bir dizindir.
  • Top_k_predictions: Bu parametre, resim için en olasıdan en az olasıya göre 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 dizini, kullanıcıların okuyabileceği bir sınıf adına dönüştürmek için buradaki etiket listesine bakın. Örneğin, 2 değerine sahip bir sınıf dizini görürseniz bu, etiketler listesindeki "tench" sınıf etiketine karşılık gelir.

Bu codelab'de, Primus'a ait ve yalnızca TEE'de çalışan iş yüküne yayınlanan bir modelin nasıl kullanılacağı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 kontrole sahiptir.

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

Secundus, Primus tarafından yetkilendirilmemiş kendi yapı deposundan farklı bir iş yükü resmi alarak 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 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.

Lütfen Secundus'un (us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG} olarak) artifact registry altında yeni bir docker resminin yayınlandığından ve iş yükü hizmet hesabının ($WORKLOAD_SERVICEACCOUNT), artifact registry okuyucuya bu yeni iş yükü resmini okuma izni verdiğinden emin olun. Bu, Primus'un WIP politikası tarafından iş yükü tarafından sunulan jeton reddedilmeden önce iş yükünün çı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ırma:

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ü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ı burada verilmiştir. Bu temizleme 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 iş yükü kimliği havuzu ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Secundus ($WORKLOAD_SERVICEACCOUNT) iş yükü hizmet hesabı.
  • Secundus'un depolama paketini girin ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • İş yükü bilgi işlem örnekleri.
  • Secundus'un sonuç depolama paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).
$ ./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.

Sırada ne var?

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