Attestierungs-Assertions


Weitere Informationen zur Verwendung von Attestierungsaussagen finden Sie unter Attestierungsrichtlinie erstellen.

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, vom Arbeitslastcontainer und von der VM gemacht wurden.

Bildbeschreibungen

Behauptung Typ Beschreibung

assertion.dbgstat

Interagiert mit:

Definierter String

Prüft, ob das Confidential Space-Image die Debugging- oder Produktionsversion ist.

Gültige Werte:

  • enable: Prüfen, ob das Debug-Image verwendet wird.
  • disabled-since-boot: Prüfen, ob das Produktions-Image verwendet wird.
Beispiele

Mit dem folgenden Code wird überprüft, ob die Debugging-Version des Confidential Space-Images verwendet wird:

assertion.dbgstat == "enable"

Mit dem folgenden Code wird überprüft, ob die Produktionsversion des Confidential Space-Images verwendet wird:

assertion.dbgstat == "disabled-since-boot"
assertion.submods.confidential_space.support_attributes String-Array

Prüft, ob die Sicherheitsversion der TEE ein Confidential Space-Produktions-Image ist. Für Debug-Confidential Space-Images ist kein Supportattribut festgelegt.

Es gibt drei Supportattribute:

  • LATEST: Dies ist die neueste Version des Bildes und wird unterstützt. Das Bild LATEST ist auch STABLE und USABLE.
  • STABLE: Diese Version des Images wird unterstützt und auf Sicherheitslücken überwacht. Ein STABLE-Bild ist auch USABLE.
  • USABLE: Ein Image mit nur diesem Attribut wird nicht mehr unterstützt und nicht mehr auf Sicherheitslücken überwacht. Sie gehen dabei auf eigenes Risiko vor.
Beispiel

Mit dem folgenden Code wird überprüft, ob eine stabile Version des Confidential Space-Images verwendet wird:

"STABLE" in assertion.submods.confidential_space.support_attributes
assertion.swname Definierter String

Prüft die Software, die auf der attestierenden Entität ausgeführt wird. Der Wert ist immer CONFIDENTIAL_SPACE.

Beispiel
assertion.swname == "CONFIDENTIAL_SPACE"
assertion.swversion String-Array

Verifiziert die Softwareversion des Confidential Space-Images. Wir empfehlen stattdessen die Verwendung von assertion.submods.confidential_space.support_attributes, um die Ausrichtung auf die neueste Version eines Bildes vorzunehmen.

Beispiel
int(assertion.swversion[0]) == 230103

Container-Assertions

Behauptung Typ Beschreibung

assertion.submods.container.cmd_override

Interagiert mit:

String-Array

Verifiziert die CMD-Befehle und ‑Parameter, die im Arbeitslast-Image verwendet werden.

Beispiele

Mit dem folgenden Code wird überprüft, ob der CMD des Arbeitslast-Images nicht überschrieben wurde:

size(assertion.submods.container.cmd_override) == 0

Mit dem folgenden Code wird überprüft, ob program der einzige Inhalt in den CMD-Überschreibungen ist:

assertion.submods.container.cmd_override == ['program']

assertion.submods.container.env

Interagiert mit:

JSON-Objekt

Prüft, ob Umgebungsvariablen und ihre Werte explizit an den Container übergeben wurden.

Beispiel

Im folgenden Code wird überprüft, ob die Umgebungsvariable example-env-1 auf value-1 und example-env-2 auf value-2 festgelegt ist.

assertion.submods.container.env == {"example-env-1": "value-1", "example-env-2": "value-2"}

assertion.submods.container.env_override

Interagiert mit:

String

Prüft, ob der Arbeitslast-Operator Umgebungsvariablen im Container überschrieben hat.

Beispiele

Mit dem folgenden Code wird überprüft, ob der Arbeitslastbearbeiter die Umgebungsvariable example nicht überschrieben hat:

!has(assertion.submods.container.env_override.example)

Mit dem folgenden Code wird überprüft, ob der Arbeitslastoperator keine Umgebungsvariablen überschrieben hat:

