Statystyki zabezpieczeń środowiska wykonawczego

1. Wprowadzenie

W tym module wdrożysz aplikację w klastrze Cloud Run i GKE oraz wyświetlisz statystyki zabezpieczeń dla wdrożenia w ramach usługi Software Delivery Shield Security.

Czego się nauczysz

  • Statystyki zabezpieczeń Artifact Registry
  • Statystyki zabezpieczeń Cloud Run
  • Stan zabezpieczeń GKE

2. Konfiguracja i wymagania

Konfigurowanie projektu Cloud

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Konfiguracja środowiska

Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

ecdc43ada29e91b.png

W Cloud Shell włącz interfejsy API wymagane w tym module:

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

Jeśli pojawi się prośba o autoryzację, kliknij „Autoryzuj”. aby kontynuować.

6356559df3eccdda.png

Powinien wyświetlić się komunikat o powodzeniu podobny do tego:

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

Uruchom polecenie, aby asynchronicznie utworzyć klaster GKE. Użyjemy go w dalszej części tego modułu:

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. Przygotowanie aplikacji

Najpierw przygotujesz prostą aplikację Node.js opartą na Node.js, która odpowiada na żądania HTTP.

W Cloud Shell utwórz nowy katalog o nazwie starter-nodejs, a następnie przejdź do tego katalogu:

mkdir starter-nodejs
cd starter-nodejs

Utwórz plik package.json, uruchamiając te polecenia:

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

Powyższy plik zawiera polecenie skryptu startowego i zależność od platformy aplikacji internetowej Express.

Następnie w tym samym katalogu utwórz plik index.js, uruchamiając te polecenia:

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie określonym przez zmienną środowiskową PORT. Aplikacja jest gotowa i możesz ją teraz skonteneryzować i wdrożyć.

4. Wdrażanie aplikacji Cloud Run

Uruchom to polecenie, aby wdrożyć aplikację:

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

Potwierdź utworzenie repozytorium Artifact Registry:

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

5. Artifact Registry i statystyki zabezpieczeń Cloud Build

Kompilacja zajmie kilka minut.

Otwórz Cloud Build i przejrzyj artefakty najnowszej kompilacji.

Interfejs Cloud Build w konsoli Google Cloud zawiera panel statystyk zabezpieczeń usługi Software Delivery Shield (Tarcza dostarczania oprogramowania), w którym wyświetlane są informacje o zabezpieczeniach związane z kompilacją, na przykład poziom SLSA, luki w zależnościach i pochodzenie kompilacji.

7d9fd2213f3704c4.png

Przejrzyj statystyki zabezpieczeń dla utworzonego obrazu kontenera. Kliknij link do przeskanowanych artefaktów, aby wyświetlić szczegółowe informacje o lukach w zabezpieczeniach tego obrazu w Artifact Registry.

Wróć do konsoli Cloud Shell i sprawdź, czy wdrożenie aplikacji Cloud Run zostało ukończone.

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. Statystyki zabezpieczeń Cloud Run

Cloud Run zawiera panel bezpieczeństwa (wersja testowa), który wyświetla statystyki zabezpieczeń łańcucha dostaw oprogramowania, takie jak informacje o zgodności na poziomie kompilacji SLSA, pochodzenie kompilacji i luki w zabezpieczeniach w działających usługach.

Otwórz Cloud Run i przejrzyj obserwacje dotyczące zabezpieczeń na karcie REVISIONY / ZABEZPIECZENIA.

62a9f5d26207e58e.png

Panel zawiera te informacje:

  • Tożsamość i szyfrowanie: adres e-mail domyślnego konta usługi Compute Engine i klucz szyfrowania używany do wdrożenia.
  • Poziom SLSA: ta kompilacja jest na poziomie SLSA poziomu 3, który określa poziom dojrzałości procesu tworzenia oprogramowania zgodny ze specyfikacją SLSA.
  • Luki w zabezpieczeniach: wszelkie luki w zabezpieczeniach wykryte w zależnościach aplikacji.
  • Szczegóły kompilacji: szczegóły kompilacji, takie jak kreator i link do wyświetlania logów.
  • Pochodzenie kompilacji: pochodzenie kompilacji, czyli zbiór możliwych do zweryfikowania metadanych kompilacji. Zawiera takie szczegóły jak skróty utworzonych obrazów, lokalizacje źródeł wejściowych, łańcuch narzędzi do kompilacji, kroki kompilacji i czas trwania kompilacji.

7. Stan zabezpieczeń GKE

