# Best Practices für die Verwaltung von API-Geheimschlüsseln

Erfahren Sie, wie Sie geheime API-Schlüssel verwalten und mit offengelegten oder kompromittierten Schlüsseln umgehen.

Geheime API-Schlüssel sind eine Form von Kontoanmeldedaten, ähnlich wie Benutzername und Passwort. Im Gegensatz zu veröffentlichbaren Schlüsseln, die sicher in Webseiten und Apps eingebunden werden können, müssen geheime Schlüssel in Ihrer Serverumgebung verbleiben. Wenn eine unbefugte Person Ihren geheimen API-Schlüssel erhält, kann sie unbefugte Abbuchungen vornehmen, auf Kundendaten zugreifen oder Ihre Integration stören.

In diesem Leitfaden geht es um bestimmte Möglichkeiten, Schlüssel in Ihrer Server-Umgebung zu schützen. Eine Übersicht über die verschiedenen Arten von Schlüsseln, die Stripe unterstützt, finden Sie unter [API-Schlüssel](https://docs.stripe.com/keys.md).

## Schützen Sie geheime API-Schlüssel

Sie müssen Ihre geheimen API-Schlüssel in jeder Phase der Entwicklung sicher handhaben und speichern, um sie vor Offenlegung oder Kompromittierung zu schützen.

- **Geheime API-Schlüssel niemals in Quellcode einfügen**: Böswillige Akteurinnen und Akteure scannen öffentliche Repositorys kontinuierlich nach API-Schlüsseln von Stripe. Selbst private Repositorys können in Entwicklungsumgebungen offengelegt werden.
  - Verwenden Sie die Tools zum Verwalten von Geheimnissen Ihrer Plattform (z.&nbsp;B. einen [Secrets Vault](https://docs.stripe.com/keys-best-practices.md#use-a-secrets-vault)), um Ihrer Integrationscode mit API-Schlüsseln zu versorgen. Wenn Ihre Plattform keinen Geheimnisspeicher bereitstellt, verwenden Sie stattdessen Umgebungsvariablen.
  - Überprüfen Sie Ihren Quellcode, Ihre Konfigurationsdateien und CI/CD-Pipelines regelmäßig auf sensible Schlüssel, einschließlich Sandbox- und Organisations-API-Schlüsseln. Verwenden Sie einen Secret-Scanner mit gepflegten [Stripe-Mustern](https://docs.github.com/en/code-security/reference/secret-security/supported-secret-scanning-patterns). Wenn Sie einen sensiblen Schlüssel finden, gehen Sie davon aus, dass er [offengelegt und kompromittiert](https://docs.stripe.com/keys-best-practices.md#handling-compromised-keys) wurde.
  - Verwenden Sie in Ihrem Versionskontrollsystem einen Pre-Commit-Hook, um Commits abzulehnen, die von Ihrem Secret-Scanner erkannte Schlüssel enthalten.
  - Codeausschnitte in der Stripe-Dokumentation enthalten manchmal nur zu Illustrationszwecken Schlüssel. Fügen Sie keine echten Schlüssel in Ihren Code ein.
- **Betten Sie geheime API-Schlüssel niemals in Anwendungen ein**: Unbefugte können Anwendungen entpacken, um nach eingebetteten Schlüsseln zu suchen. Verwenden Sie für clientseitige Anwendungsfälle wie Client-Tools, SDKs und mobile Apps stattdessen [veröffentlichbare Schlüssel](https://docs.stripe.com/keys.md#obtain-api-keys).
- **Befolgen Sie das Prinzip der geringsten Berechtigungen**: Personen und Systeme dürfen *nur die Berechtigungen haben, die für die Ausübung ihrer Arbeit erforderlich sind*.
  - Legen Sie klare Richtlinien fest, welche Teammitglieder die Berechtigung zum Erstellen, Aktualisieren oder Lesen geheimer API-Schlüssel haben. Beschränken Sie den Zugriff auf diejenigen, die ihn benötigen, und überprüfen Sie die Schlüsselberechtigungen regelmäßig.
  - Halten Sie die Dokumentation zum Umgang mit geheimen API-Schlüsseln in Ihrem Unternehmen stets auf dem neuesten Stand. Führen Sie regelmäßig Schulungen durch, um Best Practices zu festigen.
- **Gehen Sie mit geheimen API-Schlüsseln sorgfältig um**: Wenn Sie einen geheimen API-Schlüssel im Stripe-Dashboard erstellen, wird er Ihnen nur einmal angezeigt. Speichern Sie den Schlüssel sofort im [Secrets Vault](https://docs.stripe.com/keys-best-practices.md#use-a-secrets-vault) Ihrer Plattform und speichern Sie ihn nirgendwo sonst. Wenn Ihre Plattform keinen Secrets Vault bereitstellt, können Sie den Schlüssel in einer Umgebungsvariable speichern.
  - Geben Sie geheime API-Schlüssel über die Tools zur Geheimnisverwaltung Ihrer Plattform weiter&nbsp;– nicht via E-Mail, Chat-Nachrichten oder Kundensupport-Nachrichten. **Stripe fragt Sie niemals nach Ihrem geheimen API-Schlüssel.**
  - Verwenden Sie [eingeschränkte API-Schlüssel](https://docs.stripe.com/keys-best-practices.md#limit-access) mit begrenzten Berechtigungen anstelle von uneingeschränkten API-Geheimschlüsseln.
- **Rotieren Sie geheime API-Schlüssel regelmäßig**: Legen Sie einen Prozess für die [Rotation Ihrer Stripe-API-Schlüssel fest](https://docs.stripe.com/keys.md#rolling-keys) und setzen Sie diesen konsequent um. Durch regelmäßige Rotation stellen Sie sicher, dass Sie wissen, wo jeder Schlüssel verwendet wird, und dass Ihr Team einen Schlüssel kurzfristig ersetzen kann. Erstellen Sie einen Notfallplan, damit Ihr Team im Falle einer Offenlegung oder Kompromittierung eines Schlüssels mit minimalen Auswirkungen auf Ihr Unternehmen reagieren kann.
- **Prüfen Sie die Logs von API-Anfragen, um verdächtige Aktivitäten zu überwachen.** Prüfen oder überwachen Sie die Logs von API-[Anfragen](https://docs.stripe.com/development/dashboard/request-logs.md) regelmäßig, um missbräuchlich verwendete API-Schlüssel proaktiv zu identifizieren. Stellen Sie sicher, dass Ihre Entwickler/innen keine Live-Schlüssel verwenden, wenn ein *Sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)-Schlüssel angemessen ist. Siehe [Sandbox versus Live-Modus](https://docs.stripe.com/keys.md#test-live-modes).

## API-Schlüssel sicher speichern

Speichern Sie keine eingeschränkten oder API-Geheimschlüssel in Ihrem Code, auch nicht in Code, der auf Ihren Servern verbleibt. Betrügerische Akteure durchsuchen öffentliche Codebasen kontinuierlich nach versehentlich offengelegten API-Schlüsseln. Wenn Ihre Entwicklerinnen und Entwickler Code mit Schlüsseln in ihren Entwicklungsumgebungen haben, kann ein kompromittiertes Entwicklerkonto zur Offenlegung von Schlüsseln führen.

Einige Stripe-Codebeispiele enthalten Sandbox-Schlüssel, damit sie sich sofort ausführen lassen. Wenn Sie Beispielcode kopieren, entfernen Sie diese Schlüssel und speichern Sie sie in einem [Secrets Vault](https://docs.stripe.com/keys-best-practices.md#use-a-secrets-vault). Wenn Ihre Plattform keinen Secrets Vault bereitstellt, können Sie die Schlüssel in Umgebungsvariablen speichern.

### Secrets Vault verwenden

Ein Secrets Vault speichert Anmeldedaten getrennt von Ihrem Code und stellt sie Ihren Anwendungen zur Laufzeit zur Verfügung. Ihr Code verweist auf einen Schlüssel nur über seinen Namen oder eine Referenz&nbsp;– der Wert erscheint nie in Quelldateien, CI-Konfigurationen oder Entwicklerumgebungen. Ein Vault verbirgt nicht nur Schlüsselwerte, sondern bietet auch ein vollständiges Audit-Log aller Zugriffe, Unterstützung für automatische Schlüsselrotation und die Möglichkeit, den Zugriff sofort zu widerrufen, ohne dass Ihre Anwendung neu bereitgestellt werden muss.

Die meisten Cloud-Plattformen und Infrastruktur-Tools verfügen über einen Secrets Vault. Verwenden Sie die Berechtigungsfunktionen Ihrer Plattform, um den Vault-Zugriff auf die Dienste zu beschränken, die ihn benötigen:

- **[AWS Secrets Manager](https://aws.amazon.com/secrets-manager/)**: Lässt sich mit IAM integrieren und unterstützt automatische Rotation.
- **[Google Cloud Secret Manager](https://cloud.google.com/secret-manager)**: Versionierte Geheimnisse mit detaillierten IAM-Berechtigungen.
- **[Azure Key Vault](https://azure.microsoft.com/en-us/products/key-vault/)**: Verwaltet Geheimnisse, Schlüssel und Zertifikate mit rollenbasierter Zugriffskontrolle.
- **[HashiCorp Vault](https://developer.hashicorp.com/vault)**: Selbst gehostet oder verwaltet; unterstützt dynamische Geheimnisse und Audit-Logging.

[Dieser Blogbeitrag](https://stripe.dev/blog/securing-stripe-api-keys-aws-automatic-rotation) zeigt, wie Sie einen Stripe-API-Schlüssel mithilfe vom AWS Secrets Manager speichern und automatisch rotieren.

### Legen Sie einen API-Schlüssel als Umgebungsvariable fest

Wenn Ihre Hosting-Plattform keinen Secrets Vault bereitstellt, stellen Sie Schlüssel über Umgebungsvariablen für Ihre Anwendung bereit. Einige Plattformen unterstützen die Markierung von Umgebungsvariablen als *sensibel*, sodass Sie diese nach dem Einrichten nicht mehr einsehen können. Ihre Anwendungen können die sensiblen Variablen weiterhin verwenden, aber sie können nicht über Ihren Webbrowser gestohlen werden.

Wenn Sie Stripe-Codebeispiele ausführen, legen Sie eine temporäre Variable für Ihre aktuelle Datenterminalsitzung fest. Die Umgebungsvariable wird gelöscht, wenn Sie das Datenterminal schließen.

#### Mac/Linux

```bash
export STRIPE_API_KEY=sk_test_...
```

### API-Schlüssel in Ihrem Code verwenden

Anstatt einen fest kodierten Schlüssel einzubetten, verweist Ihr Code auf API-Schlüssel über die Namen von Umgebungsvariablen.

#### Ruby

```ruby
client = Stripe::StripeClient.new(ENV["STRIPE_API_KEY"])
```

Wenn Sie Stripe-API-Schlüssel in Umgebungsvariablen speichern, achten Sie darauf, diese Variablen nicht Ihren Nutzer/innen zugänglich zu machen. Zeigen Sie beispielsweise keine Umgebungsvariablen auf Fehlerseiten an und stellen Sie Diagnosemodi nicht einem breiten Publikum zur Verfügung.

## API-Zugriff mit eingeschränkten API-Schlüsseln anpassen

Statt geheime API-Schlüssel mit umfassenden Zugriffsrechten zu nutzen, erstellen Sie [eingeschränkte API-Schlüssel](https://docs.stripe.com/keys/restricted-api-keys.md), um den Komponenten Ihrer Anwendungen bestimmte Berechtigungen zuzuweisen. Beispielsweise können Sie Ihrem Rechnungsstellungssystem die Fähigkeit zum Verwalten von Rechnungen erteilen, ohne weitere Zugriffsrechte zu gewähren.

Eingeschränkte API-Schlüssel helfen Ihnen, die potenziellen Auswirkungen einer Kompromittierung zu begrenzen. Wenn Sie beispielsweise einen Stripe-API-Schlüssel an einen Dritten weitergeben müssen, der Zahlungsanfechtungen überwacht, können Sie einen eingeschränkten API-Schlüssel erstellen, der Lesezugriff auf zutreffende Ressourcen in Ihrem Stripe-Konto gewährt und alles andere blockiert. Sollte der Dritte kompromittiert werden, wäre ein/e Angreifer/in, der Ihren eingeschränkten API-Schlüssel gestohlen hat, auf diese API-Aufrufe beschränkt.

## IP-Adressen beschränken, die API-Anfragen senden können

Wenn Ihr Dienst API-Anfragen von stabilen IP-Adressen sendet, können Sie Ihre Geheimschlüssel oder eingeschränkten API-Schlüssel auf diese Adressen beschränken. Wenn Ihre Plattform beispielsweise ein dediziertes NAT-Gateway oder eine andere Möglichkeit bietet, eine IP-Adresse oder einen IP-Adressbereich zu reservieren, können Sie Stripe so konfigurieren, dass API-Anfragen mit Ihren Schlüsseln von allen anderen Adressen blockiert werden.

Sie können API-Anfragen auch basierend auf der Autonomen Systemnummer (ASN), dem Land oder gängigen Bedrohungskategorien blockieren. Detaillierte Anweisungen finden Sie unter [Zugriffsrichtlinien](https://docs.stripe.com/keys.md#access-policies).

## Umgang mit kompromittierten API-Schlüsseln

Wenn ein eingeschränkter oder API-Geheimschlüssel offengelegt oder kompromittiert wird, rotieren Sie ihn sofort, auch wenn Sie nicht sicher sind, ob ihn jemand gesehen hat. Behandeln Sie jede Offenlegung als potenzielle Kompromittierung.

- *Offenlegung* bedeutet, dass der Schlüssel an einem Ort sichtbar wurde, an dem er nicht sichtbar sein sollte, z.&nbsp;B. in einem öffentlichen Repository, einer Protokolldatei oder einer E-Mail.
- *Kompromittierung* bedeutet, dass es Hinweise auf eine unbefugte Verwendung des Schlüssels gibt.

### Reagieren Sie auf eine Offenlegung oder Kompromittierung des Schlüssels

Wenn Sie feststellen, dass ein eingeschränkter oder API-Geheimschlüssel offengelegt oder kompromittiert wurde, befolgen Sie die Anweisungen auf [dieser Support-Seite](https://support.stripe.com/questions/protecting-against-compromised-api-keys), um den potenziellen Schaden für Ihr Unternehmen zu minimieren.

### Proaktiver Schutz für Stripe-Schlüssel

Wenn Stripe einen offengelegten Geheimschlüssel oder eingeschränkten API-Schlüssel erkennt, benachrichtigen wir Sie und bitten Sie, den Schlüssel zu rotieren. In einigen Fällen deaktiviert Stripe den Schlüssel proaktiv und benachrichtigt Sie über alle von uns ergriffenen Maßnahmen.

Stripe garantiert nicht, dass alle offengelegten oder kompromittierten Schlüssel erkannt werden. Die Befolgung dieser bewährten Verfahren hilft Ihnen, die Offenlegung von Schlüsseln zu verhindern und Ihre Integration mit Stripe sicher zu halten.

## Verwaltete API-Schlüssel

Einige Server-Plattformen oder Hosting-Anbieter/innen können für Ihre Kundschaft [Stripe-API-Schlüssel verwalten](https://docs.stripe.com/keys/managed-api-keys.md), einschließlich Bereitstellungs- und Rotationsschritte. Verwaltete API-Schlüssel verbleiben auf der Server-Plattform, die sie an Ihren serverseitigen Code liefert. Das [Stripe-Dashboard](https://dashboard.stripe.com/apikeys) listet Ihre verwalteten API-Schlüssel auf, zeigt aber keine vollständigen Schlüssel an.

Da verwaltete API-Schlüssel sensible Geheimnisse in einer Serverumgebung sind, befolgen Sie die Best Practices in diesem Leitfaden, um sie zu schützen. Sie dürfen verwaltete API-Schlüssel niemals fest in Ihrem serverseitigen Code kodieren und Umgebungsvariablen niemals direkt aus Ihrer Anwendung heraus offenlegen.

Wenn Ihre Server-Plattform verwaltete Stripe-API-Schlüssel für Ihre Anwendung als Umgebungsvariablen bereitstellt die Kennzeichnung bestimmter Umgebungsvariablen als *sensibel* unterstützt, um zusätzliche Schutzmaßnahmen auszulösen, markieren Sie alle Stripe-Schlüssel als sensibel.

Wenn Sie den Verdacht haben, dass ein verwalteter API-Schlüssel offengelegt oder kompromittiert wurde, [rotieren Sie ihn über das Stripe-Dashboard](https://docs.stripe.com/keys.md#rolling-keys) oder auf der Server-Plattform. Wenn Sie einen verwalteten API-Schlüssel im Stripe-Dashboard rotieren oder wenn Stripe erkennt, dass Ihr Schlüssel kompromittiert wurde und ihn ablaufen lässt, um Ihr Stripe-Konto zu schützen, synchronisieren wir ihn automatisch in Ihrem Namen mit Ihrer Server-Plattform. Sie müssen den Schlüssel nicht an zwei Stellen ändern.

Wenn sich Ihre verwalteten API-Schlüssel ändern, müssen Sie die entsprechenden serverseitigen Anwendungen in der Regel neu bereitstellen, es sei denn, Ihre Server stellt sie automatisch neu bereit.

## See also

- [API-Schlüssel](https://docs.stripe.com/keys.md)
- [Schutz vor kompromittierten API-Schlüsseln](https://support.stripe.com/questions/protecting-against-compromised-api-keys)
