1. Przegląd
Confidential Space umożliwia bezpieczne udostępnianie danych wielu stronom i współpracę, a jednocześnie pozwala organizacjom zachować poufność danych. Oznacza to, że organizacje mogą ze sobą współpracować, zachowując kontrolę nad swoimi danymi i chroniąc je przed nieuprawnionym dostępem.
Confidential Space umożliwia scenariusze, w których chcesz uzyskać wzajemną korzyść z agregowania i analizowania danych wrażliwych, często podlegających regulacjom, przy jednoczesnym zachowaniu pełnej kontroli nad nimi. Dzięki usłudze Confidential Space organizacje mogą wzajemnie korzystać z agregowania i analizowania danych wrażliwych, takich jak informacje umożliwiające identyfikację, chronione informacje zdrowotne, własność intelektualna i tajemnice kryptograficzne, zachowując przy tym pełną kontrolę nad tymi danymi.
Czego potrzebujesz
- Projekt Google Cloud Platform
- przeglądarka, np. Chrome lub Firefox;
- Podstawowa wiedza o Google Compute Engine ( codelab), maszynach wirtualnych poufnych, kontenerach i repozytoriach zdalnych.
- Podstawowa wiedza o Cloud KMS ( codelab)
- Podstawowa wiedza o kontach usługi, federacji tożsamości zadań i warunkach atrybutów.
Czego się nauczysz
- Konfigurowanie zasobów Cloud niezbędnych do uruchomienia poufnej przestrzeni
- Jak uruchomić zadanie na poufnej maszynie wirtualnej z obrazem maszyny wirtualnej Poufnej przestrzeni
- Jak autoryzować dostęp do chronionych zasobów na podstawie atrybutów kodu zadania (co), środowiska Poufnej przestrzeni (gdzie) i konta, na którym jest uruchomione zadanie (kto).
W tym laboratorium kodowania skonfigurujesz przestrzeń poufną między bankami Primus i Secundus, aby określić ich wspólnych klientów bez udostępniania sobie pełnych list kont. Obejmuje ona te czynności:
- Krok 1. Skonfiguruj wymagane zasoby w chmurze dla banków Primus i Secundus. Te zasoby w chmurze obejmują zasobniki Cloud Storage, klucze KMS, pule tożsamości obciążeń i konta usług dla banków Primus i Secundus. Bank Primus i Bank Secundus przechowują dane klientów w zasobnikach Cloud Storage i szyfrują je za pomocą kluczy Cloud Key Management Service.
- Krok 2. Utwórz konto usługi zadania, które będzie używane przez maszynę wirtualną zadania. Secundus Bank, który będzie operatorem zadania, uruchomi maszynę wirtualną zadania. Kod zbioru zadań będzie tworzony przez Primus Bank.
- Krok 3. Utwórz zadanie, które zawiera 2 polecenia interfejsu wiersza poleceń: jedno do zliczania klientów z podanej lokalizacji, a drugie do znajdowania wspólnych klientów banków Primus i Secundus. Obciążenie zostanie utworzone przez Primus Bank i spakowane jako obraz Dockera. Ten obraz Dockera zostanie opublikowany w Artifact Registry.
- Krok 4. Autoryzuj obciążenie. Primus Bank używa puli tożsamości zadań, aby autoryzować zadania w zakresie dostępu do danych klientów na podstawie atrybutów osoby, która uruchamia zadanie, tego, co ono robi, i miejsca, w którym jest uruchamiane.
- Krok 5. Gdy obciążenie jest uruchamiane, wysyła żądanie dostępu do zasobów w chmurze podmiotów współpracujących w zakresie danych (Primus Bank i Secundus Bank), oferując token usługi weryfikacji atestu z deklaracjami dotyczącymi obciążenia i środowiska. Jeśli roszczenia dotyczące pomiaru zadania w tokenie pasują do warunku atrybutu w pulach tożsamości zadań banków Primus i Secundus, zwraca token dostępu konta usługi, który ma uprawnienia dostępu do odpowiednich zasobów w chmurze. Zasoby w chmurze będą dostępne tylko dla zadań działających w Poufnej przestrzeni.
- Krok 5a. Uruchom pierwsze zadanie, które zlicza klientów Primus Bank z określonych lokalizacji. W przypadku tego zadania Primus Bank byłby podmiotem współpracującym w zakresie danych i autorem zadania, który udostępniałby zaszyfrowaną listę klientów zadaniu uruchomionemu w Poufnej przestrzeni. Secundus Bank będzie operatorem zadań i będzie uruchamiać zadania w Poufnej przestrzeni.
- Krok 5b. Uruchom drugi proces, który znajdzie wspólnych klientów banków Primus i Secundus. W przypadku tego zadania zarówno Primus Bank, jak i Secundus Bank byłyby podmiotami współpracującymi w zakresie danych. Dostarczają one zaszyfrowane listy klientów do zadań działających w Poufnej przestrzeni. Secundus Bank ponownie będzie operatorem zbioru zadań. Ten zbiór zadań również zostanie autoryzowany przez Secundus Bank, ponieważ musi mieć dostęp do zaszyfrowanych list klientów tego banku, aby znaleźć wspólnych klientów. W tym przypadku bank Secundus autoryzuje dostęp zbioru zadań do danych klientów na podstawie atrybutów osoby, która uruchamia zbiór zadań, tego, co robi zbiór zadań, i miejsca, w którym jest uruchamiany zbiór zadań, zgodnie z krokiem 4 w przypadku banku Primus.

