Ich stöbere wirklich in AWS herum und versuche herauszufinden, was ich hier vermisse. Ich möchte, dass ein IAM-Benutzer Dateien aus einem S3-Bucket herunterladen kann, ohne die Dateien nur vollständig öffentlich zugänglich zu machen, aber mir wird der Zugriff verweigert. Wenn jemand erkennen kann, was los ist, bin ich begeistert.
Was ich bisher gemacht habe:
- Erstellt einen Benutzer namens my-user (zum Beispiel)
- Generierte Zugriffsschlüssel für den Benutzer und legte sie in ~ / .aws auf einer EC2-Instanz ab
- Erstellt eine Bucket-Richtlinie, von der ich gehofft hatte, dass sie meinem Benutzer Zugriff gewährt
- Lief den Befehl
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
Bucket-Richtlinie:
{
"Id": "Policy1384791162970",
"Statement": [
{
"Sid": "Stmt1384791151633",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/my-user"
}
}
]
}
Das Ergebnis ist, A client error (AccessDenied) occurred: Access Denied
dass ich mit demselben Befehl und den Standardzugriffsschlüsseln (Root-Konto?) Herunterladen kann.
Ich habe auch versucht, eine Benutzerrichtlinie hinzuzufügen. Obwohl ich nicht weiß, warum es notwendig sein würde, dachte ich, dass es nicht wehtun würde, und fügte dies meinem Benutzer hinzu.
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Gleiche Ergebnisse.
Als ich auf dasselbe Problem stieß, stellte sich heraus, dass für AWS die serverseitige Verschlüsselung aktiviert sein musste. Der folgende Befehl hat bei mir also erfolgreich funktioniert:
quelle
--sse aws:kms
der Eimer "Standard" zu verwenden ...--sse-kms-key-id 0123-abc-etc
Unklar ist jedoch, dass Sie für die Verwendung Ihres eigenen KMS-Schlüssels über die IAM-Berechtigung verfügen müssen, damitkms:GenerateDataKey
Ihnen der Zugriff weiterhin verweigert wird.Ich würde die von James erwähnte Option "Jeder authentifizierte AWS-Benutzer" nicht empfehlen.
Dadurch wird eine Zugriffssteuerungsliste auf Bucket-Ebene hinzugefügt, mit der jedes AWS-Konto (nicht nur Ihre IAM-Benutzer) die ACLs für diesen Bucket auflisten / löschen / ändern kann.
dh öffentlich lesen / schreiben für jeden mit einem aws Account.
quelle
Ich habe es geschafft, das Problem zu beheben, ohne Richtlinien schreiben zu müssen. In der S3-Konsole (Web-UI) habe ich den Bucket ausgewählt und auf der Registerkarte Berechtigungen die Option "Jeder authentifizierte AWS-Benutzer" ausgewählt und alle Boxen abgehakt.
UPDATE: Wie in den Kommentaren erwähnt, ist "Jeder authentifizierte AWS-Benutzer" nicht nur ein Benutzer in Ihrem Konto, sondern ausschließlich ein AWS-authentifizierter Benutzer
quelle
Auch wenn Ihre IAM-Richtlinien korrekt eingerichtet sind, kann es zu Fehlern
An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
aufgrund von MFA-Anforderungen (Multi-Factor Authentication) für Ihre Anmeldeinformationen kommen. Diese können Sie überraschen, denn wenn Sie sich bereits bei der AWS-Konsole angemeldet haben, scheinen Ihre Anmeldeinformationen einwandfrei zu funktionieren, und die Fehlermeldung von aws cli, der die Berechtigung verweigert wurde, ist nicht besonders hilfreich.Es gibt bereits einige gute Anweisungen zum Einrichten von MFA mit aws cli:
Grundsätzlich müssen Sie die Adresse Ihres MFA-Geräts abrufen und diese mit dem Code Ihres Geräts senden, um ein temporäres Token zu erhalten.
quelle
Ich ging einfach über die Web-Benutzeroberfläche auf und klickte auf den Eimer, ging dann zu Berechtigungen und ging dann zu Richtlinien. Als ich es öffnete, klickte ich einfach auf Löschen. Ich habe das gemacht, weil ich denke, dass es auch die Konfiguration war.
Ich ging zurück zur Hauptseite von S3, klickte dann auf den Eimer und versuchte ihn zu löschen und es funktionierte.
auch wenn ich es mit aws-cli gemacht habe
Jedenfalls hat das bei mir funktioniert. Die Richtlinie zu Berechtigungen hindert Sie daran, den Bucket zu löschen.
quelle
Sobald ich diese Fehlermeldung erhalten habe, indem ich einfach versucht habe zu starten:
aws s3 cp s3://[bucketName]/[fileName] .
in einem Ordner, in dem ich keine Berechtigungen hatte. Es ist albern, aber stellen Sie sicher, dass Sie der Eigentümer des Ordners sind, in dem Sie sich befinden, bevor Sie fortfahren!
quelle
Das Problem tritt auf, wenn Sie ungültige Ressourcen- oder Objektnamen einfügen. Ich hatte das gleiche Problem mit boto3 (in meinem Fall war es ein ungültiger Bucket-Name).
quelle