Best Practices für die sichere Verwaltung von Anmeldeinformationen mit der AWS CLI

Erfahren Sie die maßgeblichen Best Practices zur Absicherung Ihrer AWS CLI-Anmeldeinformationen. Dieser Leitfaden behandelt die Lade-Reihenfolge von Anmeldeinformationen, den korrekten Einsatz von Konfigurationsdateien, Umgebungsvariablen und, entscheidend, wie IAM-Rollen und AWS SSO genutzt werden können, um das Risiko der Speicherung langlebiger statischer Zugriffsschlüssel zu eliminieren. Implementieren Sie diese Strategien, um eine robuste Sicherheit in Ihren AWS-Automatisierungs- und Management-Workflows zu gewährleisten.

41 Aufrufe

Beste Praktiken für die sichere Verwaltung von Anmeldeinformationen mit der AWS CLI

Die sichere Verwaltung von Anmeldeinformationen ist von größter Bedeutung, wenn über die Command Line Interface (CLI) mit Amazon Web Services (AWS) interagiert wird. Zugriffsschlüssel (Access Key ID und Secret Access Key) gewähren programmatischen Zugriff auf Ihre Cloud-Ressourcen, wodurch deren Kompromittierung ein erhebliches Sicherheitsrisiko darstellt. Dieser Artikel beschreibt entscheidende Best Practices für die Speicherung, Verwaltung und Nutzung dieser Anmeldeinformationen, um die Exposition zu minimieren und eine robuste Sicherheitsposition bei der Automatisierung von Aufgaben oder der Verwaltung von Ressourcen über die CLI aufrechtzuerhalten.

Die AWS CLI greift auf bestimmte Methoden zurück, um Anmeldeinformationen zu finden. Das Verständnis dieser Methoden – von Konfigurationsdateien über Umgebungsvariablen bis hin zu IAM-Rollen – ist der erste Schritt zur Sicherung Ihrer Umgebung. Wir werden die empfohlene Reihenfolge der Priorität untersuchen und moderne, sicherere Alternativen zum Hardcoding von Geheimnissen hervorheben.

Verstehen der AWS CLI Anmeldeinformations-Ladereihenfolge

Die AWS CLI löst Anmeldeinformationen anhand einer definierten Hierarchie auf. Das Wissen um diese Reihenfolge hilft Ihnen zu verstehen, wo die CLI zuerst nach Anmeldeinformationen sucht, und stellt sicher, dass Ihre beabsichtigte, sicherste Konfiguration Vorrang hat.

Die CLI prüft Anmeldeinformationen in folgender Reihenfolge (von höchster zu niedrigster Priorität):

  1. Befehlszeilenoptionen: Anmeldeinformationen, die direkt über Flags (--access-key-id und --secret-access-key) übergeben werden.
  2. Umgebungsvariablen: Anmeldeinformationen, die in der aktuellen Shell-Sitzung festgelegt sind.
  3. Anmeldeinformationsprozess: Die Ausgabe eines konfigurierten Anmeldeinformationsprozesses (oft verwendet für SSO oder externe Tools).
  4. AWS Anmeldeinformations-Provider-Kette: Diese Kette prüft die folgenden Elemente in der angegebenen Reihenfolge:
    a. Anmeldeinformationen einer IAM-Rolle, die der laufenden EC2-Instanz oder dem ECS-Task zugewiesen ist.
    b. Anmeldeinformationen, die in der gemeinsamen Anmeldedatei (~/.aws/credentials) gespeichert sind.
  5. Konfigurationsdatei: Wenn keine Anmeldeinformationen gefunden werden, stoppt die CLI die Suche.

Sicherheitstipp: Die Nutzung von Befehlszeilen-Flags wird für den regelmäßigen Gebrauch generell nicht empfohlen, da der Befehlverlauf (.bash_history) sensible Informationen preisgeben kann.

1. Sichern von Anmeldeinformationen in Konfigurationsdateien (~/.aws/credentials)

Standardmäßig speichert die AWS CLI Anmeldeinformationen in der gemeinsamen Anmeldedatei, die sich normalerweise unter ~/.aws/credentials befindet. Obwohl praktisch, muss diese Datei geschützt werden.

Dateischutz und Berechtigungen

Es ist unerlässlich, den Lesezugriff auf diese Datei einzuschränken. Unter Linux/macOS setzen Sie die Berechtigungen so, dass nur der Besitzer die Datei lesen oder schreiben kann:

chmod 600 ~/.aws/credentials

Verwenden von Profilen zur Trennung

Die Verwendung unterschiedlicher Profile ermöglicht es Ihnen, Anmeldeinformationen für verschiedene Umgebungen (z. B. Entwicklung, Staging, Produktion) oder verschiedene Konten zu trennen. Dies verhindert versehentliche umgebungsübergreifende Aktionen.

Beispiel ~/.aws/credentials:

[default]
aws_access_key_id = AKIABCDEFGHIJKLMNO
aws_secret_access_key = xYzdEfGhIjKlMnOpQrStUvWxYz1234567890

[production-user]
aws_access_key_id = AKIA9876543210ZYXWVU
aws_secret_access_key = aBcDeFgHiJkLmNoPqRsTuVwXyZ9876543210

Wenn Sie ein benanntes Profil verwenden, müssen Sie es mit dem Flag --profile angeben:

aws s3 ls --profile production-user

2. Nutzung von Umgebungsvariablen