2. Konfigurowanie zasobów w chmurze
Zanim zaczniesz
- Skopiuj to repozytorium za pomocą poniższego polecenia, aby uzyskać wymagane skrypty, które są używane w tym laboratorium.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Zmień katalog tego ćwiczenia.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- Sprawdź, czy masz ustawione wymagane zmienne środowiskowe projektu, jak pokazano poniżej. Więcej informacji o tworzeniu projektu GCP znajdziesz w tym samouczku. Więcej informacji o tym, jak pobrać identyfikator projektu i czym różni się on od nazwy i numeru projektu, znajdziesz tutaj.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- Włącz płatności w swoich projektach.
- Włącz interfejs Confidential Computing API i te interfejsy API w obu projektach.
gcloud services enable \
cloudapis.googleapis.com \
cloudkms.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- Ustaw zmienne nazw zasobów w sposób opisany poniżej za pomocą tego polecenia. Nazwy zasobów możesz zastąpić za pomocą tych zmiennych (np.
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'). - W projekcie Primus możesz ustawić te zmienne, używając nazw istniejących zasobów w chmurze. Jeśli zmienna jest ustawiona, zostanie użyty odpowiedni istniejący zasób w chmurze z projektu Primus. Jeśli zmienna nie jest ustawiona, nazwa zasobu w chmurze zostanie wygenerowana na podstawie nazwy projektu, a nowy zasób w chmurze zostanie utworzony w ramach:
| Zasobnik, w którym przechowywany jest plik danych klientów banku Primus. |
| Pula tożsamości zadań banku Primus, która weryfikuje roszczenia. |
| Dostawca puli tożsamości zadań Primus Bank, który zawiera warunek autoryzacji do użycia w przypadku tokenów podpisanych przez usługę weryfikacji atestów. |
| Konto usługi Primus Bank, z którego |
| Klucz KMS używany do szyfrowania danych przechowywanych w |
| Pęk kluczy KMS, który zostanie użyty do utworzenia klucza szyfrowania |
| Repozytorium artefaktów, do którego zostanie przesłany obraz Dockera zadania. |
- W projekcie Secundus możesz ustawić te zmienne, podając nazwy istniejących zasobów w chmurze. Jeśli zmienna jest ustawiona, zostanie użyty odpowiedni istniejący zasób w projekcie Secundus. Jeśli zmienna nie jest ustawiona, nazwa zasobu w chmurze zostanie wygenerowana na podstawie nazwy projektu, a nowy zasób w chmurze zostanie utworzony w ramach tych działań:
| Zasobnik, w którym przechowywany jest plik danych o klientach banku Secundus |
| Pula tożsamości zadań banku Secundus, która weryfikuje roszczenia. |
| Dostawca puli tożsamości zadań Secundus Bank, który zawiera warunek autoryzacji do użycia w przypadku tokenów podpisanych przez usługę weryfikacji atestu. |
| Konto usługi Secundus Bank, z którego |
| Klucz KMS używany do szyfrowania danych przechowywanych w |
| Pęk kluczy KMS, który jest używany do tworzenia klucza szyfrującego |
| Zasobnik, w którym są przechowywane wyniki zbioru zadań. |
| Nazwa obrazu kontenera zadania. |
| Tag obrazu kontenera zbioru zadań. |
| Konto usługi, które ma uprawnienia dostępu do maszyny wirtualnej poufnego środowiska, na której działa zadanie. |
- W tym laboratorium używamy kilku artefaktów, o których wspomnieliśmy poniżej:
primus_customer_list.csv: plik zawierający dane klientów banku Primus Bank. Tutaj znajdziesz przykładowy plik użyty w tym laboratorium.secundus_customer_list.csv: plik zawierający dane klientów banku Secundus. Tutaj znajdziesz przykładowy plik użyty w tym laboratorium.- W przypadku tych 2 projektów musisz mieć określone uprawnienia:
- W przypadku
$PRIMUS_PROJECT_IDbędziesz potrzebować uprawnień Administrator Cloud KMS, Administrator miejsca na dane, Administrator Artifact Registry, Administrator konta usługi i Uprawnienia – administrator pul Workload Identity. - W przypadku
$SECUNDUS_PROJECT_IDmusisz mieć uprawnienia administratora Compute Engine, administratora Storage, administratora kont usługi, administratora Cloud KMS, administratora pul tożsamości pracowników w Uprawnieniach i administratora zabezpieczeń (opcjonalnie). - Uruchom ten skrypt, aby ustawić pozostałe nazwy zmiennych na wartości oparte na identyfikatorze projektu w przypadku nazw zasobów.
source config_env.sh
Konfigurowanie zasobów chmury dla banku Primus
W przypadku banku Primus Bank wymagane są te zasoby w chmurze: Aby skonfigurować zasoby dla Primus Bank, uruchom ten skrypt:
- zasobnik Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET) do przechowywania zaszyfrowanego pliku danych klientów banku Primus Bank; - klucz szyfrowania (
$PRIMUS_ENC_KEY) i pęk kluczy ($PRIMUS_ENC_KEYRING) w KMS do szyfrowania pliku danych klienta banku Primus Bank. - Pula tożsamości zadań (
$PRIMUS_WORKLOAD_IDENTITY_POOL) do weryfikowania roszczeń na podstawie warunków atrybutów skonfigurowanych u jej dostawcy. - Konto usługi (
$PRIMUS_SERVICE_ACCOUNT) dołączone do wspomnianej puli tożsamości obciążeń ($PRIMUS_WORKLOAD_IDENTITY_POOL) ma dostęp do odszyfrowywania danych za pomocą klucza KMS (przy użyciu roliroles/cloudkms.cryptoKeyDecrypter), odczytywania danych z zasobnika pamięci masowej w chmurze (przy użyciu roliobjectViewer) i łączenia konta usługi z pulą tożsamości obciążeń (przy użyciu roliroles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh
Konfigurowanie zasobów w chmurze dla Secundus Bank
W przypadku banku Secundus Bank wymagane są te zasoby w chmurze: Uruchom ten skrypt, aby skonfigurować zasoby Secundus Bank. W ramach tych kroków zostaną utworzone te zasoby:
- Zasobnik Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET) do przechowywania zaszyfrowanego pliku danych klientów banku Secundus. - Klucz szyfrowania (
$SECUNDUS_ENC_KEY) i pęk kluczy ($SECUNDUS_ENC_KEYRING) w KMS do szyfrowania pliku danych banku Secundus. - Pula tożsamości zadań (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) do weryfikowania roszczeń na podstawie warunków atrybutów skonfigurowanych u jej dostawcy. - Konto usługi (
$SECUNDUS_SERVICE_ACCOUNT) dołączone do wspomnianej puli tożsamości zadań ($SECUNDUS_WORKLOAD_IDENTITY_POOL) ma dostęp do odszyfrowywania danych za pomocą klucza KMS (przy użyciuroles/cloudkms.cryptoKeyDecrypter), odczytywania danych z zasobnika pamięci masowej w chmurze (przy użyciuobjectViewer) i łączenia konta usługi z pulą tożsamości zadań (przy użyciuroles/iam.workloadIdentityUser). - Zasobnik Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET) do przechowywania wyników wykonania zbioru zadań przez Secundus Bank.
./setup_secundus_bank_resources.sh
3. Tworzenie zadania
Tworzenie konta usługi zadania
Teraz utworzysz konto usługi dla obciążenia z wymaganymi rolami i uprawnieniami, jak podano poniżej. Uruchom ten skrypt, aby utworzyć konto usługi obciążenia w projekcie Secundus Bank. Maszyna wirtualna, na której działa obciążenie, będzie używać tego konta usługi.
To konto usługi obciążenia ($WORKLOAD_SERVICE_ACCOUNT) będzie miało przypisane te role:
- Przypisz rolę
confidentialcomputing.workloadUserdo konta usługi zadania . Umożliwi to generowanie tokena atestu przez konto użytkownika. - Przyznaj uprawnienia do konta usługi obciążenia w roli
logging.logWriter. Dzięki temu środowisko Confidential Space może zapisywać logi w Cloud Logging oprócz konsoli szeregowej, więc logi są dostępne po zakończeniu działania maszyny wirtualnej. objectViewer– odczytywanie danych z zasobnika pamięci w chmurze$PRIMUS_INPUT_STORAGE_BUCKET.objectViewer– odczytywanie danych z zasobnika pamięci w chmurze$SECUNDUS_INPUT_STORAGE_BUCKET.objectAdmin, aby zapisać wynik zbioru zadań w zasobniku Cloud Storage$SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh
Tworzenie zadania
W ramach tego kroku utworzysz obraz Dockera dla obciążenia używanego w tym ćwiczeniu. Zbiór zadań to prosta aplikacja GoLang, która:
- Zlicza klientów w określonej lokalizacji geograficznej.
- Wyszukuje wspólnych klientów banków Primus i Secundus na listach klientów przechowywanych w ich zasobnikach Cloud Storage.
Uruchom ten skrypt, aby utworzyć zadanie, w którym wykonywane są te czynności:
- Utwórz repozytorium Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY) należące do Primus Bank, w którym będzie publikowane obciążenie. - Wygeneruj kod i zaktualizuj go, podając nazwy wymaganych zasobów. Kod zadania użyty w tym ćwiczeniu znajdziesz tutaj.
- skompilować kod i spakować go w obrazie Dockera, Odpowiedni plik Dockerfile znajdziesz tutaj.
- opublikować obraz Dockera w Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) należącym do Primus Bank, - Przyznaj kontu usługi
$WORKLOAD_SERVICE_ACCOUNTuprawnienie do odczytu w Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh
4. Autoryzowanie i uruchamianie zbiorów zadań
Autoryzowanie zadania
Primus Bank chce autoryzować zbiory zadań do uzyskiwania dostępu do danych klientów na podstawie atrybutów tych zasobów:
- Co: kod, który został zweryfikowany.
- Gdzie: bezpieczne środowisko
- Kto: zaufany operator
Primus używa federacji tożsamości zadań, aby egzekwować zasady dostępu oparte na tych wymaganiach.
Federacja tożsamości zadań umożliwia określanie warunków atrybutów. Te warunki ograniczają tożsamości, które mogą uwierzytelniać się w puli tożsamości zadań. Możesz dodać usługę weryfikacji zaświadczeń do puli tożsamości zadań jako dostawcę puli tożsamości zadań, aby przedstawiać pomiary i egzekwować zasady.
Pula tożsamości zadań została utworzona wcześniej w ramach konfiguracji zasobów w chmurze. Teraz Primus Bank utworzy nowego dostawcę puli tożsamości zadań OIDC. Określony --attribute-condition autoryzuje dostęp do kontenera zbioru zadań. Wymagania:
- Co: najnowsza wersja
$WORKLOAD_IMAGE_NAMEzostała przesłana do repozytorium$PRIMUS_ARTIFACT_REPOSITORY. - Miejsce: zaufane środowisko wykonawcze Poufnej przestrzeni działa na w pełni obsługiwanym obrazie maszyny wirtualnej Poufnej przestrzeni.
- Kto: konto usługi Secundus Bank
$WORKLOAD_SERVICE_ACCOUNT.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Podobnie jak w przypadku puli tożsamości zadań utworzonej dla Primus Bank, Secundus Bank chce autoryzować zadania w celu uzyskania dostępu do danych klientów na podstawie:
- Co: zadanie.
- Gdzie: środowisko Poufnej przestrzeni.
- Kto: konto (
$WORKLOAD_SERVICE_ACCOUNT), na którym działa obciążenie.
Primus Bank używa roszczenia image_reference, które zawiera tag obrazu, aby określić, czy należy autoryzować dostęp. Mają kontrolę nad zdalnym repozytorium, więc mogą mieć pewność, że otagują tylko obrazy, które nie ujawniają ich danych.
Secundus Bank nie ma kontroli nad repozytorium, z którego pobiera obraz, więc nie może bezpiecznie przyjąć takiego założenia. Zamiast tego decydują się na autoryzację dostępu do zadania na podstawie jego image_digest. W przeciwieństwie do elementu image_reference, który Primus Bank mógł zmienić, aby wskazywał inny obraz, nie mógł on sprawić, aby element image_digest odnosił się do obrazu innego niż ten, który Secundus Bank sprawdził w poprzednim kroku.
Przed utworzeniem dostawców puli tożsamości zadań zbieramy image_digest obrazu kontenera zadania, który będzie używany w warunkach atrybutów dostawcy.
export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Uruchamianie zadań
W ramach tego kroku Secundus Bank uruchomi zadanie w przestrzeni poufnej. To zadanie otrzyma tokeny dostępu z puli tożsamości zadań Primus i puli tożsamości zadań Secundus, aby odczytywać i odszyfrowywać dane klientów odpowiednio Primus Banku i Secundus Banku.
Wymagane argumenty TEE są przekazywane za pomocą flagi metadanych. Argumenty kontenera zadania są przekazywane za pomocą części „tee-cmd” flagi. Wynik wykonania zadania zostanie opublikowany w $SECUNDUS_RESULT_STORAGE_BUCKET.
Uruchamianie pierwszego zadania
W ramach pierwszego wykonania zadania zadanie zliczy klientów Primus Bank z lokalizacji podanej w argumentach kontenera zadania. Jak widać poniżej, pierwsze zadanie wykona polecenie „count-location”, a wynik zostanie zapisany w $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result.
gcloud compute instances create ${WORKLOAD_VM1} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""
Pokaż wyniki
W projekcie Secundus wyświetl wyniki pierwszego zadania. Poczekaj 3–5 minut, aż zadanie zakończy wykonywanie i wynik będzie dostępny w zasobniku pamięci w chmurze.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Wynik powinien wynosić 3, ponieważ tyle osób z Seattle jest wymienionych w pliku primus_customer_list.csv.
Uruchamianie drugiego zadania
W ramach drugiego wykonania zadania znajdziemy wspólnych klientów banków Primus Bank i Secundus Bank. Jak widać poniżej, drugie zadanie wykona polecenie „list-common-customers”, a wynik zostanie zapisany w $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count.
gcloud compute instances create ${WORKLOAD_VM2} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
Pokaż wyniki
W projekcie Secundus wyświetl wyniki drugiego zadania. Poczekaj 3–5 minut, aż zadanie zakończy wykonywanie i wynik będzie dostępny w zasobniku pamięci w chmurze.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Wynikiem powinna być poniższa lista, ponieważ są to wspólni klienci banków Primus i Secundus.
Dane wyjściowe:
Eric
Clinton
Ashley
Cooper
Uruchamianie nieautoryzowanego zadania
Umowa banku Primus Bank, która umożliwia bankowi Secundus Bank dostęp do jego danych, wygasa. Dlatego Primus Bank aktualizuje warunek atrybutu, aby zezwolić na maszyny wirtualne z kontem usługi od nowego partnera, Tertius Bank.
Primus Bank modyfikuje dostawcę puli Workload Identity
W $PRIMUS_PROJECT_ID zaktualizuj warunek atrybutu dostawcy tożsamości weryfikatora zaświadczeń, aby autoryzować zadania w nowej lokalizacji.
- Ustaw projekt na $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Wyeksportuj identyfikator projektu GCP banku Tertius Bank za pomocą tego polecenia. Później Primus Bank użyje tego do zaktualizowania warunku atrybutu dostawcy puli tożsamości obciążeń. Bank Primus nie przestanie autoryzować kont usługi zbiorów zadań Banku Secundus. Umożliwi to teraz korzystanie z kont usługi zadań Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Zaktualizuj dostawcę OIDC w puli tożsamości zadań. W tym przypadku
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accountszmienia się na'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.. Zamiast autoryzować konto usługi zadania z Secundus Bank, autoryzowane będzie konto usługi zadania z Tertius Bank.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Ponowne uruchomienie zadania
Gdy Secundus Bank próbuje uruchomić oryginalny zbiór zadań, operacja kończy się niepowodzeniem. Aby wyświetlić błąd, usuń oryginalny plik wyników i instancję maszyny wirtualnej, a potem spróbuj ponownie uruchomić zadanie.
Usuwanie istniejącego pliku wyników i instancji maszyny wirtualnej
- Ustaw projekt na
$SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
- Usuń plik wyników.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- Usuń instancję poufnej maszyny wirtualnej.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
Uruchom nieautoryzowane zadanie:
gcloud compute instances create ${WORKLOAD_VM2} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE}\
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
Wyświetl błąd
Zamiast wyników zadania widzisz błąd (The given credential is rejected by the attribute condition).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Podobnie, jeśli bank Primus Bank potajemnie zmodyfikuje zadanie, aby wysłać całą listę klientów banku Secundus Bank do zasobnika należącego do banku Primus Bank, próba ta zakończy się niepowodzeniem, ponieważ skrót złośliwego zadania będzie inny niż skrót obrazu, który został autoryzowany w puli tożsamości zadań banku Secundus Bank.
5. Czyszczenie
Tutaj znajdziesz skrypt, który umożliwia usunięcie zasobów utworzonych w ramach tego ćwiczenia z programowania. W ramach tego czyszczenia zostaną usunięte te zasoby:
- Wejściowy zasobnik Cloud Storage banku Primus Bank (
$PRIMUS_INPUT_STORAGE_BUCKET). - Konto usługi banku Primus Bank (
$PRIMUS_SERVICE_ACCOUNT). - Rejestr artefaktów banku Primus, który zawiera podpisy obrazów (
$PRIMUS_COSIGN_REPOSITORY). - Pula tożsamości zadań banku Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL). - Konto usługi zadania banku Secundus (
$WORKLOAD_SERVICE_ACCOUNT). - Wejściowy zasobnik Cloud Storage banku Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET). - Konto usługi banku Secundus (
$SECUNDUS_SERVICE_ACCOUNT). - rejestr artefaktów banku Secundus, który zawiera podpisy obrazów (
$SECUNDUS_COSIGN_REPOSITORY); - Pula tożsamości zadań banku Secundus(
$SECUNDUS_WORKLOAD_IDENTITY_POOL). - Konto usługi zadania banku Secundus (
$WORKLOAD_SERVICE_ACCOUNT). - Instancje obliczeniowe zbioru zadań.
- Zasobnik wyników Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET). - Repozytorium artefaktów Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY).
./cleanup.sh
Jeśli skończysz eksplorowanie, rozważ usunięcie projektu.
- Otwórz konsolę Cloud Platform.
- Wybierz projekt, który chcesz zamknąć, a następnie kliknij „Usuń” u góry. Spowoduje to zaplanowanie usunięcia projektu.
Gratulacje
Gratulacje! Codelab został ukończony.
Dowiedziałeś(-aś) się, jak zabezpieczać udostępnione dane przy zachowaniu ich poufności za pomocą przestrzeni poufnej.
Co dalej?
Wypróbuj te podobne codelaby:
- Ćwiczenia z programowania dotyczące podpisanych obrazów kontenerów
- Jak przeprowadzać transakcje na zasobach cyfrowych za pomocą obliczeń wielostronnych i przestrzeni poufnych
- Analizowanie danych poufnych za pomocą przestrzeni poufnych
Więcej informacji
- Czujesz się odizolowany? Przetwarzanie poufne na ratunek
- Protected Computing w GCP
- Poufna przestrzeń: przyszłość współpracy z zachowaniem prywatności
- Jak Google i Intel zwiększają bezpieczeństwo przetwarzania poufnego
- Prywatność a postęp – zwiększanie bezpieczeństwa dzięki poufnym obliczeniom w Google Cloud