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

1. Genel Bakış

Bu codelab, Confidential Space codelab'i üzerine kurulmuştur. Workload Identity Pool (WIP) politikasında görüntü özetini belirtmek yerine, onaylanmış bir genel anahtar kullanarak kapsayıcıyı kimlik doğrulama seçeneği sunularak imzalı kapsayıcı görüntüsü desteği eklendi.

Gizli Alan'da imzalı container resmi desteğiyle ilgili değişiklikler:

Kullanılabilirlik iyileştirildi: İmzalı container görüntüsü özelliğinin kullanıma sunulmasıyla birlikte, bir görüntüyü yetkilendiren iş ortakları/denetçiler için iş yükü görüntüsü özet yaklaşımından container imzası yaklaşımına geçebiliriz.

  • Kaynak sahipleri, resim özetlerini doğrudan kullanırken her yeni resim yetkilendirmesinde politikalarını resim özetiyle güncellemelidir. Politika, resim imzalarını kullanarak, karşılık gelen özel anahtarı iş ortağına/denetçiye ait olan ve denetlenen resimleri imzalamak için kullanılan bir ortak anahtar parmak izi içerir.
  • Bazı güvenlik modellerinde, yeni görüntü özet değerlerinin listesini güncellemek yerine güvenilir bir görüntü imzalama anahtarına referans vermek daha uygundur.

Güvenlikte gerileme yok: Bu kapsayıcı imzası yaklaşımı, güven sınırları aynı kaldığı için önceki görüntü özetine göre güvenlikte herhangi bir gerilemeye neden olmaz. Kapsayıcı imzası yaklaşımında, kaynak sahibi WIP politikasında güvenilen ortak anahtar parmak izini belirterek bir doğrulama anahtarını yetkilendirir. Yetkilendirme kontrolü, 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. WIP politikası ise hizmet tarafından onaylanan ortak anahtarın politika tarafından yetkilendirildiğini kontrol eder.

Güçlü güvenlik: Container görüntüsü imzaları kullanmak, görüntü imzalayana belirli bir güven düzeyini temsil etme yetkisi vermeyi sağlar. Onay politikasında güvenilir bir imzalayanın ortak anahtar parmak izini belirterek kaynak sahibi, bu imzalayanı hangi kapsayıcı görüntülerin bir politikaya uygun olduğunu onaylamaya yetkilendirir. 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 yetkilendirildiğini kontrol eder. Bu sayede, resim imzalamanın sağladığı ek yönlendirme katmanı, Confidential Space'in güçlü güvenlik garantilerini korur.

Bu yaklaşımlar arasındaki tek fark, ikinci yaklaşımda iş yükü resimlerinin bir imzalama anahtarıyla yetkilendirildiği ek bir dolaylılık katmanı kullanılmasıdır. Güven sınırları aynı kaldığı için bu durum yeni güvenlik açıkları oluşturmaz.

Neler öğreneceksiniz?

Bu codelab'de, korumalı kaynaklara erişimi yetkilendirmek için kapsayıcı resmi 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 container görüntüsü imzalarını OCI kayıt defterlerine yükleme
  • Confidential Space'i çalıştırmak için gerekli bulut kaynaklarını yapılandırma
  • İş yükünü, imzalı container görüntüsü desteğiyle Gizli Alan'da çalıştırma

Bu codelab'de, Google Compute Engine'de çalışan güvenilir bir anahtarla imzalanmış bir container görüntüsünü uzaktan onaylamak için Confidential Space'i nasıl kullanacağınız gösterilmektedir.

Gerekenler

İmzalı Container Image ile Gizli Alan'da yer alan roller

Bu codelab'de Primus Bank, denetçi ve kaynak sahibi olarak aşağıdaki işlemlerden sorumlu olacaktır:

  1. Gerekli kaynakları örnek verilerle ayarlama
  2. İş yükü kodunu denetleme
  3. İş yükü resmini imzalamak için cosign kullanılıyor.
  4. İmzayı bir depoya yükleme
  5. Müşteri verilerini korumak için WIP politikasını yapılandırma.

Secundus Bank, iş yükünün yazarı ve operatörü olacak ve aşağıdakilerden sorumlu olacaktır:

  1. Sonucu depolamak için gerekli kaynakları ayarlama.
  2. İş yükü kodunu yazma
  3. İş yükü resmini yayınlama.
  4. İş yükünü, imzalı container görüntüsü desteğiyle Confidential Space'te çalıştırma.