Umgebungsvariablen bieten eine dynamische Möglichkeit, Anmeldeinformationen für die CLI-Sitzung bereitzustellen, ohne sie auf die Festplatte zu schreiben. Dies wird oft für temporären Zugriff oder in Skriptumgebungen bevorzugt, in denen das Schreiben auf die Festplatte eingeschränkt oder unerwünscht ist.

Legen Sie die folgenden Variablen in Ihrer Shell-Sitzung fest:

export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"

Wichtiger Hinweis zur Priorität: Anmeldeinformationen, die über Umgebungsvariablen gesetzt werden, überschreiben immer diejenigen, die in der ~/.aws/credentials-Datei gefunden werden, da sie in der Anmeldeinformations-Ladereihenfolge höher stehen.

Sicherheitshinweis: Seien Sie vorsichtig beim Exportieren von Umgebungsvariablen, insbesondere in gemeinsamen Terminals oder Skripten, die protokolliert werden könnten. Entfernen Sie sie immer sofort nach der Verwendung:
bash unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY

3. Die sicherste Methode: IAM-Rollen (Instance Profiles/Web Identity)

Für Workloads, die auf AWS-Infrastruktur laufen (wie EC2-Instanzen, Lambda-Funktionen oder ECS-Tasks), ist die sicherste Praxis, niemals statische Anmeldeinformationen zu verwenden. Nutzen Sie stattdessen IAM-Rollen.

IAM-Rollen ermöglichen es Ihnen, der Ressource über den Instanz-Metadatenservice temporäre, automatisch rotierende Sicherheitsanmeldeinformationen zuzuweisen. Die AWS CLI erkennt und verwendet diese Anmeldeinformationen automatisch, ohne dass sie jemals auf der Festplatte oder in Umgebungsvariablen gespeichert werden.

So funktioniert es:

  1. Eine EC2-Instanz wird mit einer zugehörigen IAM-Rolle gestartet.
  2. Die auf dieser Instanz laufende CLI fragt den Instanz-Metadatenservice (IMDS) nach temporären Anmeldeinformationen ab.
  3. Die CLI verwendet diese temporären Anmeldeinformationen für alle nachfolgenden API-Aufrufe.

Dadurch wird das Risiko, das mit langlebigen Zugriffsschlüsseln verbunden ist, vollständig eliminiert.

4. Nutzung des Anmeldeinformationsprozesses und SSO

Die moderne Anmeldeinformationsverwaltung verlässt sich zunehmend auf externe Authentifizierungsanbieter, die oft über die credential_process-Konfiguration integriert werden.

AWS SSO (Single Sign-On)

AWS SSO bietet eine einheitliche Möglichkeit, den Zugriff über mehrere Konten und Rollen hinweg mithilfe bestehender Identitätsanbieter (IdPs) zu verwalten. Die AWS CLI lässt sich nahtlos mit SSO integrieren und abstrahiert die Verwaltung temporärer Sitzungstoken.

Um SSO zu nutzen, führen Sie zuerst den Anmeldebefehl aus:

aws sso login --profile <profilname>

Dadurch wird ein Browserfenster zur Authentifizierung geöffnet. Nach erfolgreicher Anmeldung speichert die CLI die notwendigen Sitzungstoken und nutzt oft intern den credential_process-Mechanismus, um Token automatisch zu aktualisieren, sodass Sie keine rohen Geheimschlüssel verwalten müssen.

Konfiguration von credential_process

Sie können die CLI so konfigurieren, dass ein externes Tool (wie ein Vault-Agent oder ein SSO-Helfer) aufgerufen wird, um Anmeldeinformationen dynamisch abzurufen. Dies wird in der Konfigurationsdatei angegeben:

Beispiel ~/.aws/config:

[profile my-vault-profile]
region = us-west-2
credential_process = /usr/local/bin/my-vault-cli get-aws-creds --profile my-vault-profile

Diese Methode ist entscheidend, wenn Sie sich mit Geheimnisverwaltungs-Tools wie HashiCorp Vault integrieren.

Zusammenfassung und Checkliste der Best Practices

Um die Sicherheit Ihrer AWS CLI-Operationen zu maximieren, halten Sie sich an diese Kernprinzipien:

  • Prinzip der geringsten Rechte: Stellen Sie sicher, dass alle IAM-Benutzer und -Rollen nur die für ihre Aufgaben unbedingt erforderlichen Berechtigungen haben.
  • Bevorzugen Sie Rollen gegenüber Schlüsseln: Verwenden Sie immer IAM-Rollen (Instance Profiles), wenn Sie innerhalb der AWS-Infrastruktur arbeiten.
  • Verwenden Sie SSO: Nutzen Sie für die menschliche interaktive Nutzung AWS SSO, um den Zugriff auf mehrere Konten zu verwalten.
  • Schlüssel niemals hartkodieren: Vermeiden Sie es, Zugriffsschlüssel direkt in Skripte, Quellcode oder den Befehlsverlauf einzufügen.
  • Schützen Sie die Anmeldedatei: Beschränken Sie die Dateisystemberechtigungen (chmod 600) für ~/.aws/credentials.
  • Rotieren Sie Schlüssel regelmäßig: Wenn statische Schlüssel verwendet werden müssen, erzwingen Sie einen strengen Rotationsplan.

Durch die Bevorzugung dynamischer Methoden zur Anmeldeinformationsbeschaffung wie IAM-Rollen und SSO gegenüber statischen Zugriffsschlüsseln, die auf der Festplatte gespeichert sind, reduzieren Sie die Angriffsfläche Ihres AWS CLI-Einsatzes erheblich.