SEC02-BP03 Sicheres Speichern und Verwenden von Secrets - Säule „Sicherheit“

SEC02-BP03 Sicheres Speichern und Verwenden von Secrets

Ein Workload muss seine Identität automatisch gegenüber Datenbanken, Ressourcen und Services von Drittanbietern authentifizieren können. Dazu dienen geheime Zugriffsanmeldeinformationen wie etwa API-Zugriffsschlüssel, Passwörter und OAuth-Tokens. Die Verwendung eines dedizierten Services zur Speicherung, Verwaltung und Rotation der Anmeldeinformationen hilft dabei, die Gefahr der Kompromittierung dieser Anmeldeinformationen zu verringern.

Gewünschtes Ergebnis: Implementierung eines Mechanismus für die sichere Verwaltung von Anwendungsanmeldeinformationen, der die folgenden Ziele erreicht:

  • Identifikation der für den Workload erforderlichen Secrets

  • Reduzierung der Anzahl der erforderlichen langfristigen Anmeldeinformationen durch ihren Austausch gegen kurzfristige Anmeldeinformationen, wo dies möglich ist

  • Einrichtung der sicheren Speicherung und der automatischen Rotation der verbleibenden langfristigen Anmeldeinformationen

  • Überwachung des Zugriffs auf in dem Workload vorhandene Secrets

  • Kontinuierliche Überwachung, um sicherzustellen, dass im Rahmen des Entwicklungsprozesses keine Secrets in den Quellcode eingebettet werden

  • Reduzieren der Gefahr unbeabsichtigter Offenlegungen von Anmeldeinformationen

Typische Anti-Muster:

  • keine rotierenden Anmeldeinformationen

  • Speichern langfristiger Anmeldeinformationen in Quellcode oder Konfigurationsdateien

  • Speichern von Anmeldeinformationen im Ruhezustand ohne Verschlüsselung

Vorteile der Nutzung dieser bewährten Methode:

  • Secrets werden im Ruhezustand und in Übertragung verschlüsselt gespeichert.

  • Organisation des Zugriffs auf Anmeldeinformationen über eine API (vorstellbar als Automat für Anmeldeinformationen)

  • Prüfung und Protokollierung des Zugriffs (Lese- und Schreibzugriff) auf Anmeldeinformationen

  • Trennung möglicher Problemquellen: Die Rotation der Anmeldeinformationen wird von einer separaten Komponente vorgenommen, die vom Rest der Architektur isoliert werden kann.

  • Secrets werden automatisch bei Bedarf an Softwarekomponenten verteilt und die Rotation erfolgt an einem zentralen Ort.

  • Der Zugriff auf Anmeldeinformationen kann detailliert kontrolliert werden.

Risikostufe, wenn diese bewährte Methode nicht eingeführt wird: hoch

Implementierungsleitfaden

Früher wurden Anmeldeinformationen für die Authentifizierung bei Datenbanken, APIs von Dritten, Tokens und andere Secrets möglicherweise in eingebettetem Quellcode oder in Umgebungsdateien gespeichert. AWS bietet mehrere Mechanismen, um diese Anmeldeinformationen sicher zu speichern, sie automatisch zu rotieren und ihre Verwendung zu prüfen.

Das beste Verfahren für die Verwaltung von Secrets besteht besteht darin, den Anweisungen zum Entfernen, Ersetzen und Rotieren zu folgen. Die sichersten Anmeldeinformationen sind diejenigen, die Sie nicht speichern, verwalten oder handhaben müssen. Möglicherweise gibt es Anmeldeinformationen, die für die Funktion des Workloads nicht mehr benötigt werden und sicher entfernt werden können.

Bei Anmeldeinformationen, die für die korrekte Funktion des Workloads weiterhin benötigt werden, besteht die Möglichkeit, langfristige Anmeldeinformationen durch temporäre oder kurzfristige zu ersetzen. So könnten Sie beispielsweise anstelle der Hartkodierung eines geheimen AWS-Zugriffsschlüssels diese langfristige Anmeldeinformation durch eine temporäre unter Verwendung von IAM-Rollen ersetzen.

Manche langfristigen Secrets können möglicherweise nicht entfernt oder ersetzt werden. Diese Secrets können in einem Service wie AWS Secrets Manager gespeichert werden, wo sie zentral aufbewahrt, verwaltet und regelmäßig rotiert werden.

Eine Prüfung des Quellcodes und der Konfigurationsdateien des Workloads kann verschiedene Arten von Anmeldeinformationen zutage fördern. Die folgende Tabelle fasst Strategien für den Umgang mit verbreiteten Arten von Anmeldeinformationen zusammen:

Credential type Description Suggested strategy
IAM access keys AWS IAM access and secret keys used to assume IAM roles inside of a workload Replace: Use IAM-Rollen assigned to the compute instances (such as Amazon EC2 or AWS Lambda) instead. For interoperability with third parties that require access to resources in your AWS-Konto, ask if they support Kontoübergreifender AWS-Zugriff. For mobile apps, consider using temporary credentials through Amazon Cognito-Identitätspools (Verbundidentitäten). For workloads running outside of AWS, consider IAM Roles Anywhere or AWS Systems Manager Hybride Aktivierungen.
SSH keys Secure Shell private keys used to log into Linux EC2 instances, manually or as part of an automated process Replace: Use AWS Systems Manager or EC2 Instance Connect to provide programmatic and human access to EC2 instances using IAM roles.
Application and database credentials Passwords – plain text string Rotate: Store credentials in AWS Secrets Manager and establish automated rotation if possible.
Amazon RDS and Aurora Admin Database credentials Passwords – plain text string Replace: Use the Secrets Manager-Integration mit Amazon RDS or Amazon Aurora. In addition, some RDS database types can use IAM roles instead of passwords for some use cases (for more detail, see IAM-Datenbankauthentifizierung).
OAuth tokens Secret tokens – plain text string Rotate: Store tokens in AWS Secrets Manager and configure automated rotation.
API tokens and keys Secret tokens – plain text string Rotate: Store in AWS Secrets Manager and establish automated rotation if possible.

