İmzalanmış kapsayıcı görüntüsü codelab'i

1. Genel Bakış

Bu codelab'de, Gizli Alan codelab'i temel alınmıştır. İmzalanmış kapsayıcı görüntüsü desteği, Workload Identity Havuzu (WIP) politikasında görüntü özetini belirtmek yerine onaylanmış bir ortak anahtar kullanarak kapsayıcının kimliğini doğrulama seçeneği sunar.

Gizli Alan'da imzalı kapsayıcı görüntüsü desteğiyle ilgili değişiklikler:

İyileştirilmiş kullanılabilirlik: İmzalanmış kapsayıcı görüntüsü özelliğinin kullanıma sunulmasıyla birlikte artık bir görüntüyü yetkilendiren ortak çalışanlar/denetleyiciler için iş yükü görüntüsü özeti yaklaşımından container imzası yaklaşımına geçebiliyoruz.

  • Doğrudan görüntü özetlerini kullanırken kaynak sahipleri, yeni bir görüntüyü yetkilendirdiklerinde politikalarını bir görüntü özetiyle güncellemelidir. Politika, resim imzaları kullanarak ortak anahtar parmak izi içerir. Bu ortak anahtarın özel anahtarı, ortak çalışana/denetleyiciye aittir ve denetlenen görüntüleri imzalamak için kullanılır.
  • Bazı güvenlik modellerinde, güvenilir bir görüntü imzalama anahtarına referans vermek, yeni görüntü özeti değerleri listesini güncellemekten daha kolaydır.

Güvenlik regresyonu yok: Güven sınırları aynı kaldığı için, bu container imzası yaklaşımı, önceki görüntü özeti yaklaşımına herhangi bir güvenlik regresyonu getirmez. Kapsayıcı imzası yaklaşımında, kaynak sahibi WIP politikasında güvenilir ortak anahtar parmak izini belirterek bir doğrulama anahtarını yetkilendirir; yetkilendirme kontrolü ise Onay Doğrulayıcı Hizmeti ve WIP tarafından gerçekleştirilir; Onay Doğrulayıcı Hizmeti imzanın çalışan iş yüküyle ilişkili olduğunu doğrular ve WIP politikası, hizmet tarafından iddia edilen ortak anahtarın politika tarafından yetkilendirilip yetkilendirilmediğini kontrol eder.

Güçlü güvenlik: Kapsayıcı görüntüsü imzaları kullanmak, görüntü imzalayana güven yetkisi verilmesine olanak tanır. Kaynak sahibi, onay politikasında imzalayan güvenilir bir kişinin ortak anahtar parmak izini belirterek bu imzalayana, hangi container görüntülerinin bir politikaya uygun olduğu konusunda onay vermesi için yetki verir. Onay Doğrulayıcı Hizmeti, imzanın çalışan iş yüküyle ilişkili olduğunu doğrular ve politika, imzayı oluşturan ortak anahtarın politika tarafından yetkilendirilip yetkilendirilmediğini kontrol eder. Bu sayede, resim imzalamanın sağladığı dolaylı bilgi katmanı, Gizli Alanın güçlü güvenlik garantilerini korur.

Bu yaklaşımlar arasındaki tek fark, ikinci yaklaşımın iş yükü resimlerinin bir imzalama anahtarıyla yetkilendirildiği ekstra bir dolaylı katman kullanmasıdır. Güven sınırları aynı kaldığından, bu durum yeni bir güvenlik açığı oluşturmaz.

Neler öğreneceksiniz?

Bu codelab'de, korunan kaynaklara erişimi yetkilendirmek için container görüntüsü imzasını nasıl kullanacağınızı öğreneceksiniz.

  • Cosign kullanarak denetlenmiş bir container görüntüsünü imzalama
  • İmza keşfi ve depolama için OCI kayıtlarına container görüntüsü imzaları yükleme
  • Gizli Alanı çalıştırmak için gerekli bulut kaynaklarını yapılandırma
  • İmzalı container görüntüsü desteğiyle gizli alanda iş yükünü çalıştırma

Bu codelab'de, Google Compute Engine'de çalışan güvenilir bir anahtar tarafından imzalanmış bir container görüntüsünü uzaktan onaylamak için Gizli Alanın nasıl kullanılacağı gösterilmektedir.

