Skip to main content

Erzwingen von Artefaktbescheinigungen mit einer Kubernetes-Zugangssteuerung

Verwenden Sie einen Steuerungscontroller, um Artefaktbescheinigungen in Ihrem Kubernetes-Cluster zu erzwingen.

Was ist eine Kubernetes-Zugangssteuerung?

Mit Artefaktbescheinigungen können Sie fälschungssichere Herkunfts- und Integritätsgarantien für die von Ihnen entwickelte Software erstellen. Personen, die Ihre Software nutzen, können wiederum überprüfen, wo und wie Ihre Software erstellt wurde.

Kubernetes-Zugangssteuerungen sind Plug-Ins, die das Verhalten des Kubernetes-API-Servers steuern. Sie werden häufig verwendet, um Sicherheitsrichtlinien und bewährte Methoden in einem Kubernetes-Cluster zu erzwingen.

Mit dem Open Source-Projekt des Sigstore-Richtliniencontrollers können Sie Ihrem Kubernetes-Cluster eine Zugangssteuerung hinzufügen, die Artefaktbescheinigungen erzwingen kann. Auf diese Weise können Sie sicherstellen, dass nur Artefakte mit gültigen Nachweisen bereitgestellt werden können.

Zum Installieren des Controllers bieten wir zwei Helm-Diagramme an: eines zum Bereitstellen des Sigstore-Richtliniencontrollers und eines zum Laden des GitHub-Vertrauensstamms und einer Standardrichtlinie.

Informationen zu Vertrauenswurzeln und -richtlinien

Der Sigstore-Richtliniencontroller ist in erster Linie mit Vertrauenswurzeln und Richtlinien konfiguriert, dargestellt durch die benutzerdefinierten Ressourcen TrustRoot und ClusterImagePolicy. TrustRoot stellt einen vertrauenswürdigen Verteilungskanal für das öffentliche Schlüsselmaterial dar, das zum Überprüfen von Nachweisen verwendet wird. ClusterImagePolicy stellt eine Richtlinie zum Erzwingen von Nachweisen für Bilder dar.

TrustRoot kann auch einen TUF-Repositorystamm enthalten, sodass Ihr Cluster kontinuierlich und sicher Aktualisierungen seines vertrauenswürdigen öffentlichen Schlüsselmaterials empfängt. Wenn nicht angegeben, verwendet ClusterImagePolicy standardmäßig das Schlüsselmaterial der Schlüsselmaterial der Open Source Sigstore Public Good Instance. Bei der Überprüfung der für private Repositorys generierten Nachweise muss ClusterImagePolicy auf GitHub TrustRoot verweisen.

Erste Schritte mit der Kubernetes-Zugangssteuerung

Um eine Zugangssteuerung zum Erzwingen von GitHub-Artefaktbescheinigungen einzurichten, müssen Sie:

  1. Den Sigstore-Richtliniencontroller bereitstellen.
  2. GitHub TrustRoot und einen ClusterImagePolicy zu Ihrem Cluster hinzufügen.
  3. Die Richtlinie in Ihrem Namespace aktivieren.

Den Sigstore-Richtliniencontroller bereitstellen.

Wir haben den Sigstore-Richtliniencontroler als über GitHub verteiltes Helm-Diagramm verpackt. Stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind, bevor Sie beginnen:

  • Ein Kubernetes-Cluster mit Version 1.27 oder höher
  • Helm 3.0 oder höher
  • kubectl

Installieren Sie zunächst das Helm-Diagramm, das den Sigstore-Richtliniencontroller bereitstellt:

Bash
helm upgrade policy-controller --install --atomic \
  --create-namespace --namespace artifact-attestations \
  oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \
  --version v0.10.0-github9

Dadurch wird der Richtliniencontroller im artifact-attestations-Namespace installiert. Zu diesem Zeitpunkt wurden keine Richtlinien konfiguriert, und es werden keine Nachweise erwzungen.

Hinzufügen des GitHub TrustRoot und ClusterImagePolicy

Nachdem der Richtliniencontroller bereitgestellt wurde, müssen Sie GitHub TrustRoot und ClusterImagePolicy zu Ihrem Cluster hinzufügen. Verwenden Sie dazu das Helm-Diagramm. Stellen Sie sicher, dass MY-ORGANIZATION durch den Namen Ihrer GitHub-Organisation (z. B. github oder octocat-inc) ersetzt wird.

