Informacje o tym ćwiczeniu (w Codelabs)
1. Omówienie
Poufalna przestrzeń umożliwia bezpieczne udostępnianie danych wielu stronom i współpracę, a jednocześnie pozwala organizacjom zachować poufność danych. Oznacza to, że organizacje mogą współpracować ze sobą, zachowując przy tym kontrolę nad swoimi danymi i chroniąc je przed nieuprawnionym dostępem.
Środowisko poufne umożliwia tworzenie scenariuszy, w których chcesz czerpać korzyści z zbierania i analizowania danych wrażliwych, często podlegających przepisom, przy jednoczesnym zachowaniu nad nimi pełnej kontroli. Dzięki platformie Confidential Space organizacje mogą osiągnąć wzajemną wartość dzięki agregowaniu i analizowaniu 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 znajomość Google Compute Engine ( codelab), poufnych maszyn wirtualnych, kontenerów i repozytoriów zdalnych.
- Podstawowa znajomość Cloud KMS ( codelab)
- Podstawowa znajomość kont usługi, federacji tożsamości zadań i warunków atrybutów.
Czego się nauczysz
- Jak skonfigurować niezbędne zasoby Cloud do obsługi Confidential Space
- Jak uruchomić zadanie w poufnej maszynie wirtualnej z obrazem maszyny wirtualnej Poufna przestrzeń
- Jak autoryzować dostęp do zasobów chronionych na podstawie atrybutów kodu zbioru zadań (co), środowiska Confidential Space (gdzie) i konta, które wykonuje zbiór zadań (kto).
W tym laboratorium programistycznym skonfigurujesz prywatną przestrzeń między bankami Primus i Secundus, aby określić 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 w chmurze, klucze KMS, pule tożsamości obciążenia oraz konta usług banków Primus i Secundus. Primus Bank i Secundus Bank przechowują dane klientów w zasobnikach Cloud Storage i szyfrują je za pomocą kluczy usług zarządzania kluczami w chmurze.
- 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. Bank Primus tworzy kod zbioru zadań.
- Krok 3. Utwórz obciążenie, które zawiera 2 polecenia wiersza poleceń: jedno do zliczania klientów z podanej lokalizacji, a drugie do znajdowania wspólnych klientów banków Primus i Secundus. Praca zostanie przygotowana przez Primus Bank i spakowana w obraz Dockera. Ten obraz Dockera zostanie opublikowany w Artifact Registry.
- Krok 4. Autoryzuj zadanie. Bank Primus używałby puli tożsamości zadań, aby zezwalać zadaniom na dostęp do danych klientów na podstawie atrybutów dotyczących tego, kto wykonuje zadanie, co robi to zadanie i gdzie jest wykonywane.
- Krok 5. Gdy praca zostanie uruchomiona, poprosi o dostęp do zasobów w chmurze dostawców danych (Primus Bank i Secundus Bank), oferując token usługi weryfikatora atestacyjnym z roszczeniami dotyczącymi pracy i środowiska. Jeśli roszczenia dotyczące pomiaru zadań 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óre ma uprawnienia dostępu do odpowiednich zasobów w chmurze. Zasoby w chmurze będą dostępne tylko dla zadań uruchomionych w Poufnej przestrzeni.
- Krok 5a. Wykonaj pierwszy zestaw zadań, który zlicza klientów Primus Bank z określonych lokalizacji. W przypadku tego obciążenia bank Primus byłby współpracownikiem pod względem danych i autorem obciążenia, który przekazywałby zaszyfrowaną listę klientów do obciążenia działającego w przestrzeni poufnej. Bank Secundus będzie operatorem zadań i będzie wykonywać zadania w Poufnej przestrzeni.
- Krok 5(b): uruchom drugi zestaw zadań, który wyszukuje wspólnych klientów banków Primus i Secundus. W przypadku tego zadania Primus Bank i Secundus Bank są partnerami w zakresie danych. Zaszyfrowane listy klientów są przekazywane do zadań wykonywanych w Poufnej przestrzeni. Bank Secundus znów będzie operatorem zbioru zadań. Ta praca będzie też autoryzowana przez bank Secundus, ponieważ musi mieć dostęp do zaszyfrowanych list klientów banku Secundus, aby znaleźć wspólnych klientów. W tym przypadku bank Secundus autoryzowałby zadanie do uzyskiwania dostępu do danych klientów na podstawie atrybutów dotyczących tego, kto uruchamia zadanie, co ono robi i gdzie jest uruchamiane (jak wspomniano w kroku 4 w przypadku banku Primus).
2. Konfigurowanie zasobów Cloud
Zanim zaczniesz
- Skopiuj to repozytorium, używając tego polecenia, aby pobrać wymagane skrypty używane w tym samouczku.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Zmień katalog tego Codelab.
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 CodeLab. 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 przypadku swoich projektów.
- 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 dla nazw zasobów, jak opisano poniżej, za pomocą tego polecenia. Możesz zastąpić nazwy zasobów za pomocą tych zmiennych (np.
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'
). - Te zmienne możesz ustawić za pomocą nazw zasobów chmurowych w projekcie Primus. Jeśli zmienna jest ustawiona, używane jest odpowiadające jej istniejące zasobów w chmurze z projektu Primus. Jeśli zmienna nie jest ustawiona, nazwa zasobu chmury zostanie wygenerowana na podstawie nazwy projektu, a nowy zasób chmury zostanie utworzony w ramach:
| Zasobnik, który przechowuje plik danych klienta Primus Bank. |
| Pula tożsamości zadań (WIP) 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ę weryfikatora atestu; |
| Konto usługi Primus Bank, którego |
| Klucz KMS używany do szyfrowania danych przechowywanych w |
| Klucz KMS, który zostanie użyty do utworzenia klucza szyfrowania |
| Repozytorium artefaktów, do którego zostanie przesłany obraz Dockera zadania. |
- Te zmienne możesz ustawić za pomocą nazw istniejących zasobów w chmurze w projekcie Secundus. Jeśli zmienna jest ustawiona, używane jest odpowiednie istniejące zasobów w chmurze z projektu 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 elementów:
| Zbiornik, który przechowuje plik danych klientów Secundus Bank |
| Pula tożsamości zadań (WIP) 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ę weryfikatora atestu. |
| Konto usługi Secundus Bank, którego |
| Klucz KMS używany do szyfrowania danych przechowywanych w |
| Klucz KMS, który służy do tworzenia klucza szyfrującego |
| Zasobnik, w którym są przechowywane wyniki zbioru zadań. |
| Nazwa obrazu kontenera zbioru zadań. |
| Tag obrazu kontenera zbioru zadań. |
| Konto usługi, które ma uprawnienia dostępu do maszyny wirtualnej poufnej, na której działa obciążenie. |
- W tym Codelab używamy kilku artefaktów:
primus_customer_list.csv
: plik zawierający dane klientów Primus Bank. Oto przykładowy plik użyty w tym laboratorium programistycznym.secundus_customer_list.csv
: plik zawierający dane klientów Secundus Bank. Oto przykładowy plik użyty w tym laboratorium programistycznym.- W przypadku tych 2 projektów musisz mieć określone uprawnienia:
- Aby wykonać te czynności, musisz mieć uprawnienia administratora Cloud KMS, administratora Storage, administratora rejestru artefaktów, administratora konta usługi i administratora pul Workload Identity w Uprawnieniach.
$PRIMUS_PROJECT_ID
- Aby użyć funkcji
$SECUNDUS_PROJECT_ID
, musisz mieć uprawnienia administratora Compute, administratora Storage, administratora kont usługi, administratora Cloud KMS, administratora pul tożsamości pracowników w Uprawnieniach oraz administratora zabezpieczeń (opcjonalnie). - Uruchom poniższy skrypt, aby ustawić pozostałe nazwy zmiennych na wartości oparte na identyfikatorze projektu.
source config_env.sh
Konfigurowanie zasobów chmury w Primus Bank
W przypadku Primus Bank wymagane są te zasoby chmury. Aby skonfigurować zasoby dla Primus Bank, uruchom ten skrypt:
- Zasobnik Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET
) do przechowywania zaszyfrowanego pliku danych klienta Primus Bank. - Klucz szyfrujący (
$PRIMUS_ENC_KEY
) i kluczyk ($PRIMUS_ENC_KEYRING
) w KMS do szyfrowania pliku danych klienta Primus Bank. - puli tożsamości zadań (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) do weryfikowania roszczeń na podstawie warunków atrybutów skonfigurowanych w ramach dostawcy; - Konto usługi (
$PRIMUS_SERVICE_ACCOUNT
) przypisane do wspomnianego 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
), odczytu 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 chmury w Secundus Bank
W przypadku banku Secundus wymagane są te zasoby w chmurze. Aby skonfigurować zasoby banku Secundus, uruchom ten skrypt. W ramach tych czynności zostaną utworzone te zasoby:
- Zasobnik Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET
) do przechowywania zaszyfrowanego pliku danych klienta banku Secundus. - Klucz szyfrowania (
$SECUNDUS_ENC_KEY
) i kluczyk ($SECUNDUS_ENC_KEYRING
) w KMS do szyfrowania pliku danych Secundus Bank. - puli tożsamości zadań (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) do weryfikowania roszczeń na podstawie warunków atrybutów skonfigurowanych w ramach dostawcy; - Konto usługi (
$SECUNDUS_SERVICE_ACCOUNT
) przypisane do wspomnianego wyżej puli tożsamości zadań ($SECUNDUS_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
). - Zasobnik Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET
) do przechowywania wyniku wykonania zbioru zadań przez Secundus Bank.
./setup_secundus_bank_resources.sh
3. Tworzenie zadań
Tworzenie konta usługi zadania
Teraz utwórz konto usługi dla obciążenia z wymaganymi rolami i uprawnieniami, jak opisano 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 zadania ($WORKLOAD_SERVICE_ACCOUNT
) będzie mieć przypisane te role:
- Przypisz rolę
confidentialcomputing.workloadUser
do konta usługi zadania . Pozwoli to na wygenerowanie tokena weryfikacji przez konto użytkownika. - Przypisz do konta usługi zadania rolę
logging.logWriter
. Dzięki temu środowisko poufnej przestrzeni może zapisywać logi w Cloud Logging oprócz konsoli szeregowej, dzięki czemu logi są dostępne po zakończeniu działania maszyny wirtualnej. objectViewer
do odczytu danych z zasobnika$PRIMUS_INPUT_STORAGE_BUCKET
w chmurze.objectViewer
do odczytu danych z zasobnika$SECUNDUS_INPUT_STORAGE_BUCKET
w chmurze.objectAdmin
, aby zapisać wyniki zbioru zadań w zasobniku Cloud Storage$SECUNDUS_RESULT_STORAGE_BUCKET
.
./create_workload_service_account.sh
Tworzenie zbioru zadań
Na tym etapie utworzysz obraz Dockera dla obciążenia używanego w tym samouczku. Zadania to prosta aplikacja w GoLang, która:
- Zlicza klientów w określonej lokalizacji geograficznej.
- Znajduje wspólnych klientów banków Primus i Secundus na podstawie list klientów przechowywanych w odpowiednich zasobnikach w chmurze.
Uruchom ten skrypt, aby utworzyć zadanie, w ramach którego wykonywane są te czynności:
- Utwórz repozytorium artefaktów (
$PRIMUS_ARTIFACT_REPOSITORY
) należące do Primus Bank, w którym zostanie opublikowane zadanie. - Wygeneruj kod i zaktualizuj go, podając nazwy wymaganych zasobów. Kod zadania użyty w tym laboratorium kodu znajdziesz tutaj.
- Kompiluj kod i pakuj go w obraz Dockera. Odpowiadający plik Dockerfile znajdziesz tutaj.
- Opublikuj obraz Dockera w usłudze Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) należącej do Primus Bank. - Przyznaj kontu usługi
$WORKLOAD_SERVICE_ACCOUNT
uprawnienie odczytu dla repozytorium Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY
).
./create_workload.sh
4. Autoryzowanie i uruchamianie zbiorów zadań
Autoryzowanie zbioru zadań
Bank Primus chce autoryzować obciążenia do uzyskiwania dostępu do danych klientów na podstawie atrybutów tych zasobów:
- Co: kod, który został zweryfikowany
- Gdzie: środowisko, które jest bezpieczne
- Kto: zaufany operator
Primus używa federacji tożsamości zadań, aby egzekwować zasady dostępu na podstawie tych wymagań.
Federacja tożsamości zadań umożliwia określenie warunków atrybutów. Te warunki ograniczają tożsamości, które mogą uwierzytelniać się w puli tożsamości zadań (WIP). Aby przedstawić pomiary i wdrożyć zasady, możesz dodać usługę weryfikatora autentyczności do puli tożsamości zadań jako dostawcę puli tożsamości zadań.
Pula tożsamości zadań została już utworzona wcześniej w ramach kroku konfiguracji zasobów w chmurze. Teraz bank Primus utworzy nowego dostawcę puli tożsamości zadań OIDC. Określony --attribute-condition
autoryzuje dostęp do kontenera zbioru zadań. Wymagania:
- Co: najnowsze
$WORKLOAD_IMAGE_NAME
przesłane do repozytorium$PRIMUS_ARTIFACT_REPOSITORY
. - Gdzie: 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 projektu w fazie roboczej utworzonego dla banku Primus, bank Secundus chce autoryzować zbiory zadań do uzyskiwania dostępu do danych klientów na podstawie:
- Co: obciążenie.
- Gdzie: środowisko poufnej przestrzeni.
- Kto: konto (
$WORKLOAD_SERVICE_ACCOUNT
), na którym jest wykonywane zadanie.
Aby określić, czy należy zezwolić na dostęp, Primus Bank używa roszczenia image_reference
, które zawiera tag obrazu. Mają kontrolę nad zdalnym repozytorium, więc mogą mieć pewność, że otagują tylko te obrazy, które nie ujawniają ich danych.
Bank Secundus nie kontroluje repozytorium, z którego pobiera obraz, więc nie może bezpiecznie założyć, że jest to obraz banku. Zamiast tego decyduje się na autoryzację dostępu do zadania na podstawie jego image_digest
. W przeciwieństwie do image_reference
, który Primus Bank może zmienić, aby wskazywał na inny obraz, Primus Bank nie może spowodować, aby image_digest
wskazywał na obraz inny niż ten, który Secundus Bank zweryfikował w poprzednim kroku.
Zanim utworzymy dostawców puli tożsamości zadań, zbieramy informacje image_digest
dla obrazu kontenera zadań, które będą używane 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 zbiorów zadań
W ramach tego kroku Secundus Bank będzie wykonywać zadania w Poufnej przestrzeni. To zadanie otrzyma tokeny dostępu z puli tożsamości zadań Primus i puli tożsamości zadań Secundus, aby odczytać i odszyfrować dane klientów banku Primus i banku Secundus.
Wymagane argumenty TEE są przekazywane za pomocą flagi metadanych. Argumenty dla kontenera zbioru zadań są przekazywane za pomocą części flagi „tee-cmd
”. Wynik wykonania zbioru zadań zostanie opublikowany w $SECUNDUS_RESULT_STORAGE_BUCKET
.
Uruchamianie pierwszego zadania
W ramach pierwszego wykonania zbioru zadań zostanie zliczeni klienci banku Primus z lokalizacji podanej w argumentach kontenera zbioru zadań. Jak widać poniżej, pierwsze obciążenie wykona polecenie „count-location
”, a wynik zostanie zapisany w miejscu $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\"]""
Wyświetl wyniki
W projekcie Secundus sprawdź wyniki pierwszego zadania. Zaczekaj 3–5 minut na zakończenie wykonywania zadania i uzyskanie wyniku w zasobach chmurowych.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Wynik powinien wynosić 3
, ponieważ jest to liczba osób z Seattle wymienionych w pliku primus_customer_list.csv
.
Uruchamianie drugiego zbioru zadań
W ramach drugiego wykonania obciążenia znajdziemy wspólnych klientów banków Primus Bank i Secundus Bank. Jak widać poniżej, drugi typ obciążenia wykona polecenie „list-common-customers
”, a jego wynik zostanie zapisany w miejscu $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\"]""
Wyświetl wyniki
W projekcie Secundus wyświetl wyniki drugiego zbioru zadań. Zaczekaj 3–5 minut na zakończenie wykonywania zadania i uzyskanie wyniku w zasobach chmurowych.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Wynikiem powinno być to: lista klientów wspólnych dla banków Primus i Secundus.
Dane wyjściowe:
Eric
Clinton
Ashley
Cooper
Uruchamianie nieautoryzowanego zbioru zadań
wygasa umowa banku Primus Bank, która zezwala bankowi Secundus Bank na dostęp do danych; Bank Primus aktualizuje warunek atrybutu, aby zezwolić maszynom wirtualnym z kontem usługi należącym do nowego partnera, banku Tertius.
Primus Bank zmienia dostawcę puli Workload Identity
W $PRIMUS_PROJECT_ID
zaktualizuj warunek atrybutu dla dostawcy tożsamości Attestation Verifier, aby autoryzować zadania w nowej lokalizacji.
- Ustaw projekt na $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Wyeksportuj identyfikator projektu GCP 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ług zbioru zadań banku Secundus. Teraz zezwoli na konta 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_accounts
jest zmieniony na'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.
. Zamiast autoryzowania konta usługi zadań z banku Secundus będzie teraz autoryzowane konto usługi zadań z banku Tertius.
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"
Ponownie uruchom zadanie
Gdy bank Secundus próbuje uruchomić pierwotne zadanie, nie udaje mu się to. Aby wyświetlić błąd, usuń pierwotny plik wyników i instancję maszyny wirtualnej, a następnie spróbuj ponownie uruchomić obciążenie.
Usuwanie istniejącego pliku wyników i instancji maszyny wirtualnej
- Ustaw projekt jako 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ń poufną maszynę wirtualną.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
Uruchamianie nieautoryzowanego zadania:
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 zadań zobaczysz 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 obciążenie, aby wysłać całą listę klientów banku Secundus Bank do zasobnika należącego do banku Primus Bank, to próba zakończy się niepowodzeniem, ponieważ wynik podsumowania złośliwego obciążenia będzie inny niż wynik podsumowania obrazu autoryzowanego w puli tożsamości obciążenia banku Secundus Bank.
5. Czyszczenie
Tutaj znajdziesz skrypt, który możesz wykorzystać do wyczyszczenia zasobów utworzonych w ramach tego ćwiczenia. W ramach tego czyszczenia zostaną usunięte te zasoby:
- Zasobnik Cloud Storage Primus Bank (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - Konto usługi Primus Bank (
$PRIMUS_SERVICE_ACCOUNT
). - Repozytorium artefaktów Primus Bank, które zawiera podpisy obrazów (
$PRIMUS_COSIGN_REPOSITORY
). - Pula tożsamości zadań Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Konto usługi zadań banku Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Zasobnik Cloud Storage banku Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
). - Użytkownik usługowy banku Secundus (
$SECUNDUS_SERVICE_ACCOUNT
). - Repozytorium artefaktów banku Secundus, które zawiera podpisy obrazów (
$SECUNDUS_COSIGN_REPOSITORY
). - Pula tożsamości zadań banku Secundus(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
). - Konto usługi zadań Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT
). - Instancje obliczeniowe zbioru zadań.
- Zasobnik wyników banku Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
). - Repozytorium artefaktów Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY
).
./cleanup.sh
Gdy skończysz eksplorować, możesz usunąć projekt.
- Otwórz konsolę Cloud Platform.
- Wybierz projekt, który chcesz wyłączyć, a następnie u góry kliknij „Usuń”. Spowoduje to zaplanowanie usunięcia projektu.
Gratulacje
Gratulacje! Udało Ci się ukończyć zajęcia.
Dowiedz się, jak chronić udostępnione dane, zachowując ich poufność, za pomocą przestrzeni poufnej.
Co dalej?
Sprawdź te podobne laboratoria programistyczne…
- Ćwiczenie z programowania dotyczące podpisanego obrazu kontenera
- Jak przeprowadzać transakcje z zasobami cyfrowymi przy użyciu obliczeń wielostronnych i prywatnych pokoi
- Analizowanie poufnych danych za pomocą poufnych przestrzeni
Więcej informacji
- Czujesz się odizolowany? Confidential Computing na ratunek
- Poufna obróbka danych w GCP
- Poufna przestrzeń: przyszłość współpracy z zachowaniem prywatności
- Jak Google i Intel zwiększają bezpieczeństwo poufnego przetwarzania danych
- Prywatność a postęp – zwiększanie bezpieczeństwa dzięki szyfrowaniu danych w Google Cloud