[PYTHON] Versuchen Sie die serverseitige Verschlüsselung von S3 mit boto3

Beim Hochladen eines Objekts in S3 mit einem Python-Skript Ich habe untersucht, wie man auf der Serverseite verschlüsselt.

S3 und Objektverschlüsselung

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 __

S3 und serverseitige Verschlüsselung

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.

Vorherige Bestätigung in der Management Console

Beim Versuch, ein Objekt in einem Bucket in der Verwaltungskonsole zu speichern Unterwegs erhalten Sie eine Verschlüsselungsoption. 0.png

"Amazon S3-Hauptschlüssel" steht für SSE-S3. Selbst wenn Sie es auswählen, gibt es keine bestimmten Auswahlmöglichkeiten.

1.png

"AWS KMS-Hauptschlüssel" bedeutet AWS-KMS. Wenn Sie es auswählen, erhalten Sie eine Auswahl der zu verwendenden Schlüssel.

2.png

Wenn Sie versuchen, es mit SSE-S3 zu speichern, wird es auf dem Objektdetailbildschirm wie folgt angezeigt.

3.png

Tun Sie dies aus dem Skript (boto3).

Skriptbeschreibung

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.

4.png

SSE-KMS

Bei Verwendung des Standardschlüssels für S3

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.)

5.png

Dieser Schlüssel unterscheidet sich jedoch nicht wesentlich vom SSE-S3, da die Einstellungen nicht geändert werden können.

Bei Verwendung eines von KMS erstellten Schlüssels

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.

6.png

Ergänzung

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.

Zusammenfassung

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

Versuchen Sie die serverseitige Verschlüsselung von S3 mit boto3
S3 serverseitige Verschlüsselung SSE mit Python boto3
S3 Uploader mit Boto
S3-Betrieb mit Python Boto3
Mount S3 auf Ubuntu mit Goofys
Verwenden Sie boto3, um zu S3 zu gelangen
Generieren Sie eine mit S3 signierte URL mit boto
Probieren Sie SVM mit scikit-learn auf Jupyter Notebook aus
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
Versuchen Sie Tensorflow mit einer GPU-Instanz unter AWS
Zeigen Sie Bilder in S3 mit API Gateway + Lambda an
Hinweise zum Implementieren des Schlüssels unter Amazon S3 mit Boto 3, Implementierungsbeispiel, Hinweise
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
[Python] Zusammenfassung der S3-Dateivorgänge mit boto3
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Bearbeiten Sie S3-Objekte mit Boto3 (High-Level-API und Low-Level-API)
Ausgabe der zeitlich begrenzten S3-URL mit boto3 (mit Bestätigung der Dateiexistenz)
[Memo] Lade csv von s3 mit boto3 in Pandas
Getestet mit boto3 + mock
Starten Sie Lambda mit Boto3
Regionsspezifikation mit Boto
Versuchen Sie SNN mit BindsNET
Probieren Sie FEniCS unter Windows aus!
Versuchen Sie Poerty unter Windows
Versuchen Sie eine Regression mit TensorFlow
Versuchen Sie Deepdream auf dem Mac
Probieren Sie Amazon Simple Workflow Service (SWF) mit Python und boto3 aus
Lesen Sie das Tag, das Ihnen in ec2 mit boto3 zugewiesen wurde
Versuchen Sie, mit einem gemischten Gaußschen Modell auf Jupyter Notebook zu gruppieren
Versuchen Sie die Verschlüsselung / Entschlüsselung mit dem OpenSSL-Schlüssel mit Python3-Pow-Funktion
Ich wollte mit boto3 mehrere objekte in s3 löschen