Ein typisches Anti-Muster ist die Einbettung von IAM-Zugriffsschlüsseln in Quellcode, Konfigurationsdateien oder Mobil-Apps. Wenn ein IAM-Zugriffsschlüssel für die Kommunikation mit einem AWS-Service erforderlich ist, verwenden Sie temporäre (kurzfristige) Sicherheitsanmeldeinformationen. Diese kurzfristigen Anmeldeinformationen können über IAM-Rollen für EC2-Instances, Ausführungsrollen für Lambda-Funktionen, Cognito-IAM-Rollen für den mobilen Benutzerzugriff und IoT-Core-Richtlinien für IoT-Geräte bereitgestellt werden. Bei Verbindungen mit Drittparteien sollten Sie den Zugriff lieber über eine IAM-Rolle mit dem erforderlichen Zugriff auf die Ressourcen Ihres Kontos delegieren, anstatt einen IAM-Benutzer zu konfigurieren und der Drittpartei den geheimen Zugriffsschlüssel für diesen Benutzer zuzusenden.

Es gibt viele Fälle, in denen der Workload die Speicherung von Secrets erfordert, um mit anderen Services und Ressourcen zusammenwirken zu können. AWS Secrets Manager wurde speziell entwickelt, um solche Anmeldeinformationen sowie die Speicherung, Verwendung und Rotation von API-Tokens, Passwörtern und anderer Anmeldeinformationen sicher zu handhaben.

AWS Secrets Manager bietet fünf entscheidende Funktionen, die für die sichere Speicherung und Handhabung sensitiver Anmeldeinformationen sorgen: Verschlüsselung im Ruhezustand, Verschlüsselung in Übertragung, Umfassende Prüfungen, detaillierte Zugriffssteuerung und erweiterbare Rotation von Anmeldeinformationen. Andere Secret-Managementservices von AWS-Partnern oder lokal entwickelte Lösungen mit ähnlichen Funktionen und Sicherungen sind ebenfalls akzeptabel.

Implementierungsschritte

  1. Identifizieren Sie Code-Pfade mit hartkodierten Anmeldeinformationen mithilfe automatisierter Tools wie etwa Amazon CodeGuru.

    • Scannen Sie Ihre Code-Repositorys mit Amazon CodeGuru. Sobald die Prüfung abgeschlossen ist, filtern sie nach Type=Secrets in CodeGuru, um problematische Codezeilen zu finden.

  2. Identifizieren Sie Anmeldeinformationen, die entfernt oder ersetzt werden können.

    1. Identifizieren Sie Anmeldeinformationen, die nicht mehr benötigt werden, und markieren Sie sie zum Entfernen.

    2. Ersetzen Sie AWS-Geheimschlüssel, die in Quellcode eingebettet sind, durch IAM-Rollen, die mit den erforderlichen Ressourcen verbunden sind. Wenn sich ein Teil Ihres Workloads außerhalb von AWS befindet, er jedoch IAM-Anmeldeinformationen für den Zugriff auf AWS-Ressourcen benötigt, können Sie IAM Roles Anywhere oder AWS Systems Manager Hybride Aktivierungen verwenden.

  3. Integrieren Sie für andere langfristige Secrets von Dritten, die die Rotationsstrategie erfordern, Secrets Manager in Ihren Code, um die externen Secrets zur Laufzeit abzurufen.

    1. Die CodeGuru-Konsole kann automatisch ein Secret in Secrets Manager unter Verwendung der erkannten Anmeldeinformationen erstellen.

    2. Integrieren Sie den Secret-Abruf von Secrets Manager in Ihren Anwendungscode.

  4. Prüfen Sie Ihre Codebasis regelmäßig und wiederholen Sie dies, um sicherzustellen, dass dem Code keine neuen Secrets hinzugefügt wurden.

    • Erwägen Sie die Verwendung eines Tools wie etwa git-secrets, um zu vermeiden, dass neue Secrets in Ihr Quellcode-Repository eingebracht werden.

  5. Überwachen Sie die Secrets Manager-Aktivität auf Anzeichen für unerwartete Nutzungen, den unautorisierten Zugriff auf Secrets oder versuche, Secrets zu löschen.

  6. Reduzieren Sie menschliche Interaktionen mit Anmeldeinformationen. Schränken Sie den Zugriff zum Lesen, Schreiben und Ändern von Anmeldeinformationen auf eine für diesen Zweck dedizierte IAM-Rolle ein und erlauben Sie die Übernahme dieser Rolle nur einem kleinen Teil der betrieblichen Nutzer.

Ressourcen

Zugehörige bewährte Methoden:

Zugehörige Dokumente:

Zugehörige Videos:

Zugehörige Workshops: