Früher oder später verlangt ein externes Tool von Ihnen "einen AWS-Schlüssel": ein Kontrollpanel, ein Backup-System, ein Monitoring. Die Versuchung ist groß, den Schlüssel Ihres Administrator-Benutzers zu kopieren. Tun Sie das niemals. Wer diesen Schlüssel hat, kann alles tun, was Sie tun können, bis hin zum Löschen des ganzen Kontos. Richtig ist, einen separaten IAM-Benutzer mit einer Richtlinie, die nur die konkreten Aktionen erlaubt, die dieses Tool braucht, anzulegen und ihm seinen Schlüssel zu geben.
Wir machen das aus AWS CloudShell, dem Terminal, das in die Web-Konsole integriert ist, weil es vier Befehle zum Kopieren und Einfügen sind und das Ergebnis exakt ist. Auf Ihrem Computer muss nichts installiert werden.
Bevor Sie anfangen: was die Begriffe bedeuten
- IAM
- Der AWS-Dienst, der verwaltet, wer was in Ihrem Konto tun darf: Benutzer, Schlüssel und Berechtigungen.
- IAM-Benutzer
- Eine Identität innerhalb Ihres AWS-Kontos, getrennt von Ihrer eigenen, der Sie nur die nötigen Rechte geben. Kann für eine Person oder ein Programm sein.
- Richtlinie
- Die Liste der Berechtigungen, geschrieben in einem Textformat namens JSON: welche Aktionen erlaubt sind und worauf. Die Anleitung liefert sie Ihnen fertig.
- Zugriffsschlüssel
- Das "Benutzer und Passwort" für Programme: zwei Zeichenketten (Kennung und Geheimnis), mit denen ein Tool im Namen dieses Benutzers mit AWS spricht.
- CloudShell
- Ein Terminal (schwarzer Bildschirm, in den man Befehle tippt), das in die AWS-Web-Konsole integriert ist. Nichts zu installieren: öffnen, und es ist schon mit Ihrem Konto verbunden.
- Minimale Rechte
- Die Idee, jedem Tool nur das Nötigste zu geben. Sickert der Schlüssel durch, bleibt der Schaden darauf begrenzt.
- ARN
- Der vollständige und eindeutige Name von allem in AWS, in der Form arn:aws:... Dient dazu, sich ohne Verwechslung darauf zu beziehen.
- Rolle
- Eine Alternative zum Benutzer mit Schlüssel: das Tool "leiht sich" eine temporäre Berechtigung, ohne dass ein dauerhaftes Passwort existiert. Sicherer, wenn das Tool es unterstützt.
Schritt für Schritt
Entscheiden Sie, welche Aktionen das Tool braucht
Bevor Sie etwas schreiben, machen Sie die Liste. Ein Panel, das Lightsail-Maschinen verwaltet, braucht zum Beispiel: die Maschinen und ihren Status ansehen, starten, stoppen und neu starten, und vielleicht Snapshots erstellen und ansehen. Es muss keine Maschinen erstellen oder löschen, keine Abrechnung sehen und keine Benutzer anfassen. Jede Aktion, die nicht auf der Liste steht, ist eine Aktion, die Sie nicht erlauben. Wenn das Tool seriös ist, sagt es Ihnen genau, welche Rechte es verlangt; verlangt es "AdministratorAccess", seien Sie misstrauisch.
Öffnen Sie CloudShell
Klicken Sie in der AWS-Konsole auf das Terminal-Symbol in der oberen Leiste (CloudShell) oder suchen Sie es über den Namen. Es braucht einige Sekunden zum Starten. Sie haben dann ein Linux-Terminal mit dem Werkzeug
aws, das mit Ihren aktuellen Anmeldedaten konfiguriert ist; alles, was Sie dort tun, tun Sie also als der Benutzer, mit dem Sie in der Konsole angemeldet sind (und der IAM verwalten dürfen muss).Schreiben Sie die Richtlinie
Legen Sie eine Datei mit der Richtlinie im JSON-Format an. Dieses Beispiel erlaubt, Lightsail-Maschinen anzusehen, zu starten, zu stoppen und neu zu starten sowie ihre Snapshots zu verwalten, sonst nichts. Fügen Sie den ganzen Block in CloudShell ein:
cat > politica.json <<'FIN' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "lightsail:GetInstances", "lightsail:GetInstance", "lightsail:GetInstanceState", "lightsail:GetInstanceMetricData", "lightsail:GetRegions", "lightsail:StartInstance", "lightsail:StopInstance", "lightsail:RebootInstance", "lightsail:GetInstanceSnapshots", "lightsail:GetInstanceSnapshot", "lightsail:CreateInstanceSnapshot", "lightsail:DeleteInstanceSnapshot" ], "Resource": "*" }] } FINJede Aktion heißt
servicio:Operación. Soll das Tool nur ansehen dürfen, entfernen Sie die Zeilen mit Start, Stop, Reboot, Create und Delete. Für EC2, S3 oder RDS haben die Aktionen andere Namen, aber die Mechanik ist identisch. In Lightsail lassen sich die meisten Aktionen nicht auf eine bestimmte Maschine beschränken, deshalb istResourcehier*; in EC2 oder S3 können Sie die genaue Kennung der Ressource angeben.Erstellen Sie Richtlinie und Benutzer und verbinden Sie sie
Drei Befehle. Ändern Sie den Namen, wenn Sie wollen, aber er sollte sagen, wofür er dient:
aws iam create-policy --policy-name PanelMaquinas --policy-document file://politica.json aws iam create-user --user-name panel-maquinas CUENTA=$(aws sts get-caller-identity --query Account --output text) aws iam attach-user-policy --user-name panel-maquinas \ --policy-arn arn:aws:iam::$CUENTA:policy/PanelMaquinasDer erste Befehl gibt den ARN der Richtlinie zurück; der dritte setzt ihn mit Ihrer Kontonummer wieder zusammen, damit Sie ihn nicht kopieren müssen. Beachten Sie, dass wir dem Benutzer kein Konsolenpasswort geben: er existiert nur für den Zugriffsschlüssel.
Erzeugen Sie den Zugriffsschlüssel
aws iam create-access-key --user-name panel-maquinasDie Antwort enthält zwei Werte:
AccessKeyId(beginnt mit AKIA) undSecretAccessKey. Das Geheimnis wird nur dieses eine Mal angezeigt. Kopieren Sie es direkt in das Tool, das es verwenden wird. Fügen Sie es nicht in eine E-Mail, einen Chat oder ein geteiltes Dokument ein. Wenn Sie es verlieren, ist das kein Problem: Sie löschen diesen Schlüssel und erstellen einen neuen.Löschen Sie die Datei und prüfen Sie
rm politica.json aws iam list-attached-user-policies --user-name panel-maquinasEs darf nur
PanelMaquinaserscheinen. Konfigurieren Sie das Tool mit dem Schlüssel und testen Sie eine erlaubte Aktion (Maschinen ansehen) und eine nicht erlaubte (eine erstellen): die zweite muss mit "not authorized" fehlschlagen. Dieser Fehler ist der Beweis, dass Sie gute Arbeit geleistet haben.
Was schiefgehen kann
Das Tool meldet, es habe kein Recht für etwas, das Sie erlauben wollen
In der Richtlinie fehlt eine Aktion. Die Fehlermeldung von AWS sagt genau, welche (User ... is not authorized to perform: lightsail:GetBundles). Fügen Sie sie dem JSON hinzu und aktualisieren Sie die Richtlinie mit aws iam create-policy-version --set-as-default, oder bearbeiten Sie sie in der IAM-Konsole. Fügen Sie nur diese eine Aktion hinzu, öffnen Sie die Tür nicht weiter.
Ich habe das Geheimnis an einer Stelle eingefügt, an der es nicht sein sollte
Betrachten Sie es als durchgesickert. In CloudShell: aws iam delete-access-key --user-name panel-maquinas --access-key-id AKIA... und erstellen Sie einen neuen. Da der Benutzer minimale Rechte hat, war der mögliche Schaden gering; genau das ist der Witz an der ganzen Sache.
Der dritte Befehl schlägt beim ARN fehl
Vielleicht hat Ihr Konsolenbenutzer kein Recht für sts:GetCallerIdentity (selten) oder der Name der Richtlinie hat einen Tippfehler. Kopieren Sie den ARN, den der erste Befehl zurückgegeben hat, und fügen Sie ihn von Hand in --policy-arn ein.
Wäre eine Rolle nicht besser als ein Benutzer?
Ja, wenn das Tool es unterstützt: eine IAM-Rolle, die das Tool aus seinem eigenen AWS-Konto übernimmt, hat keinen Schlüssel, der durchsickern könnte, und die Anmeldedaten laufen von selbst ab. Fragen Sie Ihren Anbieter, ob er "Zugriff per Rolle" oder "cross-account role" unterstützt. Wenn nicht, ist der Benutzer mit minimalen Rechten die zweitbeste Option, und viel besser als der Administrator-Schlüssel.
In Simplio
In Simplio müssen Sie die Richtlinie nicht schreiben: in der Hilfe kreuzen Sie an, was Sie erlauben wollen (nur ansehen, ohne Firewall, ohne Terminal, eine Region ...), und Simplio erzeugt das JSON und das komplette Skript zum Einfügen in CloudShell, das den fertigen Schlüssel zurückgibt. Und wenn Sie Schlüssel lieber vermeiden, unterstützt Simplio die Verbindung per Rolle, mit temporären Anmeldedaten, die nach einer Stunde ablaufen. Der Schlüssel wird verschlüsselt gespeichert und nie wieder angezeigt.
Dasselbe, in AWS und in Simplio
| In der AWS-Konsole | In Simplio | |
|---|---|---|
| Die Richtlinie schreiben | Den genauen Namen jeder AWS-Aktion und das JSON-Format kennen | Kästchen ankreuzen (nur ansehen, ohne Firewall, ohne Terminal, eine Region): das JSON entsteht von selbst |
| Benutzer, Richtlinie und Schlüssel erstellen | CloudShell, 4 Befehle, 15 Minuten beim ersten Mal | Das von der Hilfe erzeugte Skript in CloudShell einfügen: 2 Minuten |
| Wenn Sie keine Schlüssel wollen | Eine kontoübergreifende Rolle von Hand entwerfen | Verbindung per Rolle mit einem ARN, den Simplio für Sie erzeugt |