# Erzwingen von Artefaktbescheinigungen mit einer Kubernetes-Zugangssteuerung

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

> \[!NOTE] Stelle vor dem Fortfahren sicher, dass die Buildherkunft für Containerimages aktiviert ist, einschließlich des Festlegens des `push-to-registry`-Attributs bei der [`attest`-Aktion](https://github.com/actions/attest). Dies ist unter [Generieren von Buildherkunft für Containerimages](/de/actions/how-tos/secure-your-work/use-artifact-attestations/use-artifact-attestations#generating-build-provenance-for-container-images) dokumentiert. Dies ist erforderlich, damit der Richtliniencontroller den Nachweis überprüfen kann.

## Erste Schritte mit der Kubernetes-Zugangssteuerung

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

1. Den [Sigstore-Richtliniencontroller bereitstellen](#deploy-the-sigstore-policy-controller).
2. [GitHub `TrustRoot` und einen `ClusterImagePolicy` zu Ihrem Cluster hinzufügen](#add-the-github-trustroot-and-a-clusterimagepolicy).
3. [Die Richtlinie in Ihrem Namespace aktivieren](#enable-the-policy-in-your-namespace).

### Den Sigstore-Richtliniencontroller bereitstellen.

Der Sigstore-Richtliniencontroller wurde gepackt und über ein [Helm-Chart](https://github.com/sigstore/helm-charts)zur Verfügung gestellt. Stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind, bevor Sie beginnen:

* Ein Kubernetes-Cluster mit Version 1.27 oder höher
* [Helm](https://helm.sh/docs/intro/install/) 3.0 oder höher
* [kubectl](https://kubernetes.io/docs/tasks/tools/)

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

```bash copy
helm upgrade policy-controller --install --atomic \
  --create-namespace --namespace artifact-attestations \
  oci://ghcr.io/sigstore/helm-charts/policy-controller \
  --version 0.10.5
```

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

### Hinzufügen von 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 copy
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.7.0 \
 --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 Sie die 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:

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

Nachdem das Label hinzugefügt wurde, wird die GitHub Artefakt-Nachweisrichtlinie im Namespace durchgesetzt werden.

Alternativ können Sie Folgendes ausführen:

```bash copy
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 Glob-Mustern festgelegt werden, die den Imagenamen entsprechen. Die Globbing-Syntax nutzt die [filepath](https://pkg.go.dev/path/filepath#Match)-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 copy
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.7.0 \
 --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 Domain und dem Doppelstern-Glob verwenden, um alle Bildversionen abzugleichen: `index.docker.io/library/busybox**`.

Beachte, dass jedes Image, das du zulassen möchtest, ein passendes Glob-Muster in der \_ Liste\_ aufweist`policy.images`. Wenn ein Image keinem Muster entspricht, wird es abgelehnt. Wenn ein Bild mit `policy.images` und `policy.exemptImages` übereinstimmt, wird es außerdem abgelehnt.

### 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 copy
helm show values oci://ghcr.io/sigstore/helm-charts/policy-controller --version 0.10.5
```

Optionen für Vertrauensrichtlinien:

```bash copy
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.7.0
```

Weitere Informationen zum Sigstore-Richtliniencontroller finden Sie in der [Dokumentation zum Sigstore-Richtliniencontroller](https://docs.sigstore.dev/policy-controller/overview/).