Beim Hochladen eines Objekts in S3 mit einem Python-Skript Ich habe untersucht, wie man auf der Serverseite verschlüsselt.
Referenz: Es gibt ungefähr zwei Typen.
Client-Side Encryption(CSE)
Die Clientseite verschlüsselt die Daten, bevor sie zur Speicherung an den Server gesendet werden. -> Daten werden beim Senden und Empfangen mit dem Server (S3) geschützt.
Server-Side Encryption(SSE)
Der Client sendet die Daten unverändert und der Server verschlüsselt sie vor dem Speichern. -> Daten sind geschützt, während sie auf dem Server gespeichert sind (S3).
Letzteres erfordert weniger Aufwand auf der Clientseite, um über Verschlüsselung nachzudenken. Es ist einfach zu handhaben, da es auch beim Herunterladen transparent entschlüsselt wird. __ * Vertrauliche Informationen sollten natürlich vor dem Senden und Empfangen verschlüsselt werden __
Referenz: In S3 gibt es verschiedene Arten von SSE-Optionen.
SSE-S3 | SSE-KMS | SSE-C | |
---|---|---|---|
Verschlüsselungsschlüssel | Der Schlüssel, den S3 hinter den Kulissen verwaltet | Vom AWS KMS-Service verwaltete Schlüssel | Vom Benutzer verwalteter Schlüssel |
Charakteristisch | Da alles von AWS verwaltet wird, ist der Aufwand geringer. Die Zugriffsberechtigung für den Schlüssel kann jedoch nicht manipuliert werden, und der Schlüssel kann nur zum Speichern von Daten in S3 verwendet werden. | Sie können die Zugriffsberechtigung auf den Schlüssel selbst flexibel ändern, indem Sie IAM-Benutzer und -Rollen bedienen. SSE-Obwohl es eine kleinere Umdrehung als S3 hat, erhöht sich die Anzahl der Einstellungselemente. | Sie können den zu verwendenden Schlüssel und den Speicherort auswählen. Es hat den höchsten Freiheitsgrad, aber Sie müssen die sichere Aufbewahrung der Schlüssel selbst sicherstellen. |
Ich wollte die Rolle so weit wie möglich der AWS-Seite überlassen, also habe ich zwei ausprobiert, SSE-S3 und SSE-KMS.
Beim Versuch, ein Objekt in einem Bucket in der Verwaltungskonsole zu speichern Unterwegs erhalten Sie eine Verschlüsselungsoption.
"Amazon S3-Hauptschlüssel" steht für SSE-S3. Selbst wenn Sie es auswählen, gibt es keine bestimmten Auswahlmöglichkeiten.
"AWS KMS-Hauptschlüssel" bedeutet AWS-KMS. Wenn Sie es auswählen, erhalten Sie eine Auswahl der zu verwendenden Schlüssel.
Wenn Sie versuchen, es mit SSE-S3 zu speichern, wird es auf dem Objektdetailbildschirm wie folgt angezeigt.
Tun Sie dies aus dem Skript (boto3).
Da es in [Dokument] von S3 keine Beschreibung für Python gibt (http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingServerSideEncryption.html) Ich habe es unter Bezugnahme auf andere Sprachen und [boto3-Dokumentation] geschrieben (http://boto3.readthedocs.io/en/latest/reference/services/s3.html). Die Ausführungsumgebung ist Lambdas Python 3.6, aber ich denke, dass sich der Schreibstil und das Schreibverhalten nirgendwo wesentlich ändern werden.
Schreiben Sie die Rolle gut um, damit Sie auf die S3- und KMS-Schlüssel zugreifen können.
SSE-S3
SSE-S3
import boto3
def lambda_handler(event, context):
file_name = 'test.txt'
#Kann vorübergehend verwendet werden'/tmp'Erstellen Sie eine Datei in
with open('/tmp/' + file_name, 'w') as f:
f.write('hoge')
#Geben Sie beim Hochladen von Dateien die Verschlüsselungsmethode für ExtraArgs an
response = boto3.client('s3').upload_file(
Filename='/tmp/' + file_name,
Bucket='nanakenashi-test',
Key=file_name,
ExtraArgs={'ServerSideEncryption': 'AES256'})
return True
Es ist sehr einfach, mit nur mehr statischen Argumenten beim Hochladen. Derzeit (16.09.2017) scheint die einzige Verschlüsselungsmethode "AES256" zu sein. Sie können sehen, dass das tatsächlich gespeicherte Objekt dieselbe Form wie zuvor hat.
SSE-KMS
Schreiben Sie nur die "ExtraArgs" im obigen Skript neu.
SSE-KMS (mit Standardschlüssel für S3)
ExtraArgs={
'ServerSideEncryption': 'aws:kms',
}
Das gespeicherte Objekt wird mit dem Standardschlüssel für S3 verschlüsselt. (Da dieser Schlüssel zu diesem Zeitpunkt erstellt wurde, unterscheidet er sich meiner Meinung nach vom Schlüssel für SSE-S3.)
Dieser Schlüssel unterscheidet sich jedoch nicht wesentlich vom SSE-S3, da die Einstellungen nicht geändert werden können.
SSE-KMS (mit dem von KMS erstellten Schlüssel)
#ID des zu verwendenden Schlüssels hinzufügen
ExtraArgs={
'ServerSideEncryption': 'aws:kms',
'SSEKMSKeyId': 'ea41458h-0c2o-496g-b92e-67441d771282'
}
Sie können sehen, dass es mit dem zuvor erstellten Schlüssel verschlüsselt ist.
SSE-S3 und SSE-KMS /AmazonS3/latest/dev/UsingKMSEncryption.html)
Bei der serverseitigen Verschlüsselung werden nur Objektdaten verschlüsselt. Objektmetadaten werden nicht verschlüsselt.
Ebenfalls
Wenn Sie eine serverseitige Verschlüsselung für alle in Ihrem Bucket gespeicherten Objekte benötigen Sie können Bucket-Richtlinien verwenden.
(Es ist schwierig Japanisch ...) Mit anderen Worten, es ist möglich, das Speichern unverschlüsselter Objekte zu verbieten. Das Festlegen dieser Bucket-Richtlinie erleichtert die Aufrechterhaltung eines sicheren Status.
Um die Datenspeicherung in S3 sicherer zu machen Ich habe verschiedene Optionen für die serverseitige Verschlüsselung ausprobiert.
Informationen zu SSE-C finden Sie übrigens unter Around here. Wenn Sie dies tun, können Sie es verwenden.
Recommended Posts