GKE może ocenić stan zabezpieczeń kontenera i udzielać aktywnych wskazówek dotyczących ustawień klastra, konfiguracji zadań i luk w zabezpieczeniach. Zawiera panel stanu zabezpieczeń (wersja testowa), który skanuje klastry i zbiory zadań GKE, aby dostarczać wyczerpujące rekomendacje dotyczące poprawy stanu zabezpieczeń.

W następnych krokach wdrożysz aplikację w klastrze GKE i sprawdzisz statystyki zabezpieczeń w panelu stanu zabezpieczeń GKE.

Sprawdź, czy klaster jest gotowy, uruchamiając to polecenie:

gcloud beta container clusters list

Przykładowe dane wyjściowe:

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

Uzyskaj dane logowania i konfigurację klastra GKE:

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

Uruchom polecenie, aby wdrożyć aplikację za pomocą obrazu utworzonego w poprzednim kroku:

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

Zadania GKE powinny mieć zabezpieczoną konfigurację, która ogranicza powierzchnię ataku. Ręczne sprawdzanie na dużą skalę zbiorów zadań w klastrach pod kątem problemów z konfiguracją może być trudne. Za pomocą panelu stanu zabezpieczeń możesz automatycznie skanować konfigurację wszystkich uruchomionych zbiorów zadań w wielu klastrach i zwracać praktyczne, ocenione wyniki oraz sprawdzone rekomendacje, aby poprawić stan zabezpieczeń.

Włącz skanowanie konfiguracji zadań:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

Oprócz skanowania konfiguracji zbiorów zadań możesz też włączyć skanowanie pod kątem luk w zabezpieczeniach zbiorów zadań i sprawdzać wyniki w panelu stanu zabezpieczeń. Jest to zestaw funkcji zapewniających sprawdzone informacje i rekomendacje pozwalające zwiększyć bezpieczeństwo klastrów i zbiorów zadań GKE.

GKE automatycznie skanuje obrazy kontenerów w każdym odpowiednim podze działającym w klastrze GKE pod kątem znanych luk w zabezpieczeniach, korzystając z danych o lukach w zabezpieczeniach z publicznych baz danych CVE, takich jak NIST.

Jeśli w obrazach kontenerów zostanie znaleziona luka w zabezpieczeniach, GKE przypisuje ocenę ważności i wyświetla wyniki w panelu stanu zabezpieczeń w konsoli Google Cloud. GKE dodaje też wpisy do usługi Cloud Logging na potrzeby kontroli i śledzenia.

Włącz skanowanie pod kątem luk w zabezpieczeniach zbiorów zadań:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

Otwórz stronę Security Posture w GKE.

Poczekaj kilka minut na zakończenie kontroli zadania, a następnie sprawdź wyniki.

5b1b8158bc55ce67.png

Sprawdź potencjalne problemy z konfiguracją i zadania, których dotyczy problem.

58e6f4b6d8eaa99a.png

Dlaczego warto korzystać z panelu stanu zabezpieczeń

Panel stanu zabezpieczeń to podstawowe zabezpieczenie, które możesz włączyć w dowolnym kwalifikującym się klastrze GKE. Google Cloud zaleca korzystanie z panelu stanu zabezpieczeń we wszystkich klastrach z tych powodów:

  • Minimalne zakłócenia: funkcje nie zakłócają ani nie zakłócają uruchomionych zadań.
  • Rekomendacje dotyczące działań: panel stanu zabezpieczeń (jeśli jest dostępny) zawiera działania umożliwiające rozwiązanie wykrytych potencjalnych problemów. Obejmują one polecenia, które możesz uruchamiać, przykłady zmian w konfiguracji, które należy wprowadzić, oraz porady dotyczące sposobów ograniczania luk w zabezpieczeniach.
  • Wizualizacja: panel stanu zabezpieczeń zapewnia ogólną wizualizację potencjalnych problemów, które mają wpływ na klastry w projekcie. Zawiera wykresy i diagramy prezentujące postępy i potencjalny wpływ poszczególnych potencjalnych problemów.
  • Recenzje: GKE przypisuje ocenę ważności do wykrytych potencjalnych problemów na podstawie doświadczenia zespołów Google ds. bezpieczeństwa i standardów branżowych.
  • Logi zdarzeń podlegające kontroli: GKE dodaje wszystkie wykryte potencjalne problemy do usługi Logging, aby zwiększyć ich raportowanie i dostrzegalność.

8. Gratulacje!

Gratulacje! Ćwiczenie z programowania zostało ukończone.

Omówione zagadnienia:

  • Informacje o zabezpieczeniach dotyczące artefaktów kompilacji i aplikacji działających w Cloud Run i GKE

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwam projekt

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.

Ostatnia aktualizacja: 21.03.2023 r.