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

1. Genel Bakış

Bu codelab, Gizli Alan codelab'i temel alır. İmzalı kapsayıcı resmi desteği, Workload Identity Havuzu (WIP) politikasında resim özetini belirtmek yerine, onaylanmış bir herkese açık anahtar kullanarak kapsayıcının kimliğini doğrulama seçeneği sunar.

Gizli Alan'da imzalanan kapsayıcı resmi desteğiyle ilgili değişiklikler:

Daha iyi kullanılabilirlik: İmzalı kapsayıcı resmi özelliğinin kullanıma sunulmasıyla birlikte, bir resme yetki veren ortak çalışanlar/denetçiler için iş yükü resmi özeti yaklaşımından kapsayıcı imzası yaklaşımına geçebiliriz.

  • Resim özetleri doğrudan kullanıldığında, kaynak sahipleri yeni bir resme yetki verdiğinde politikalarını bir resim özetiyle güncellemelidir. Politika, görüntü imzaları kullanarak bir ortak anahtar parmak izi içerir. İlgili özel anahtar, ortak çalışan/denetçiye aittir ve denetlenen resimleri imzalamak için kullanılır.
  • Bazı güvenlik modellerinde, güvenilir bir resim imzalama anahtarına referans vermek yeni resim özet değeri listesini güncellemekten daha kullanışlıdır.

Güvenlik gerileme yaşanmaz: Güven sınırları aynı kaldığı için bu kapsayıcı imzası yaklaşımı, önceki resim özeti yaklaşımına kıyasla güvenlik gerileme yaşanmasına neden olmaz. Kapsayıcı imza yaklaşımında, kaynak sahibi WIP politikasında güvenilir ortak anahtar parmak izini belirterek bir doğrulama anahtarını yetkilendirir ve yetkilendirme kontrolü, Attestation Verifier Service ve WIP tarafından gerçekleştirilir. Attestation Verifier Service, imzanın çalışan iş yükü ile ilişkili olduğunu doğrular ve WIP politikası, hizmet tarafından beyan edilen ortak anahtarın politika tarafından yetkilendirilip yetkilendirilmediğini kontrol eder.

Güçlü güvenlik: Container görüntüsü imzaları kullanmak, kullanıcının görüntü imzalayana belirli bir düzeyde güven vermesini sağlar. Kaynak sahibi, doğrulama politikasında güvenilir bir imzalayanın ortak anahtar parmak izini belirterek bu imzalayanın, hangi kapsayıcı görüntülerinin bir politikaya uyduğuna dair onay vermesine yetki verir. Attestation Verifier Service, imzanın çalışan iş yükü ile 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ığı ek dolaylı erişim 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ı erişim katmanı kullanılmasıdır. Güven sınırları aynı kaldığından 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 denetlenen bir kapsayıcı görüntüsünü imzalama
  • İmza bulma ve depolama için container görüntüsü imzalarını OCI kayıt defterlerine yükleme
  • Gizli Alan'ı çalıştırmak için gerekli bulut kaynaklarını yapılandırma
  • İş yükünü, imzalı kapsayıcı resmi desteğiyle Gizli Alan'da çalıştırma

Bu kod laboratuvarında, Google Compute Engine'da çalışan güvenilir bir anahtarla imzalanan bir kapsayıcı görüntüsünün uzaktan doğrulanması için Gizli Alan'ın nasıl kullanılacağı gösterilmektedir.

Gerekenler

İmzalı kapsayıcı görüntüsüne sahip gizli bir alandaki roller

Bu codelab'de Primus Bank, denetleyici ve kaynak sahibi olacak ve aşağıdakilerden sorumlu olacaktır:

  1. Gerekli kaynakları örnek veri kullanarak ayarlama.
  2. İş yükü kodunu denetleme.
  3. İş yükü resmini imzalamak için cosign kullanma
  4. İmzayı bir depoya yükleme.
  5. WIP politikasını müşteri verilerini koruyacak şekilde yapılandırma.

Secundus Bank, iş yükü 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ü desteğiyle Gizli Alan'da çalıştırma.

Secundus Bank, Primus Bank'a ait bir bulut depolama paketinde depolanan müşteri verilerini sorgulayacak bir iş yükü geliştirip yayınlar. Primus Bank, iş yükünü denetleyecek, kapsayıcı görüntüsünü imzalayacak ve WIP politikalarını, verilere onaylanmış iş yükleri tarafından erişilmesine izin verecek şekilde yapılandıracaktır. Bu iş yükü yürütmesinin sonucu, Secundus bankasına ait bir Cloud Storage paketinde depolanır.

Gizli Alan kurulumuyla ilgili kaynaklar

