Ich bekomme:
Beim Aufrufen der ListObjects-Operation ist ein Fehler aufgetreten (AccessDenied): Zugriff verweigert
Wenn ich versuche, einen Ordner aus meinem S3-Bucket abzurufen.
Mit diesem Befehl:
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
Die IAM-Berechtigungen für den Bucket sehen folgendermaßen aus:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
Was muss ich ändern , um in der Lage sein copy
und ls
erfolgreich?
amazon-web-services
amazon-s3
user1411335
quelle
quelle
aws
für einen Benutzer konfiguriert und es in einem Cronjob-Bash-Skript eines anderen Benutzers verwendet, was bedeutet, dass der Zugriffsschlüssel und das Zugriffstoken falsch / nicht festgelegt waren. Meine Lösung bestand darin, die Anmeldeinformationen (AWS_ACCESS_KEY_ID
undAWS_SECRET_ACCESS_KEY
) wie hier beschrieben direkt in meine Bash-Skriptdatei einzufügen .Antworten:
Sie haben die Berechtigung zum Ausführen von Befehlen für Objekte im S3-Bucket erteilt, aber Sie haben keine Berechtigung zum Ausführen von Aktionen für den Bucket selbst erteilt.
Eine geringfügige Änderung Ihrer Richtlinie würde folgendermaßen aussehen:
Dies gibt jedoch wahrscheinlich mehr Berechtigungen als erforderlich. Das Befolgen der AWS IAM-Best Practice für die Gewährung des geringsten Privilegs würde ungefähr so aussehen:
quelle
"Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]
wie ich (dh Sie möchten nur einen Schrägstrich vor dem*
) - ich habe 4 lange Stunden gebraucht, um zu erkennen, dass dieser Fehler dazu geführt hat, dass alle meinelistObjects
Anrufe fehlgeschlagen sind ...Wenn Sie alle s3-Bucket-Objekte mit dem Befehl "aws s3 cp s3: // Bucket-Name / data / all-data /. --Recursive" kopieren möchten, wie Sie bereits erwähnt haben, finden Sie hier eine sichere und minimale Richtlinie:
Die erste Anweisung in dieser Richtlinie ermöglicht das Auflisten von Objekten im Unterverzeichnis eines bestimmten Buckets. Die Ressource muss der Arn des S3-Buckets sein. Um die Auflistung auf ein Unterverzeichnis in diesem Bucket zu beschränken, können Sie den Wert "s3: prefix" bearbeiten.
Die zweite Anweisung in dieser Richtlinie ermöglicht das Abrufen von Objekten innerhalb des Buckets in einem bestimmten Unterverzeichnis. Dies bedeutet, dass alles innerhalb des Pfads "s3: // Bucket-Name / Daten / All-Daten /" kopiert werden kann. Beachten Sie, dass Sie auf diese Weise nicht aus übergeordneten Pfaden wie "s3: // Bucket-Name / Daten /" kopieren können.
Diese Lösung ist spezifisch für die Einschränkung der Verwendung von AWS CLI-Befehlen. Wenn Sie den S3-Zugriff über die AWS-Konsole oder API einschränken müssen, sind weitere Richtlinien erforderlich. Ich schlage vor, hier einen Blick darauf zu werfen: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ .
Ein ähnliches Problem ist hier zu finden, das mich zu der Lösung geführt hat, die ich gebe. https://github.com/aws/aws-cli/issues/2408
Hoffe das hilft!
quelle
ListBucket
auf einen Unterschlüssel: stackoverflow.com/a/35952877/89218Sie müssen die Ressource für den Bucket über "arn: aws: 3 ::: Bucketname" oder "arn: aws: 3 ::: Bucketname *" angeben. Letzteres wird bevorzugt, da es auch Manipulationen an den Objekten des Eimers ermöglicht. Beachten Sie, dass es keinen Schrägstrich gibt!
Das Auflisten von Objekten ist eine Operation in Bucket. Daher ist die Aktion "s3: ListBucket" erforderlich. Das Hinzufügen eines Objekts zum Bucket ist eine Operation für das Objekt. Daher ist die Aktion "s3: PutObject" erforderlich. Natürlich möchten Sie nach Bedarf weitere Aktionen hinzufügen.
quelle
arn:aws:s3:::bucketname*
ist, dass es auch den Zugang zuarn:aws:s3:::bucketname-with-suffix
Ich konnte nicht auf S3 zugreifen, weil
Lösung: verwendet
rm -rf .aws/credentials
dannaws
die Rolle.quelle
Ich habe den gleichen Fehler bei der Verwendung der Richtlinie wie unten erhalten, obwohl ich "s3: ListBucket" für die Operation s3: ListObjects habe.
Dann habe ich es behoben, indem ich eine Zeile "arn: aws: s3 ::: Bucketname" hinzugefügt habe.
quelle
Ich habe den Fehler zu denken ist auf „s3: Listobjects“ Aktion aber ich hatte die Aktion hinzufügen „s3: ListBucket“ zu lösen das Problem „AccessDenied für Listobjects für S3 - Bucket“
quelle
Ich stand vor dem gleichen Problem. Ich habe gerade die Konfiguration der Anmeldeinformationen hinzugefügt:
in "~ / .aws / credentials" + Terminal für Standardprofil neu starten.
Bei mehreren Profilen muss --profile arg hinzugefügt werden:
wo PROFILE_NAME :
Weitere Informationen zum Konfigurieren von Anmeldeinformationen und mehreren Profilen finden Sie hier
quelle
Ich habe folgendes versucht:
Dies gab mir den Fehler:
Die Verwendung dieses Formulars hat funktioniert:
quelle
Ich füge eine Antwort mit der gleichen Richtung wie die akzeptierte Antwort hinzu, aber mit kleinen (wichtigen) Unterschieden und füge weitere Details hinzu.
Betrachten Sie die folgende Konfiguration:
Die Richtlinie gewährt programmgesteuerten Schreib- und Löschzugriff und ist in zwei Teile unterteilt:
Die
ListBucket
Aktion stellt Berechtigungen auf Bucket-Ebene bereit, und die anderenPutObject/DeleteObject
Aktionen erfordern Berechtigungen für die Objekte im Bucket.Das erste Ressourcenelement gibt
arn:aws:s3:::<Bucket-Name>
dieListBucket
Aktion an, damit Anwendungen alle Objekte im Bucket auflisten können.Das zweite Ressourcenelement gibt
arn:aws:s3:::<Bucket-Name>/*
die AktionenPutObject
und und anDeletObject
, damit Anwendungen Objekte im Bucket schreiben oder löschen können.Die Trennung in zwei verschiedene 'Arns' ist aus Sicherheitsgründen wichtig, um feinkörnige Berechtigungen auf Bucket- und Objektebene anzugeben.
Beachten Sie, dass, wenn ich nur
GetObject
im 2. Block angegeben hätte, bei programmatischem Zugriff eine Fehlermeldung wie folgt angezeigt würde:Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.quelle
Bei mir gab es ähnliche Probleme. Für mich bestand das Problem darin, dass in meinem bash_profile verschiedene AWS-Schlüssel festgelegt waren.
Ich habe hier eine ähnliche Frage beantwortet: https://stackoverflow.com/a/57317494/11871462
Wenn Ihr bash_profile widersprüchliche AWS-Schlüssel enthält, verwendet AWS CLI standardmäßig diese.
quelle
Ich hatte dieses Problem meine Anforderung Ich wollte dem Benutzer erlauben, auf einen bestimmten Pfad zu schreiben
und Problem wurde mit dieser Änderung gelöst
quelle