Gerekenler

İmzalanmış Kapsayıcı Görüntüsü ile Gizli Alanda yer alan roller

Bu codelab'de Primus Bank denetleyici ve kaynak sahibi olacak ve şunlardan sorumlu olacaktır:

  1. Gerekli kaynakları örnek verilerle ayarlama.
  2. İş yükü kodunu denetleme
  3. İş yükü görüntüsünü imzalamak için cosign kullanılıyor.
  4. İmza, depoya yükleniyor.
  5. Müşteri verilerini korumak için WIP politikası yapılandırılıyor.

Secundus Bank iş yükü yazarı ve operatörü olacak ve şunlardan sorumlu olacak:

  1. Sonucu depolamak için gerekli kaynakları ayarlama.
  2. İş yükü kodunu yazma.
  3. İş yükü görüntüsü yayınlanıyor.
  4. İş yükünü imzalı container görüntüsü desteğiyle Gizli Alan'da çalıştırma.

Secundus Bank, bir bulut depolama paketinde depolanan ve Primus Bank'a ait müşteri verilerini sorgulayacak bir iş yükü geliştirip yayınlayacaktır. Primus Bank iş yükünü denetleyecek, container görüntüsünü imzalayacak ve WIP politikalarını onaylanmış iş yükleri tarafından verilerine erişilmesini sağlayacak şekilde yapılandıracak. Bu iş yükü yürütmenin sonucu, Secundus bank'a ait bir bulut depolama paketinde depolanır.

Gizli alan kurulumunda yer alan kaynaklar