Secundus Bank, bir bulut depolama paketinde depolanan ve Primus Bank'a ait olan müşteri verilerini sorgulayacak bir iş yükü geliştirecek ve yayınlayacak. Primus Bank, iş yükünü denetler, kapsayıcı görüntüsünü imzalar ve onaylı iş yüklerinin verilerine erişmesine izin vermek için WIP politikalarını yapılandırır. Bu iş yükü yürütme işleminin sonucu, Secundus bankasına ait bir Cloud Storage paketinde depolanır.

Gizli alan kurulumuna dahil olan kaynaklar

Bu codelab'de, GCP projeniz için uygun değerlere ayarlamanız gereken bir dizi değişkenden bahsedilmektedir. Bu kod laboratuvarındaki 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 ayarlanmamışsa 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ın depolandığı paket.
  • $PRIMUS_WORKLOAD_IDENTITY_POOL: talepleri doğrulayan Workload Identity Pool (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 tarafından korunan kaynaklara erişmek için kullanılan hizmet hesabı. Bu adımda, $PRIMUS_INPUT_STORAGE_BUCKET paketinde depolanan müşteri verilerini görüntüleme izni vardır.
  • $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ü resmi imzalarını depolamak için Artifact Registry.
  • $PRIMUS_SIGNING_KEY: İş yükü resmini denetçi/veri işbirlikçileri (ör.bu örnekte primus bank) tarafından 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ğı Artifact Registry.
  • $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şme 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çerir. Bu verileri $PRIMUS_INPUT_STORAGE_BUCKET'ya yükleyip bu verileri sorgulayacak bir iş yükü oluşturacağız.

Mevcut iş akışı

İş 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ü, WIP'den $PRIMUS_SERVICEACCOUNT için genel bir Google erişim jetonu ister. İş yükü ve ortam talepleri içeren bir onaylayıcı hizmet jetonu sunar.
  2. Onay doğrulayıcı hizmet 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 paketindeki müşteri verilerine erişir.
  4. İş yükü, bu veriler üzerinde bir işlem gerçekleştirir.
  5. İş yükü, bu işlemin sonuçlarını $SECUNDUS_RESULT_STORAGE_BUCKET paketine yazmak için $WORKLOAD_SERVICEACCOUNT hizmet hesabını kullanır.

İmzalı kapsayıcı desteği içeren yeni iş akışı

İmzalı kapsayıcı desteği, aşağıda vurgulandığı gibi mevcut iş akışına entegre edilecektir. İş yükünü, imzalı container görüntüsü desteğiyle Confidential Space'te çalıştırdığınızda, yapılandırılmış kaynaklar kullanılarak aşağıdaki işlem gerçekleşir:

  1. Confidential Space, şu anda çalışan iş yükü görüntüsüyle ilgili tüm kapsayıcı imzalarını keşfeder ve bunları onay doğrulayıcısına gönderir. Onay doğrulayıcı, imzayı doğrular ve geçerli imzaları onay taleplerine ekler.
  2. İş yükü, WIP'den $PRIMUS_SERVICEACCOUNT için genel bir Google erişim jetonu ister. İş yükü ve ortam talepleri içeren bir Attestation Verifier hizmet jetonu sunar.
  3. Onaylama Doğrulayıcı hizmet jetonundaki kapsayıcı imzası talepleri, WIP'deki özellik koşuluyla eşleşirse $PRIMUS_SERVICEACCOUNT için erişim jetonunu döndürür.
  4. İş yükü, $PRIMUS_SERVICEACCOUNT ile ilişkili hizmet hesabı erişim jetonunu kullanarak $PRIMUS_INPUT_STORAGE_BUCKET paketindeki müşteri verilerine erişir.
  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 kullanır.

2. Bulut Kaynaklarını Ayarlama

Confidential Space kurulumunun bir parçası olarak, öncelikle Primus ve Secundus bankasının GCP projeleri altında gerekli bulut kaynaklarını oluşturursunuz. 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ı depolamak için kullanılan Artifact Registry deposu.

Secundus projesinde yeni kaynak yok. Bu kaynaklar ayarlandıktan sonra, iş yükü için gerekli roller ve izinlere sahip bir hizmet hesabı oluşturursunuz. Ardından bir iş yükü resmi oluşturursunuz ve denetçi olan Primus bankası, iş yükü resmini imzalar. İş yükü daha sonra veri işbirlikçileri (bu codelab'de Primus bankası) tarafından yetkilendirilir ve iş yükü operatörü (bu örnekte Secundus Bankası) iş yükünü çalıştırır.

Confidential Space kurulumu kapsamında, Primus ve Secundus GCP projelerinde gerekli bulut kaynaklarını oluşturursunuz.

Başlamadan önce

  • Bu codelab'de 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
  • Bu codelab'in dizinini değiştirin.
cd confidential-space/codelabs/signed_container_codelab/scripts
  • 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ının değişkenlerini ayarlayın. Bu değişkenleri kullanarak kaynak adlarını geçersiz kılabilirsiniz (ör. export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket').
  • 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
  • Buradaki talimatları uygulayarak cosign'ı yükleyin.

Primus bank kaynaklarını ayarlama

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

  • Primus Bank'ın şifrelenmiş müşteri verileri dosyasını depolamak için Cloud Storage paketi ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus bankasının veri 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) aşağıdaki IAM erişimiyle eklenmiş hizmet hesabı ($PRIMUS_SERVICEACCOUNT):
  • roles/cloudkms.cryptoKeyDecrypter KMS anahtarını kullanarak verilerin şifresini çözmek için.
  • objectViewer bulut depolama paketinden veri okumak için.
  • Bu hizmet hesabını Workload Identity Pool'a bağlamak için roles/iam.workloadIdentityUser.
./setup_primus_bank_resources.sh

Secundus bankası kaynaklarını ayarlama

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

  • Secundus bankası 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 ve İmzalama

İş 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 bankası projesinde 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ı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 $PRIMUS_INPUT_STORAGE_BUCKET.
  • objectAdmin iş yükü sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET Cloud Storage paketine yazmak için.
./create_workload_serviceaccount.sh

İş yükü oluşturma

Bu adımda bir iş yükü Docker görüntüsü oluşturacaksınız. Bu Codelab'de kullanılan iş yükü, bağımsız değişkende sağlanan coğrafi konumdaki müşterileri (Primus Bank müşteri verilerinden) sayan basit bir CLI tabanlı 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'de kullanılan iş yükü kodunu burada bulabilirsiniz.
  • Go ikili dosyası 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ü Secundus bankasına ait Artifact Registry'de ($SECUNDUS_ARTIFACT_REGISTRY) oluşturup yayınlayın.
  • $WORKLOAD_SERVICEACCOUNT için $SECUNDUS_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

İş Yükünü İmzalama

İş yükü resmini imzalamak için Cosign'ı kullanacağız. Cosign, imzaları varsayılan olarak imzalanan resimle aynı depoda saklar. İmzalar için farklı bir depo belirtmek üzere COSIGN_REPOSITORY ortam değişkenini ayarlayabilirsiniz.

Burada örnek olarak Artifact Registry'yi kullanacağız. Tercihinize bağlı olarak Docker Hub, AWS CodeArtifact gibi diğer OCI tabanlı 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=${PRIMUS_PROJECT_REPOSITORY_REGION}
  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=${PRIMUS_PROJECT_LOCATION}
gcloud kms keys create $PRIMUS_SIGNING_KEY \
  --keyring=$PRIMUS_SIGNING_KEYRING \
  --purpose=asymmetric-signing \
  --default-algorithm=ec-sign-p256-sha256 \
  --location=${PRIMUS_PROJECT_LOCATION}
  1. Artifact Registry için $LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAME gibi tam bir resim adı beklenir. İmza depolama için depoya herhangi bir kapsayıcı resmi yükleyebilirsiniz.
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
  1. $PRIMUS_COSIGN_REPOSITORY deposunda Görüntüleyici rolünü $WORKLOAD_SERVICEACCOUNT hizmet hesabına verin. Bu sayede Confidential Space, $PRIMUS_COSIGN_REPOSITORY'ya yüklenen tüm kapsayıcı 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 içeren güçlü bir araçtır. Kullanım alanımız için yalnızca Cosign'ın bir anahtar çiftiyle imzalaması gerekir. Cosign anahtarsız imzalama, bu imzalı kapsayıcı görüntüsü özelliği için desteklenmez.

Anahtar çiftiyle imzalarken iki seçenek vardır:

  1. Cosign tarafından oluşturulan yerel bir anahtar çiftiyle imzalama.
  2. Başka bir yerde (ör. KMS) depolanan bir anahtar çiftiyle imzalama
  1. Henüz yoksa Cosign'da bir anahtar çifti oluşturun. Daha fazla bilgi için Kendi kendine yönetilen anahtarlarla imzalama başlıklı makaleyi inceleyin. Burada, anahtar çifti oluşturma ve iş yükünü imzalama yöntemlerinin ikisi de (yerel olarak ve KMS sağlayıcısı kullanılarak) belirtilmiştir. Lütfen iş yükü kapsayıcısını imzalamak için bu yöntemlerden birini kullanı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ıdaki <provider>://<key> kısmını gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION ile değiştirin.

  • <provider> : Kullandığınız KMS çözümünü ifade eder.
  • <key> : 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. Cosign kullanarak iş yükünü imzalayın. Ortak anahtarda doldurulmamış Base64 kodlaması gerçekleştirin.
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 eklenen imza algoritmalarıyla 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 anahtardan bahsederken lütfen Sigstore KMS desteği bölümündeki URI biçimini kullanın. Cosign tarafından oluşturulan bir anahtardan bahsederken bunun yerine cosign.key kullanın.
  • $IMAGE_REFERENCE [ZORUNLU] Hangi container görüntüsünün imzalanacağını belirtir. IMAGE_REFERENCE biçimi, etiket veya resim özetine göre belirlenebilir. Ö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 eklenen ek açıklamaları belirtir. Confidential Space'te imzalanmış kapsayıcı resimler için ortak anahtar ve imza algoritmalarının imza yüküne eklenmesi gerekir.
  • dev.cosignproject.cosign/sigalg ONLY için üç değer kabul edilir:
  • RSASSA_PSS_SHA256: SHA256 özetiyle PSS dolgulu RSASSA algoritması.
  • RSASSA_PKCS1V15_SHA256: SHA256 özetiyle PKCS#1 v1.5 dolgulu RSASSA algoritması.
  • ECDSA_P256_SHA256: SHA256 özetiyle P-256 Eğrisindeki ECDSA. Bu, Cosign tarafından oluşturulan anahtar çiftleri için de varsayılan imza algoritmasıdır.
  1. Docker deposuna imzaları yükleme

Cosign Sign, imzaları belirtilen COSIGN_REPOSITORY. otomatik olarak yükler.

4. İş yükünü yetkilendirme ve çalıştırma

İş Yükünü Yetkilendirme

Bu adımda, Workload Identity Pool'da ($PRIMUS_WORKLOAD_IDENTITY_POOL) Workload Identity kimlik sağlayıcısını ayarlayacağız. Workload Identity için aşağıda gösterildiği gibi özellik koşulları yapılandırılmıştır. Koşullardan biri, iş yükü resmi imzasının parmak izini, imzalama ortak anahtarının parmak iziyle karşılaştırarak doğrulamaktır. Bu özellik koşulu sayesinde, Secundus Bank yeni bir iş yükü resmi yayınladığında Primus Bank, iş yükü kodunu denetler ve WIP politikasını resim özetini içerecek şekilde güncellemeye gerek kalmadan yeni iş yükü resmini 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ü Çalıştırma

Bu adım kapsamında, iş yükünü Gizli Sanal Makine'de çalıştıracağız. 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ü, sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET adresinde yayınlayacak şekilde kodlanmıştır.

gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --project=${SECUNDUS_PROJECT_ID} \
 --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

Sonuç 3 olmalıdır. Çünkü primus_customer_list.csv dosyasında Seattle'dan 3 kişi listelenmiştir.

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 bankasının giriş depolama paketini girin ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus bankası hizmet hesabı ($PRIMUS_SERVICEACCOUNT).
  • Resim imzalarını ($PRIMUS_COSIGN_REPOSITORY) içeren Primus Bank Artifact Registry.
  • Primus Bank iş yükü kimliği havuzu ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Secundus Bank'ın iş yükü hizmet hesabı ($WORKLOAD_SERVICEACCOUNT).
  • İş yükü Compute Engine örneği.
  • Secundus Bank'ın sonuç depolama paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).
  • Secundus Bank'ın yapay ürün kayıt defteri ($SECUNDUS_ARTIFACT_REGISTRY).
  • Secundus Bank'ın iş yükü sanal makinesi ($WORKLOAD_VM).
./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ın kullanılabilirliğini artırmak için imzalı kapsayıcı resmi özelliğinden nasıl yararlanacağınızı öğrendiniz.

Yapabilecekleriniz

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

Daha fazla bilgi