Ich habe festgestellt, dass alle von mir gefundenen Tutorials für den S3-Zugriff von Discourse dem Benutzer absolute Befugnisse über den Bucket erteilt haben – sie erlauben die Berechtigung ‘s3:*’.
Dies ist eine äußerst unkluge Richtlinie, da sie eine deutlich größere Kontrolle über den Bucket ermöglicht, als vernünftig ist. Sollten Sie S3 für die Discourse-Backup-Speicherung verwenden, könnte ein wütender Angreifer auf dem Weg hinaus Ihren Bucket und Ihre Backups löschen.
Es gibt zwei Möglichkeiten, dem entgegenzuwirken: Erstens eine restriktivere Richtlinie…
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Get*",
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::whatever-bucket",
"arn:aws:s3:::whatever-bucket/*"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:HeadBucket"
],
"Resource": "*"
}
]
}
… und zweitens einige sinnvolle Vorsichtsmaßnahmen in die Bucket-Richtlinie aufnehmen. (Dies geht tatsächlich weit über das absolute Minimum hinaus, das erforderlich wäre, aber ich hatte es eilig und keine Zeit zum Experimentieren, und es ist besser als das, was ich gefunden habe.) Ich empfehle, die Versionsverwaltung zu aktivieren und anschließend eine Lebenszyklusregel für „vorherige Versionen" festzulegen, die diese nach einer angemessenen Zeit, beispielsweise 21 Tagen, entfernt. Die angegebene Richtlinie würde die Protokolldrehung und das Löschen von Dateien zulassen, aber sie würde dem mit S3-Anmeldedaten ausgestatteten Benutzer keinen Zugriff auf die Wiederherstellung oder das Löschen vorheriger Versionen gewähren. Das bedeutet, dass ein Angreifer zwar ein Backup löschen könnte, aber nicht in der Lage wäre, es aus dem Versionsverlauf zu entfernen, bevor ein Administrator mit Root-Anmeldedaten es wiederherstellen kann.
Vielen Dank!