Bu kod laboratuvarının referans verdiği bazı değişkenleri GCP projeniz için uygun değerlere ayarlamanız gerekir. Bu kod laboratuvarındaki komutlar, bu değişkenlerin ayarlandığını varsayar. (örneğin, Primus bankasının giriş depolama paketinin adını ayarlamak için export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' kullanılabilir.) resource-names değişkenleri ayarlanmadıysa GCP project-id'ye 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: İddiaları doğrulayan Workload Identity Pool (WIP).
  • $PRIMUS_WIP_PROVIDER: Attestation Verifier Service 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'ın, korunan kaynaklara erişmek için kullandığı hizmet hesabı. Bu adımda, $PRIMUS_INPUT_STORAGE_BUCKET veri grubunda 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ü resim imzalarını depolamak için Artifact Registry.
  • $PRIMUS_SIGNING_KEY: Denetleyici/veri iş ortakları tarafından iş yükü resmini imzalamak için kullanılan KMS anahtarı (bu örnekte primus bank).

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

  • $SECUNDUS_ARTIFACT_REGISTRY: İş yükü Docker görüntüsünün gönderileceği Artifact Registry.
  • $WORKLOAD_IMAGE_NAME: İş yükü Docker resminin adı.
  • $WORKLOAD_IMAGE_TAG: İş yükü Docker resminin 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'e yükleyip bu verileri sorgulayacak bir iş yükü oluşturacağız.

Mevcut iş akışı

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ü, WIP'den $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 hizmet jetonundaki 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 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ü, 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ğine sahip yeni iş akışı

İmzalı kapsayıcı desteği, aşağıda vurgulandığı gibi mevcut iş akışına entegre edilecek. İş 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. Gizlilik Alanı, şu anda çalışan iş yükü görüntüsüyle ilgili tüm kapsayıcı imzalarını bulur ve bunları doğrulama doğrulayıcısına gönderir. Onay doğrulayıcı, imzayı doğrular ve geçerli imzaları onay beyanlarında belirtir.
  2. İş yükü, WIP'den $PRIMUS_SERVICEACCOUNT için genel bir Google erişim jetonu ister. İş yükü ve ortam iddiaları içeren bir Attestation Verifier hizmet jetonu sunar.
  3. Onaylama Doğrulayıcı hizmet jetonundaki kapsayıcı imza iddiaları, WIP'deki özellik koşuluyla eşleşirse $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 işlevini kullanır.

2. Cloud Kaynakları Oluşturma

Confidential Space kurulumu kapsamında ö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 Artifact Registry deposu.

Secundus projesinde yeni kaynak yok. Bu kaynaklar oluşturulduktan sonra, iş yükü için gerekli rollere ve izinlere sahip bir hizmet hesabı oluşturursunuz. Ardından bir iş yükü resmi oluşturursunuz ve denetleyici (Primus bankası) iş yükü resmini imzalar. Ardından iş yükü, veri iş ortakları (bu kod laboratuvarındaki Primus Bank) tarafından yetkilendirilir ve iş yükü operatörü (bu durumda Secundus Bank) 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 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
  • Bu kod laboratuvarının 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>
  • Yukarıda belirtilen kaynak adları için değişkenleri bu komutu kullanarak ayarlayın. Bu değişkenleri kullanarak kaynak adlarını geçersiz kılabilirsiniz (ör.export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  • 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
  • Buradaki talimatları uygulayarak cosign'i yükleyin.

Primus banka kaynaklarını ayarlama

Bu adımda, Primus bank için gerekli bulut kaynaklarını ayarlarsı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ğıdaki kaynaklar oluşturulur:

  • Primus bank'ın şifrelenmiş müşteri verileri dosyasını depolamak için Cloud Storage paketi ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus bank'ın veri dosyasını şifrelemek için KMS'de şifreleme anahtarı ($PRIMUS_ENC_KEY) ve anahtar zinciri ($PRIMUS_ENC_KEYRING).
  • 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).
  • Aşağıdaki IAM erişimine sahip, yukarıda belirtilen iş yükü kimliği havuzuna ($PRIMUS_WORKLOAD_IDENTITY_POOL) bağlı hizmet hesabı ($PRIMUS_SERVICEACCOUNT):
  • roles/cloudkms.cryptoKeyDecrypter kullanarak verilerin şifresini çözebilirsiniz.
  • objectViewer kullanarak Cloud Storage paketinden veri okuyabilirsiniz.
  • roles/iam.workloadIdentityUser için bu hizmet hesabını Workload Identity havuzuna bağlama.
./setup_primus_bank_resources.sh

Secundus banka 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ğıdaki kaynaklar oluşturulur:

  • Secundus bank tarafından iş yükü yürütmenin sonucunu depolamak için Cloud Storage paketi ($SECUNDUS_RESULT_STORAGE_BUCKET).
./setup_secundus_bank_resources.sh

3. İş yükü oluşturma ve imzalama

İş 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 bank 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ı ($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.
  • $PRIMUS_INPUT_STORAGE_BUCKET Cloud Storage paketinden veri okumak için objectViewer.
  • objectAdmin, iş yükü sonucunu $SECUNDUS_RESULT_STORAGE_BUCKET Cloud Storage paketine yazar.
./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 uygulandığı bir iş yükü oluşturmak için aşağıdaki komut dosyasını çalıştırın:

  • Secundus bankasına ait bir 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ü kodu burada verilmiştir.
  • Go ikilisini 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'i burada bulabilirsiniz.
  • Docker görüntüsünü oluşturup Secundus bank'a ait Artifact Registry'de ($SECUNDUS_ARTIFACT_REGISTRY) yayınlayın.
  • $WORKLOAD_SERVICEACCOUNT kullanıcısına $SECUNDUS_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

İş yükünü imzalama

İş yükü resmini imzalamak için Cosign'ı kullanacağız. Ortak imzalama, varsayılan olarak imzaları imzalanan resimle aynı depoda depolar. İ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 otoritelerini 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. Bir iş yükü resmini imzalamak için KMS altında bir anahtar cüzdanı 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 alanı için herhangi bir kapsayıcı görüntüsünü depoya yükleyebilirsiniz.
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
  1. $PRIMUS_COSIGN_REPOSITORY deposunda $WORKLOAD_SERVICEACCOUNT hizmet hesabına Görüntüleyici rolü verin. Bu sayede Gizli Alan, $PRIMUS_COSIGN_REPOSITORY'ye yüklenen tüm kapsayıcı resmi 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ğine sahip güçlü bir araçtır. Kullanım alanımızda, Cosign'ın yalnızca bir anahtar çiftiyle imzalaması gerekir. Anahtarsız birlikte imzalama, bu imzalı kapsayıcı resmi özelliğinde desteklenmez.

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

  1. Cosign tarafından oluşturulan yerel bir anahtar çiftiyle imzalayın.
  2. Başka bir yerde (ör. KMS'de) 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 bölümüne bakın. Burada hem anahtar çifti oluşturma hem de iş yükünü imzalama yöntemlerini (yerel olarak ve KMS sağlayıcıyı kullanarak) belirttik. Lütfen iş yükü kapsayıcısını imzalamak için bu yöntemlerden birini uygulayı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> ifadesini 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ü belirtir
  • <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 anahtar üzerinde 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 genel anahtar ve imza algoritmaları eklenmiş olarak Cosign'i 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] kullanılacak imzalama anahtarını belirtir. Bir KMS sağlayıcısı tarafından yönetilen bir anahtardan bahsederken lütfen Sigstore KMS destek sayfasında belirtilen URI biçimini kullanın. Cosign tarafından oluşturulan bir anahtardan bahsederken bunun yerine cosign.key değerini kullanın.
  • $IMAGE_REFERENCE [ZORUNLU] hangi container 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 eklenen ek açıklamaları belirtir. Gizli Alan'da imzalanan kapsayıcı resimleri için ortak anahtar ve imza algoritmalarının imza yüküne eklenmesi gerekir.
  • dev.cosignproject.cosign/sigalg YALNIZCA üç değer kabul eder:
  • RSASSA_PSS_SHA256: SHA256 özetiyle PSS dolgu içeren RSASSA algoritması.
  • RSASSA_PKCS1V15_SHA256: SHA256 özetiyle PKCS#1 v1.5 dolgu içeren RSASSA algoritması.
  • ECDSA_P256_SHA256: SHA256 özetine sahip, P-256 Eğrisindeki ECDSA. Bu, Cosign tarafından oluşturulan anahtar çiftleri için varsayılan imza algoritmasıdır.
  1. İmzaları docker deposuna yükleme

Ortak imza, imzaları belirtilen COSIGN_REPOSITORY. adresine otomatik olarak yükler.

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

İş yükünü yetkilendirme

Bu adımda, iş yükü kimliği sağlayıcısını iş yükü kimliği havuzu ($PRIMUS_WORKLOAD_IDENTITY_POOL) altında ayarlayacağız. Aşağıda gösterildiği gibi, iş yükü kimliği için yapılandırılan özellik koşulları vardır. Koşullardan biri, iş yükü resim imzasının parmak izinin, imzalama ortak anahtarının parmak izine göre doğrulanmasıdır. Bu özellik koşuluyla, Secundus Bank yeni bir iş yükü resmi yayınladığında Primus Bank, iş yükü kodunu denetler ve WIP politikasını resim özetiyle güncellemeden 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ünü çalıştırma

Bu adımda, 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ıyla ilgili 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 kaç kişi listelenmiştir.

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 bankasının depolama paketini girin ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus bank service-account ($PRIMUS_SERVICEACCOUNT).
  • Resim imzalarını ($PRIMUS_COSIGN_REPOSITORY) içeren Primus Banka yapı kayıt defteri.
  • Primus Bank iş yükü kimliği havuzu ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Secundus Bank'ın ($WORKLOAD_SERVICEACCOUNT) iş yükü hizmet hesabı.
  • İş yükü Compute örneği.
  • Secundus Bank'ın ($SECUNDUS_RESULT_STORAGE_BUCKET) sonuç depolama paketi.
  • Secundus Bank ($SECUNDUS_ARTIFACT_REGISTRY) Artifact Registry.
  • Secundus Bank'ın ($WORKLOAD_VM) iş yükü sanal makinesi.
./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.

Tebrikler

Tebrikler, kod laboratuvarını 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.

Sırada ne var?

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

Daha fazla bilgi