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:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
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 anderen PutObject/DeleteObject
Aktionen erfordern Berechtigungen für die Objekte im Bucket.
Das erste Ressourcenelement gibt arn:aws:s3:::<Bucket-Name>
die ListBucket
Aktion an, damit Anwendungen alle Objekte im Bucket auflisten können.
Das zweite Ressourcenelement gibt arn:aws:s3:::<Bucket-Name>/*
die Aktionen PutObject
und und an DeletObject
, 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
.
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 .