1. Przegląd
Poufna przestrzeń umożliwia bezpieczne udostępnianie danych i współpracę wielu podmiotów, 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.
Poufna przestrzeń 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 Poufnej przestrzeni organizacje mogą czerpać wzajemne korzyści z agregowania i analizowania danych wrażliwych, takich jak informacje umożliwiające identyfikację, chronione informacje zdrowotne, własność intelektualna i obiekty tajne, 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
- Instrukcje konfigurowania 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 Poufna przestrzeń (gdzie) i konta, na którym jest uruchomione zadanie (kto).
W tym samouczku skonfigurujesz Poufną przestrzeń 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 zadanie. 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 zadania i uruchomi je 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 Administrator pul tożsamości zadań IAM. - W przypadku
$SECUNDUS_PROJECT_IDmusisz mieć uprawnienia administratora Compute Engine, administratora Storage, administratora konta usługi, administratora Cloud KMS, administratora puli tożsamości zadań 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 zadań ($PRIMUS_WORKLOAD_IDENTITY_POOL) ma dostęp do odszyfrowywania danych za pomocą klucza KMS (przy użyciu roliroles/cloudkms.cryptoKeyDecrypter), odczytywania danych z zasobnika Cloud Storage (przy użyciu roliobjectViewer) i łączenia konta usługi z pulą tożsamości zadań (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.cryptoKeyDecrypterroli), odczytywania danych z zasobnika Cloud Storage (przy użyciuobjectViewerroli) i łączenia konta usługi z pulą tożsamości zadań (przy użyciuroles/iam.workloadIdentityUserroli). - 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 Poufnej przestrzeni 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 Cloud Storage$PRIMUS_INPUT_STORAGE_BUCKET.objectViewer– odczytywanie danych z zasobnika Cloud Storage$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 w języku 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ć obciążenia, aby miały dostęp 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ń. Usługę weryfikacji zaświadczeń możesz dodać 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 jest uruchamiane zadanie.
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, Primus Bank nie mógł 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 będzie uruchamiać zadanie w Poufnej przestrzeni. 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 zbioru zadań 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 zbioru zadań zliczy on klientów Primus Bank z lokalizacji podanej w argumentach kontenera zbioru zadań. 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 tożsamości zadań
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 zadań. 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ń. Tutaj
'$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, teraz będzie autoryzowane 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 projekt
$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órego możesz użyć do usunięcia 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! Udało Ci się ukończyć ćwiczenie w Codelabs.
Wiesz już, jak zabezpieczać udostępnione dane, zachowując ich poufność, za pomocą Poufnej przestrzeni.
Co dalej?
Sprawdź te podobne ćwiczenia...
- Ć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(-a)? Przetwarzanie poufne na ratunek
- Confidential Computing w GCP
- Poufna przestrzeń: przyszłość współpracy z zachowaniem prywatności
- Jak Google i Intel zwiększają bezpieczeństwo Confidential Computing
- Prywatność a postęp – zwiększanie bezpieczeństwa dzięki poufnym obliczeniom w Google Cloud