size(assertion.submods.container.env_override) == 0
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_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id String

Verifiziert die Image-ID des Arbeitslastcontainers.

Beispiel
assertion.submods.container.image_id == "sha256:652a44b0e911271ba07cf2915cd700fdfa50abd62a98f87a57fdebc59843d93f"

assertion.submods.container.image_reference

Interagiert mit:

String

Verifiziert den Speicherort des Arbeitslastcontainers, der über dem Confidential Space-Image ausgeführt wird.

Beispiel
assertion.submods.container.image_reference == "us-docker.pkg.dev/PROJECT_ID/WORKLOAD_CONTAINER:latest"

assertion.submods.container.image_signatures

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:

  • key_id: Der Hexadezimal-Fingerabdruck des öffentlichen Schlüssels. Führen Sie den folgenden Befehl aus, um den Fingerabdruck abzurufen:

    openssl pkey -pubin -in public_key.pem -outform DER | openssl sha256

    Dabei ist public_key.pem Ihr öffentlicher Schlüssel im PEM-Format.

  • signature: Die Signatur über einer Nutzlast, die dem signierten Container zugeordnet ist und dem Format für die einfache Signatur entspricht.
  • signature_algorithm: Der Algorithmus, mit dem der Schlüssel signiert wird. Eines der folgenden Betriebssysteme:

    • RSASSA_PSS_SHA256 (RSASSA-PSS mit einem SHA-256-Digest)
    • RSASSA_PKCS1V15_SHA256 (RSASSA-PKCS1 v1_5 mit SHA-256-Digest)
    • ECDSA_P256_SHA256 (ECDSA auf der P-256-Kurve mit einem SHA-256-Digest)
Beispiel
assertion.swname == 'CONFIDENTIAL_SPACE' && ['ECDSA_P256_SHA256:PUBLIC_KEY_FINGERPRINT'].exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)) && 'serviceaccount.iam.gserviceaccount.com' in assertion.google_service_accounts"

assertion.submods.container.restart_policy

Interagiert mit:

Definierter String

Prüft die Neustart-Richtlinie des Container-Launchers für den Fall, dass die Arbeitslast beendet wird.

Gültige Werte:

  • Never (Standard)
  • Always
  • OnFailure
Beispiel
assertion.submods.container.restart_policy == "Never"

VM-Behauptungen

Behauptung Typ Beschreibung

assertion.google_service_accounts

Interagiert mit:

String-Array

Prüft, ob ein bestimmtes Dienstkonto mit der VM verbunden ist, auf der die Arbeitslast ausgeführt wird, oder mit tee-impersonate-service-accounts in den VM-Metadaten aufgelistet wurde.

Beispiel
workload-service-account@my-project.iam.gserviceaccount.com in assertion.google_service_accounts
assertion.hwmodel String

Verifizierung der zugrunde liegenden Confidential Computing-Technologie. Folgende Plattformen werden unterstützt:

Beispiel
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

Interagiert mit:

Boolesch

Prüft den Überwachungsstatus der attestierenden Entität.

Beispiel
assertion.submods.confidential_space.monitoring_enabled.memory == true
assertion.submods.gce.instance_id String

Die VM-Instanz-ID wird überprüft.

Beispiel
assertion.submods.gce.instance_id == "0000000000000000000"
assertion.submods.gce.instance_name String

Verifies the name of the VM instance.

Beispiel
assertion.submods.gce.instance_name == "workload-vm"
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_id == "project-id"
assertion.submods.gce.project_number String

Prüft, ob die VM in einem Google Cloud -Projekt mit der angegebenen Projektnummer ausgeführt wird.

Beispiel
assertion.submods.gce.project_number == "00000000000"

assertion.submods.gce.zone

Interagiert mit:

  • Arbeitslastoperator: Der Wert für --zone .
String

Prüft, ob die VM in der angegebenen Zone ausgeführt wird.

Beispiel
assertion.submods.gce.zone == "us-central1-a"