Bu codelab'de, GCP projenize uygun değerlere ayarlamanız gereken bir dizi değişkenden bahsedilmektedir. Bu codelab'deki komutlarda, bu değişkenlerin ayarlandığı varsayılır. (örneğin, export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket', Primus bankasının giriş depolama paketinin adını ayarlamak için kullanılabilir.) Kaynak adlarının değişkenleri ayarlanmadıysa GCP proje kimliğine göre oluşturulur.

Primus projesinde aşağıdakileri yapılandırın:

  • $PRIMUS_INPUT_STORAGE_BUCKET: Müşteri verileri dosyasını depolayan paket.
  • $PRIMUS_WORKLOAD_IDENTITY_POOL: Hak taleplerini doğrulayan Workload Identity Havuzu (WIP).
  • $PRIMUS_WIP_PROVIDER: 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_SERVICEACCOUNT: $PRIMUS_WORKLOAD_IDENTITY_POOL uygulamasının korunan kaynaklara erişmek için kullandığı hizmet hesabı. Bu adımda, $PRIMUS_INPUT_STORAGE_BUCKET paketinde depolanan müşteri verilerini görüntüleme iznine sahiptir.
  • $PRIMUS_ENC_KEY: $PRIMUS_INPUT_STORAGE_BUCKET içinde depolanan verileri şifrelemek için kullanılan KMS anahtarı.

Bu codelab'de yeni olan kaynaklar:

  • $PRIMUS_COSIGN_REPOSITORY: İş yükü görüntüsü imzalarını depolamak için kullanılacak Artifact Registry.
  • $PRIMUS_SIGNING_KEY: Denetçi/veriyle birlikte çalışan kişiler (ör.birincil banka) tarafından iş yükü görüntüsünü imzalamak için kullanılan KMS anahtarı.

Secundus projesinde aşağıdakileri yapılandırın:

  • $SECUNDUS_ARTIFACT_REGISTRY: İş yükü Docker görüntüsünün aktarılacağı yapı kaydı.
  • $WORKLOAD_IMAGE_NAME: İş yükü Docker görüntüsünün adı.
  • $WORKLOAD_IMAGE_TAG: İş yükü Docker görüntüsünün etiketi.
  • $WORKLOAD_SERVICEACCOUNT: İş yükünü çalıştıran Gizli Sanal Makine'ye erişim izni olan hizmet hesabı.
  • $SECUNDUS_RESULT_BUCKET: İş yükünün sonuçlarını depolayan paket.

Diğer Kaynaklar:

  • primus_customer_list.csv, müşteri verilerini içeriyor. Bu verileri $PRIMUS_INPUT_STORAGE_BUCKET hizmetine yükleyecek ve bu verileri sorgulayacak bir iş yükü oluşturacağız.

Mevcut iş akışı

İş 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:

  1. İş yükü, WIP'den $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.
  2. Onay Doğrulayıcı hizmet jetonundaki iş yükü ölçümü, WIP'deki özellik durumuyla eşleşiyorsa $PRIMUS_SERVICEACCOUNT. için erişim jetonunu döndürür.
  3. İş yükü, $PRIMUS_INPUT_STORAGE_BUCKET paketindeki müşteri verilerine erişmek için $PRIMUS_SERVICEACCOUNT ile ilişkili hizmet hesabı erişim jetonunu kullanır.
  4. İş yükü bu veriler üzerinde bir işlem gerçekleştirir.
  5. İş yükü, $WORKLOAD_SERVICEACCOUNT hizmet hesabını kullanarak bu işlemin sonuçlarını $SECUNDUS_RESULT_STORAGE_BUCKET paketine yazar.

İmzalanmış container desteğiyle yeni iş akışı

İmzalanmış kapsayıcı desteği, aşağıda vurgulanan mevcut iş akışına entegre edilir. İş yükünü imzalı container görüntüsü desteğiyle Gizli Alan'da çalıştırdığınızda, yapılandırılmış kaynaklar kullanılarak aşağıdaki işlem gerçekleştirilir:

  1. Gizli Alan, çalışan mevcut iş yükü görüntüsüyle ilgili tüm container imzalarını bulur ve bunları onay doğrulayıcıya gönderir. Onay doğrulayıcı imzayı doğrular ve onay taleplerindeki geçerli imzaları ekler.
  2. İş yükü, WIP'den $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.
  3. Onay Doğrulayıcı hizmet jetonunda, kapsayıcı imzası WIP'deki özellik durumuyla eşleşirse kapsayıcı imzası $PRIMUS_SERVICEACCOUNT için erişim jetonunu döndürür.
  4. İş yükü, $PRIMUS_INPUT_STORAGE_BUCKET paketindeki müşteri verilerine erişmek için $PRIMUS_SERVICEACCOUNT ile ilişkili hizmet hesabı erişim jetonunu kullanır.
  5. İş yükü bu veriler üzerinde bir işlem gerçekleştirir.
  6. İş yükü, bu işlemin sonuçlarını $SECUNDUS_RESULT_STORAGE_BUCKET paketine yazmak için $WORKLOAD_SERVICEACCOUNT öğesini kullanır.

2. Cloud Kaynaklarını Kurma

Gizli Alan kurulumunun bir parçası olarak, önce Primus ve Secundus bankasının GCP projeleri altında gerekli bulut kaynaklarını oluşturacaksınız. Bu codelab'de yeni olan kaynaklar şunlardır:

Primus projesinde:

  • Kodu denetledikten sonra Secundus iş yüklerini imzalamak için kullanılan KMS imzalama anahtarı.
  • Cosign imzalarını depolayacak yapı kayıt defteri deposu.

Secundus projesinde yeni kaynak yok. Bu kaynaklar ayarlandıktan sonra gerekli rol ve izinlere sahip iş yükü için bir hizmet hesabı oluşturacaksınız. Ardından bir iş yükü görüntüsü oluşturacaksınız. Denetçi Primus Bank, iş yükü görüntüsünü imzalar. Ardından iş yükü, veri iş ortakları (bu codelab'deki Prius bankası) tarafından yetkilendirilir ve iş yükü operatörü (bu durumda Secundus Bank) iş yükünü çalıştırır.

Gizli Alan kurulumunun bir parçası olarak, Primus ve Secundus GCP projelerinde gerekli bulut kaynaklarını oluşturacaksınız.

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
  • Gerekli projeleri aşağıda gösterildiği gibi ayarladığınızdan emin olun.
$ export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
$ export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
  • Bu komutu kullanarak yukarıda belirtilen kaynak adları için değişkenleri ayarlayın. Kaynak adlarını, bu değişkenleri (ör. export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') kullanarak geçersiz kılabilirsiniz.
  • 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
  • Buradaki talimatları uygulayarak cosign'ı yükleyin.

Primus banka kaynaklarını ayarlayın

Bu adımın bir parçası olarak Primus Bank için gerekli bulut kaynaklarını ayarlayacaksınız. Primus bank kaynaklarını ayarlamak için aşağıdaki komut dosyasını çalıştırın. Bu adımların bir parçası olarak aşağıda bahsedilen kaynaklar oluşturulacaktır:

  • Primus bankasının şifrelenmiş müşteri verileri dosyasını depolamak için kullanılan Cloud Storage paketi ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus bankasının veri dosyasını şifrelemek için KMS'deki ş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 hak taleplerini doğrulamak için Workload Identity havuzu ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Aşağıdaki IAM erişimine sahip yukarıda belirtilen iş yükü kimliği havuzuna ($PRIMUS_WORKLOAD_IDENTITY_POOL) ekli hizmet hesabı ($PRIMUS_SERVICEACCOUNT):
  • KMS anahtarını kullanarak verilerin şifresini çözmek için roles/cloudkms.cryptoKeyDecrypter.
  • Cloud Storage paketindeki verileri okumak için objectViewer.
  • Bu hizmet hesabını Workload Identity havuzuna bağlamak için roles/iam.workloadIdentityUser.
$ ./setup_primus_bank_resources.sh

Secundus bank kaynaklarını ayarlayın

Bu adımın bir parçası olarak, Secundus Bank için gerekli bulut kaynaklarını kuracaksınız. Secundus bank 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 bank tarafından yürütülen iş yükü yürütme sonucunu depolamak için Cloud Storage paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).
$ ./setup_secundus_bank_resources.sh

3. İş Yükü Oluşturma ve İmzalama

İş 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 bank projesinde bir iş yükü hizmet hesabı oluşturmak için aşağıdaki komut dosyasını çalıştırın. Bu hizmet hesabı, 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.
  • $PRIMUS_INPUT_STORAGE_BUCKET bulut depolama paketindeki verileri okumak için objectViewer.
  • İş yükü sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET bulut depolama alanı paketine yazmak için objectAdmin.
$ ./create_workload_serviceaccount.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. Bu Codelab'de kullanılan iş yükü, sağlanan bir coğrafi konumdaki müşterileri (Primis bankasının müşteri verilerinden) bağımsız değişkende sayan, CLI tabanlı basit bir Go uygulamasıdır. 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:

  • Secundus bankasına ait Artifact Registry($SECUNDUS_ARTIFACT_REGISTRY) oluşturun.
  • İş yükü kodunu gerekli kaynak adlarıyla güncelleyin. Bu codelab için kullanılan iş yükü kodunu burada bulabilirsiniz.
  • Go ikili programını derleyin 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'ı burada bulabilirsiniz.
  • Docker görüntüsünü derleyip Secundus Bank'a ait Artifact Registry'de ($SECUNDUS_ARTIFACT_REGISTRY) yayınlayın.
  • $WORKLOAD_SERVICEACCOUNT uygulamasına $SECUNDUS_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

İş Yükü imzala

İş yükü görüntüsünü imzalamak için Cosign'ı kullanacağız. Cosign, imzaları varsayılan olarak imzaladığı resimle aynı depoda depolar. İmzalar için farklı bir depo belirtmek isterseniz COSIGN_REPOSITORY ortam değişkenini ayarlayabilirsiniz.

Burada örnek olarak Artifact Registry'yi kullanacağız. Ayrıca tercihinize göre Docker Hub veya AWS CodeArtifact gibi OCI tabanlı diğer kayıt defterlerini de seçebilirsiniz.

  1. Artifact Registry Docker deposu oluşturun.
$ gcloud config set project $PRIMUS_PROJECT_ID

$ gcloud artifacts repositories create $PRIMUS_COSIGN_REPOSITORY \
  --repository-format=docker --location=us
  1. İş yükü görüntüsünü imzalamak için KMS altında bir anahtarlık ve anahtar oluşturun.
$ gcloud config set project $PRIMUS_PROJECT_ID

$ gcloud kms keyrings create $PRIMUS_SIGNING_KEYRING \
  --location=global

$ gcloud kms keys create $PRIMUS_SIGNING_KEY \
  --keyring=$PRIMUS_SIGNING_KEYRING \
  --purpose=asymmetric-signing \
  --default-algorithm=ec-sign-p256-sha256
  --location=us
  1. Artifact Registry için $LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAME gibi tam görüntü adı gerekir. İmza depolama için herhangi bir container görüntüsünü depoya yükleyebilirsiniz.
$ export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
  1. $WORKLOAD_SERVICEACCOUNT hizmet hesabına $PRIMUS_COSIGN_REPOSITORY deposunda Görüntüleyici rolünü verin. Bu sayede Gizli Alan, $PRIMUS_COSIGN_REPOSITORY hedefine yüklenen container görüntüsü imzalarını keşfedebilir.
$ gcloud artifacts repositories add-iam-policy-binding ${PRIMUS_COSIGN_REPOSITORY} \
--project=${PRIMUS_PROJECT_ID} --role='roles/viewer' --location=us \
--member="serviceAccount:${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com"

Cosign, birden fazla imzalama özelliği sunan güçlü bir araçtır. Kullanım alanımızda yalnızca Cosign'ın bir anahtar çiftiyle imzalaması yeterlidir. Bu imzalı kapsayıcı görüntüsü özelliği için ortak imza anahtarsız imzalama desteklenmiyor.

Anahtar çiftiyle oturum açarken iki seçenek vardır:

  1. Cosign tarafından oluşturulan bir yerel anahtar çiftiyle imzalayın.
  2. Başka bir yerde (örneğin, KMS'de) depolanan bir anahtar çiftiyle imzalayın.
  1. Henüz yoksa Cosign'da bir anahtar çifti oluşturun. Daha fazla bilgi için kendi kendine yönetilen anahtarlarla imzalama konusuna bakın.
// Set Application Default Credentials.
$ gcloud auth application-default login 

// Generate keys using a KMS provider.
$ cosign generate-key-pair --kms <provider>://<key>

// Generate keys using Cosign.
$ cosign generate-key-pair

Yukarıdakinde <provider>://<key> öğesini değiştirin gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION ile birlikte

  • &lt;provider&gt; : Kullandığınız KMS çözümünü ifade eder
  • &lt;key&gt; : KMS'deki anahtar yolunu ifade eder
  1. Doğrulama için ortak anahtarı alın.
// For KMS providers.
$ cosign public-key --key <some provider>://<some key> > pub.pem

// For local key pair signing.
$ cosign public-key --key cosign.key > pub.pem
  1. İş yükünü Cosign'ı kullanarak imzalayın. Ortak anahtarda unpadded base64 kodlaması uygulayın
$ PUB=$(cat pub.pem | openssl base64)

// Remove spaces and trailing "=" signs.
$ PUB=$(echo $PUB | tr -d '[:space:]' | sed 's/[=]*$//')
  1. Dışa aktarılan ortak anahtar ve imza algoritmaları ekli olarak Cosign'ı kullanarak iş yükünü imzalayın.
$ IMAGE_REFERENCE=us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/$SECUNDUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG

// Sign with KMS support.
$ cosign sign --key <some provider>://<some key> $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB

// Sign with a local key pair.
$ cosign sign --key cosign.key $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
  • --key [ZORUNLU], hangi imzalama anahtarının kullanılacağını belirtir. Bir KMS sağlayıcısı tarafından yönetilen bir anahtardan bahsederken lütfen Sigstore KMS desteğindeki URI biçimini kullanın. Cosign tarafından oluşturulan bir anahtardan bahsederken bunun yerine cosign.key özelliğini kullanın.
  • $IMAGE_REFERENCE [ZORUNLU], hangi kapsayıcı görüntüsünün imzalanacağını belirtir. IMAGE_REFERENCE biçimi, etiket veya resim özeti ile tanımlanabilir. Örneğin: us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container:latest or us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container[IMAGE-digest]
  • -a [ZORUNLU], imza yüküne ekli ek açıklamaları belirtir. Gizli Alan imzalı kapsayıcı görüntüleri için ortak anahtar ve imza algoritmalarının imza yüküne eklenmesi gerekir.
  • dev.cosignproject.cosign/sigalg YALNIZCA üç değeri kabul eder:
  • RSASSA_PSS_SHA256: SHA256 özeti ile PSS dolgusu içeren RSASSA algoritması.
  • RSASSA_PKCS1V15_SHA256: SHA256 özeti ile PKCS#1 v1.5 dolgusu içeren RSASSA algoritması.
  • ECDSA_P256_SHA256: SHA256 özetine sahip P-256 Eğrisi üzerinde ECDSA. Bu aynı zamanda Cosign tarafından oluşturulan anahtar çiftleri için varsayılan imza algoritmasıdır.
  1. Docker deposuna imza yükleme

Ortak imza işareti, imzaları belirtilen COSIGN_REPOSITORY öğesine otomatik olarak yükler.

4. İş Yükünü Yetkilendirme ve Çalıştırma

İş Yükünü yetkilendirme

Bu adım kapsamında, Workload Identity havuzunun ($PRIMUS_WORKLOAD_IDENTITY_POOL) altında iş yükü kimliği sağlayıcıyı kuracağız. Aşağıda gösterildiği gibi iş yükü kimliği için yapılandırılmış özellik koşulları vardır. Koşullardan biri, iş yükü görüntüsü imzasının parmak izini ortak anahtarın parmak izinin imzalanmasına karşı doğrulamaktır. Bu özellik koşulunda, Secundus Bank yeni bir iş yükü görüntüsü yayınladığında Primus Bank iş yükü kodunu denetler ve WIP politikasını görüntü özetiyle güncellemenize gerek kalmadan yeni iş yükü görüntüsünü imzalar.

$ gcloud config set project $PRIMUS_PROJECT_ID

$ PUBLIC_KEY_FINGERPRINT=$(openssl pkey -pubin -in pub.pem -outform DER | openssl sha256 | cut -d' ' -f2)

$ 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
     && '${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com' in
     assertion.google_service_accounts
     && ['ECDSA_P256_SHA256:${PUBLIC_KEY_FINGERPRINT}']
       .exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig,sig.signature_algorithm+':'+sig.key_id))"

İş Yükünü Çalıştır

Bu adım kapsamında, iş yükünü Gizli Sanal Makinede ç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ü, sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET üzerinde yayınlayacak şekilde kodlanmıştır.

$ gcloud config set project $SECUNDUS_PROJECT_ID

$ gcloud compute instances create signed-container-vm \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --scopes=cloud-platform --zone=us-west1-b \
 --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}/${SECUNDUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]"~tee-signed-image-repos=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo"

