Datenmitbearbeiter müssen die folgenden Ressourcen einrichten, damit ihre vertraulichen Daten für eine Arbeitslast zugänglich sind:
Die verschlüsselten Daten selbst, die in Google Cloudgespeichert sind.
Dienstkonten, die diese Daten entschlüsseln können.
Attestationsüberprüfung mit einem Workload Identity-Pool (WIP). Nachdem eine Arbeitslast vom WIP autorisiert wurde, kann sie sich als Dienstkonto im Projekt eines Datenmitarbeiters ausgeben, um vertrauliche Daten abzurufen.
Außerdem müssen die Datenbearbeiter festlegen, wo die Ergebnisse der Arbeitslast des Confidential Space gespeichert werden und ob die angezeigten Daten eindeutig oder freigegeben sind. Sie können beispielsweise dasselbe Ergebnis in mehrere Cloud Storage-Buckets ausgeben, die den einzelnen Datenbearbeitern gehören.
Daten speichern
Sie können jeden Google Cloud -Dienst verwenden, der Daten speichert, um Ihre vertraulichen Daten zu hosten. Beispielsweise können Sie einen der folgenden Dienste verwenden:
Sie sollten dafür sorgen, dass diese Daten im Ruhezustand verschlüsselt sind, sei es mithilfe von integrierten Funktionen oder mithilfe von Diensten wie dem Cloud Key Management Service (Cloud KMS).
Dienstkonto zum Entschlüsseln vertraulicher Daten erstellen
Sie stellen Ihre vertraulichen Daten über Dienstkonten für Arbeitslasten in Confidential Space zur Verfügung und verringern so die Zugriffsrechte von Personen auf diese Daten.
Sie können beispielsweise vertrauliche Dateien in Cloud Storage mit Cloud KMS verschlüsseln und dann ein Dienstkonto erstellen, das zum Zugriff auf diese Daten und zum Entschlüsseln den entsprechenden Schlüssel hat.
Verbinden Sie dieses Dienstkonto dann mit einem WIP. Eine autorisierte Arbeitslast für einen Confidential Space in einem anderen Projekt kann dann dieses WIP verwenden, um die Identität des Dienstkontos zu übernehmen, das die Daten entschlüsselt, die entschlüsselten Daten abzurufen und zu verarbeiten.
Da Dienstkonten sowohl zum Entschlüsseln als auch zum Verarbeiten dieser vertraulichen Daten verwendet werden, ist die Sichtbarkeit der Daten auf ihre Inhaber beschränkt. Da die Arbeitslast in einer Confidential VM ausgeführt wird, sorgt die hardwarebasierte Speicherverschlüsselung dafür, dass Ihre Daten während der Nutzung privat bleiben. SSH wird auch auf Arbeitslast-VMs deaktiviert, die das Produktions-Image für Confidential Space verwenden. Das bedeutet, dass niemand auf die VM zugreifen kann, während sie ausgeführt wird.
Ein Beispiel dafür finden Sie unter Erste Confidential Space-Umgebung erstellen.
WIP und Anbieter für die Attestierungsvalidierung erstellen
Zum Schutz von Daten vor einem nicht vertrauenswürdigen Arbeitslastoperator implementiert Confidential Space einen Attestierungsprozess, der Änderungen an einem Arbeitslast-Image oder seiner TEE erkennt. Der Prozess beruht auf Shielded VM-Messungen von Measured Boot und erweiterten Laufzeiten und erfasst Messungen der Startsequenz in einem geschützten "extend-only"-Register im vTPM-Gerät (virtual Trusted Platform Module).
Der Attestierungsdienst von Confidential Space generiert OpenID Connect-Tokens (OIDC), die diese vTPM-Attestierungen in einer Form enthalten, die von einem WIP validiert werden kann. Dabei werden sie anhand von Richtlinien geprüft, die als Attributbedingungen zu einem Anbieter hinzugefügt werden. Diese Tokens werden von Google signiert, sind eine Stunde gültig und werden automatisch aktualisiert.
Wenn der WIP die Arbeitslast autorisiert, kann die Arbeitslast die Identität von Dienstkonten im Projekt übernehmen, um vertrauliche Daten zu entschlüsseln und abzurufen.
So richten Sie einen WIP und einen Anbieter ein:
Verbinden Sie das Dienstkonto für die Entschlüsselung mit der Rolle
iam.workloadIdentityUser
mit dem WIP.Erstellen Sie einen OIDC-Anbieter mit den folgenden Details:
Einen Aussteller-URI von
https://confidentialcomputing.googleapis.com/
.Eine zulässige Zielgruppe von
https://sts.googleapis.com
.Eine Attributzuordnung des Anbieters für
google.subject
mit dem Wertassertion.sub
.Attributbedingungen, mit denen die Attestierungen der Arbeitslast validiert werden. Informationen zu den verfügbaren Optionen finden Sie unter Attestierungsrichtlinie erstellen.
Attestierungsrichtlinie erstellen
Beim Erstellen eines WIP fügen Sie Attributbedingungen hinzu, die eine Arbeitslast erfüllen muss, um auf Ihre Daten zugreifen zu können. Für einen vertraulichen Gruppenbereich bilden diese Attributbedingungen Ihre Attestierungsrichtlinie.
Richtlinien werden in der Common Expression Language (CEL) geschrieben und bestehen aus einer Reihe von Behauptungen, die mit dem Operator &&
miteinander verknüpft werden können.
Im Folgenden finden Sie ein Beispiel für das Hinzufügen eines Anbieters zu einem Workload Identity-Pool mithilfe der gcloud CLI zusammen mit der Option attribute-condition
, die die Richtlinien definiert:
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
--location=global \
--workload-identity-pool=user-pool-name \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject=assertion.sub" \
--attribute-condition="assertion.submods.container.image_digest =='sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b' \
&& 'service-account@my-project.iam.gserviceaccount.com' in assertion.google_service_accounts \
&& assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes"
In diesem Beispiel muss eine externe Identität, die versucht, die Identität eines Dienstkontos zu übernehmen, das mit dem Workload Identity-Pool verbunden ist, die folgenden Details attestieren und deren Werte müssen mit den Richtlinienwerten übereinstimmen, damit die Authentifizierung erfolgreich ist:
Den Image-Digest des Arbeitslastcontainers
Die Adresse des Dienstkontos, das mit der VM der Arbeitslast verbunden ist
Diese
CONFIDENTIAL_SPACE
ist die Software, die auf der VM ausgeführt wird, mit allen integrierten Sicherheitsgarantien.Das Attribut „support“ für das Confidential Space-Produktions-Image
Attestierungs-Assertions
Die verfügbaren Behauptungen zum Erstellen einer Attestierungsrichtlinie sind in der folgenden Tabelle aufgeführt. Sie können Behauptungen validieren, die vom Confidential Space-Image, dem Arbeitslastcontainer und der VM gemacht wurden.
Bildbeschreibungen
Behauptung | Typ | Beschreibung |
---|---|---|
Interagiert mit:
|
Definierter String |
Prüft, ob das Confidential Space-Image die Debugging- oder Produktionsversion ist. Gültige Werte:
BeispieleMit dem folgenden Code wird überprüft, ob die Debugging-Version des Confidential Space-Images verwendet wird:
Mit dem folgenden Code wird überprüft, ob die Produktionsversion des Confidential Space-Images verwendet wird:
|
assertion.submods.confidential_space.support_attributes |
String-Array |
Prüft, ob die Sicherheitsversion der TEE ein Confidential Space-Produktions-Image ist. Für Debug-Images im Confidential Space ist kein Attribut „support“ festgelegt. Es gibt drei Supportattribute:
BeispielMit dem folgenden Code wird überprüft, ob eine stabile Version des Confidential Space-Images verwendet wird:
|
assertion.swname |
Definierter String |
Prüft die Software, die auf der attestierenden Entität ausgeführt wird. Der Wert ist immer Beispiel
|
assertion.swversion |
String-Array |
Verifiziert die Softwareversion des Confidential Space-Images. Wir empfehlen stattdessen die Verwendung von Beispiel
|
Container-Assertions
Behauptung | Typ | Beschreibung |
---|---|---|
Interagiert mit:
|
String-Array |
Verifiziert die CMD-Befehle und ‑Parameter, die im Arbeitslast-Image verwendet werden. BeispieleMit dem folgenden Code wird überprüft, ob der CMD des Arbeitslast-Images nicht überschrieben wurde:
Mit dem folgenden Code wird überprüft, ob
|
Interagiert mit:
|
JSON-Objekt |
Prüft, ob Umgebungsvariablen und ihre Werte explizit an den Container übergeben wurden. BeispielIm folgenden Code wird überprüft, ob die Umgebungsvariable
|
Interagiert mit:
|
String |
Prüft, ob der Arbeitslast-Operator Umgebungsvariablen im Container überschrieben hat. BeispieleMit dem folgenden Code wird überprüft, ob der Arbeitslastbearbeiter die Umgebungsvariable
Mit dem folgenden Code wird überprüft, ob der Arbeitslastoperator keine Umgebungsvariablen überschrieben hat:
|
assertion.submods.container.image_digest |
String |
Verifiziert den Image-Digest des Arbeitslastcontainers. Durch die Angabe dieser Bedingung können mehrere Parteien einer autorisierten Arbeitslast zustimmen, die auf ihre Daten zugreifen darf. Beispiel
|
assertion.submods.container.image_id |
String |
Verifiziert die Image-ID des Arbeitslastcontainers. Beispiel
|
Interagiert mit:
|
String |
Verifiziert den Speicherort des Arbeitslastcontainers, der über dem Confidential Space-Image ausgeführt wird. Beispiel
|
Interagiert mit:
|
JSON-Objekt |
Prüft, ob das Bild eine bestimmte Signatur hat oder mit einem öffentlichen Schlüssel und Signaturalgorithmus signiert ist. Durch die Angabe dieser Bedingung können mehrere Parteien einer autorisierten Arbeitslast zustimmen, die auf ihre Daten zugreifen darf. Die Behauptung kann die folgenden Elemente enthalten:
Beispiel
|
Interagiert mit:
|
Definierter String |
Prüft die Neustart-Richtlinie des Container-Launchers für den Fall, dass die Arbeitslast beendet wird. Gültige Werte:
Beispiel
|
VM-Behauptungen
Behauptung | Typ | Beschreibung |
---|---|---|
Interagiert mit:
|
String-Array |
Prüft, ob ein bestimmtes Dienstkonto mit der VM verbunden ist, auf der die Arbeitslast ausgeführt wird, oder mit Beispiel
|
assertion.hwmodel |
String |
Verifizierung der zugrunde liegenden Confidential Computing-Technologie. Folgende Plattformen werden unterstützt:
Beispiel
|
Interagiert mit:
|
Boolesch |
Prüft den Überwachungsstatus der attestierenden Entität. Beispiel
|
assertion.submods.gce.instance_id |
String |
Die VM-Instanz-ID wird überprüft. Beispiel
|
assertion.submods.gce.instance_name |
String |
Verifies the name of the VM instance. Beispiel
|
assertion.submods.gce.project_id |
String |
Prüft, ob auf der VM ein Google Cloud -Projekt mit der angegebenen Projekt-ID ausgeführt wird. Beispiel
|
assertion.submods.gce.project_number |
String |
Prüft, ob die VM in einem Google Cloud -Projekt mit der angegebenen Projektnummer ausgeführt wird. Beispiel
|
Interagiert mit:
|
String |
Prüft, ob die VM in der angegebenen Zone ausgeführt wird. Beispiel
|