Bash
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.6.2 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION

Sie haben nun den GitHub-Vertrauensstamm und eine Artefaktnachweisrichtlinie in Ihrem Cluster installiert. Diese Richtlinie lehnt Artefakte ab, die nicht aus Ihrer GitHub-Organisation stammen.

Aktivieren der Richtlinie in Ihrem Namespace

Warning

Diese Richtlinie wird erst erzwungen, wenn Sie angeben, auf welche Namespaces sie angewendet werden soll.

Jeder Namespace in Ihrem Cluster kann unabhängig Richtlinien erzwingen. Um die Durchsetzung in einem Namespace zu aktivieren, können Sie dem Namespace die folgende Bezeichnung hinzufügen:

metadata:
  labels:
    policy.sigstore.dev/include: "true"

Nachdem die Bezeichnung hinzugefügt wurde, wird die GitHub-Artefaktnachweisrichtlinie im Namespace durchgesetzt.

Alternativ können Sie Folgendes ausführen:

Bash
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true

Abgleichen von Images

Standardmäßig überprüft die mit dem Helm-Diagramm trust-policies installierte Richtlinie Nachweise für alle Images, bevor sie in den Cluster aufgenommen werden. Wenn Sie nur Nachweise für eine Teilmenge von Images durchsetzen möchten, können Sie mithilfe der Helm-Werte policy.images und policy.exemptImages eine Liste von Images angeben, mit denen ein Abgleich erfolgen soll. Diese Werte können auf eine Liste von Globmustern festgelegt werden, die den Imagenamen entsprechen. Die Globbing-Syntax nutzt die filepath-Semantik von Go und zusätzlich **, um alle Zeichensequenzen einschließlich Schrägstrichen abzugleichen.

Um z. B. Nachweise für Images durchzusetzen, die dem Muster ghcr.io/MY-ORGANIZATION/* entsprechen und busybox ohne gültigen Nachweis zulassen, können Sie Folgendes ausführen:

Bash
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.6.2 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION \
 --set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' \
 --set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'

Alle Muster müssen den vollqualifizierten Namen verwenden, auch wenn die Images von Docker Hub stammen. Wenn das Bild busybox in diesem Beispiel ausgenommen werden soll, müssen wir den vollständigen Namen einschließlich der Domäne und der Doppelstern-Glob angeben, um allen Bildversionen zu finden: index.docker.io/library/busybox**.

Beachten Sie, dass Images, die Sie zulassen möchten, ein passendes Globmuster in der Liste policy.images aufweisen müssen. Wenn ein Image keinem Muster entspricht, wird es abgelehnt. Wenn ein Bild mit policy.images und policy.exemptImages übereinstimmt, wird es außerdem abgelehnt.

Wenn dein GitHub Enterprise-Konto über eine Unterdomäne auf GHE.com verfügt, musst du für die vertrauenswürdige GitHub-Domäne einen Wert angeben. Dieser Wert wird verwendet, um die vertrauenswürdigen Materialien abzurufen, die mit der Datenresidenz-Region verknüpft sind, die Ihr GitHub Enterprise-Konto hosten. Dieser Wert kann gefunden werden, indem Sie sich mit dem gh-CLI-Tool bei Ihrem Enterprise-Konto anmelden und den folgenden Befehl ausführen:

Bash
gh api meta --jq .domains.artifact_attestations.trust_domain

Dieser Wert muss beim Installieren des trust-policies-Diagramms wie folgt hinzugefügt werden:

Bash
--set-json 'policy.trust.githubTrustDomain="YOUR-GHEC-TRUST-DOMAIN"'

Erweiterte Verwendung

Um den vollständigen Satz von Optionen anzuzeigen, die Sie mit dem Helm-Diagramm konfigurieren können, können Sie einen der folgenden Befehle ausführen. Für Richtliniencontrolleroptionen:

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github9

Für Vertrauensrichtlinienoptionen:

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2

Weitere Informationen zum Sigstore-Richtliniencontroller finden Sie in der Dokumentation zum Sigstore-Richtliniencontroller.