Sonuçları görüntüle

Secundus projesinde iş yükünün sonuçlarını görüntüleyin.

$ gcloud config set project $SECUNDUS_PROJECT_ID

$ gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

primus_customer_list.csv dosyasında Seattle'dan kaç kişi listelendiğinden sonuç 3 olmalıdır.

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 bankasının ($PRIMUS_INPUT_STORAGE_BUCKET) depolama paketi girin.
  • Primus banka hizmet hesabı ($PRIMUS_SERVICEACCOUNT).
  • Görüntü imzalarını içeren Primus Bank yapı kayıt otoritesi ($PRIMUS_COSIGN_REPOSITORY).
  • Primus Bank iş yükü kimliği havuzu ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Secundus Bank ($WORKLOAD_SERVICEACCOUNT) iş yükü hizmet hesabı.
  • İş Yükü Compute Örneği.
  • Secundus Bank'ın ($SECUNDUS_RESULT_STORAGE_BUCKET) sonuç depolama paketi.
  • Secundus Bank'ın yapı tescili ($SECUNDUS_ARTIFACT_REGISTRY).
// run the clean up script to delete the resources created as part of this codelab.
$ ./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

Tebrikler

Tebrikler, codelab'i başarıyla tamamladınız.

Gizli Alanın kullanılabilirliğini artırmak için imzalı kapsayıcı görüntüsü özelliğinden nasıl yararlanacağınızı öğrendiniz.

Sırada ne var?

Aşağıdaki benzer codelab'lerden birkaçına göz atın...

Daha fazla bilgi