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:
cosignkullanarak 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
- Confidential Space Codelab'ini tamamlayın.
- Google Cloud Platform projesi
- Chrome veya Firefox gibi bir tarayıcı
- Vim, Emacs veya Nano gibi standart Linux metin düzenleyicileri hakkında bilgi sahibi olmanız gerekir.
- Sigstore cosign hakkında temel bilgiler
- Google Compute Engine ( codelab), Gizli Sanal Makine, Container'lar ve uzak depolar hakkında temel bilgiler
- Cloud KMS hakkında temel bilgiler ( codelab)
- Hizmet hesapları, iş yükü kimliği federasyonu ve özellik koşulları hakkında temel bilgiler.
- Artifact Registry hakkında temel bilgiler
- Dijital imzalar hakkında temel bilgiler
İ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:
- Gerekli kaynakları örnek verilerle ayarlama
- İş yükü kodunu denetleme
- İş yükü resmini imzalamak için
cosignkullanılıyor. - İmzayı bir depoya yükleme
- 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:
- Sonucu depolamak için gerekli kaynakları ayarlama.
- İş yükü kodunu yazma
- İş yükü resmini yayınlama.
- İş 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_POOLtarafından korunan kaynaklara erişmek için kullanılan hizmet hesabı. Bu adımda,$PRIMUS_INPUT_STORAGE_BUCKETpaketinde depolanan müşteri verilerini görüntüleme izni vardır.$PRIMUS_ENC_KEY:$PRIMUS_INPUT_STORAGE_BUCKETiç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:
- İş yükü, WIP'den
$PRIMUS_SERVICEACCOUNTiçin genel bir Google erişim jetonu ister. İş yükü ve ortam talepleri içeren bir onaylayıcı hizmet jetonu sunar. - 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. - İş yükü,
$PRIMUS_SERVICEACCOUNTile ilişkili hizmet hesabı erişim jetonunu kullanarak$PRIMUS_INPUT_STORAGE_BUCKETpaketindeki müşteri verilerine erişir. - İş yükü, bu veriler üzerinde bir işlem gerçekleştirir.
- İş yükü, bu işlemin sonuçlarını
$SECUNDUS_RESULT_STORAGE_BUCKETpaketine yazmak için$WORKLOAD_SERVICEACCOUNThizmet 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:
- 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.
- İş yükü, WIP'den
$PRIMUS_SERVICEACCOUNTiçin genel bir Google erişim jetonu ister. İş yükü ve ortam talepleri içeren bir Attestation Verifier hizmet jetonu sunar. - Onaylama Doğrulayıcı hizmet jetonundaki kapsayıcı imzası talepleri, WIP'deki özellik koşuluyla eşleşirse
$PRIMUS_SERVICEACCOUNTiçin erişim jetonunu döndürür. - İş yükü,
$PRIMUS_SERVICEACCOUNTile ilişkili hizmet hesabı erişim jetonunu kullanarak$PRIMUS_INPUT_STORAGE_BUCKETpaketindeki müşteri verilerine erişir. - İş yükü, bu veriler üzerinde bir işlem gerçekleştirir.
- İş yükü, bu işlemin sonuçlarını
$SECUNDUS_RESULT_STORAGE_BUCKETpaketine yazmak için$WORKLOAD_SERVICEACCOUNTkullanı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.cryptoKeyDecrypterKMS anahtarını kullanarak verilerin şifresini çözmek için.objectViewerbulut 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.workloadUseronay jetonu almak içinlogging.logWriterCloud Logging'e günlük kaydı yazmak için.objectViewerbulut depolama paketinden veri okumak için$PRIMUS_INPUT_STORAGE_BUCKET.objectAdminiş yükü sonucunu$SECUNDUS_RESULT_STORAGE_BUCKETCloud 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_SERVICEACCOUNTiçin$SECUNDUS_ARTIFACT_REGISTRYokuma 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.
- 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}
- İş 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}
- Artifact Registry için
$LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAMEgibi 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
$PRIMUS_COSIGN_REPOSITORYdeposunda Görüntüleyici rolünü$WORKLOAD_SERVICEACCOUNThizmet 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:
- Cosign tarafından oluşturulan yerel bir anahtar çiftiyle imzalama.
- Başka bir yerde (ör. KMS) depolanan bir anahtar çiftiyle imzalama
- 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.
- 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
- 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/[=]*$//')
- 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_REFERENCEbiç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/sigalgONLY 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.
- 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:
- Gizli Alan ile kullanılan kullanımdaki paylaşılan verilerin güvenliği
- Çok taraflı hesaplama ve gizli alanlarla dijital varlık işlemleri yapma
- Gizli alanlarla gizli verileri analiz etme