Verschlüsseln Sie Daten, die mit AWS SDK für Java / SSE-KMS in S3 hochgeladen wurden

** Hochladen / Herunterladen / Löschen von Daten in S3 mit Amazon S3 Client Builder mit AWS SDK für Java ** Hochladen für serverseitige Verschlüsselung Es ist eine Methode zu korrespondieren. Wenn Sie zuerst die Schlussfolgerung schreiben: ** Bei Verwendung von AmazonS3ClientBuilder ist dieselbe Beschreibung wie für AmazonS3Client in Ordnung **.

Es gibt verschiedene Arten von S3-Datenverschlüsselungsmethoden, hier jedoch "SSE-KMS. ) ”Wird aufgenommen.

0. Arten der S3-Datenverschlüsselung

Es gibt zwei Haupttypen: serverseitige Verschlüsselung (SSE) und clientseitige Verschlüsselung (CSE).

Ersteres ist eine Methode, bei der die vom Client gesendeten Daten auf der Serverseite empfangen und dann verschlüsselt und im Speicher gespeichert werden, und letzteres ist eine Methode, bei der die Daten verschlüsselt und an den Server gesendet werden, bevor sie vom Client gesendet werden. Bei Verwendung der serverseitigen Verschlüsselung muss der Kommunikationspfad jedoch mit SSL / TLS unter Verwendung von HTTPS verschlüsselt werden, um eine Verbindung zum Endpunkt herzustellen, damit Rohdaten ohnehin nicht über das Internet fließen. ..

Jedes ist weiter in mehrere Methoden unterteilt, aber CSE wird hier nicht behandelt.

Davon wurde im SSE-KMS diesmal verwendet,

es gibt.

1. Vorbereitung / Ausgabe von CMK (Schlüssel) und Richtlinieneinstellung für den S3-Bucket (nur bei Bedarf)

Wenn Sie ein CMK explizit ausstellen möchten, verwenden Sie das IAM-Menü "Verschlüsselungsschlüssel". s3_enc_1.jpg Auf dem obigen Bildschirm wird setting (ARN) beim Festlegen der Bucket-Richtlinie und ② (Schlüssel-ID) beim Angeben der Verschlüsselungsschlüssel-ID im Java-Code verwendet.

Vergessen Sie nicht, die Berechtigung zu erteilen, damit der Benutzer, der den S3-Zugriff verwendet, diesen Schlüssel verwenden kann. s3_enc_2.jpg

Wenn Sie kein CMK explizit ausstellen und den Standardverschlüsselungsschlüssel verwenden, müssen Sie dies nicht tun.

Wenn Sie dann die Verschlüsselung beim Hochladen erzwingen möchten, legen Sie eine Bucket-Richtlinie fest. s3_enc_3.jpg Um den zu verwendenden Verschlüsselungsschlüssel einzuschränken, beschreiben Sie das "," am Ende der 13. und 14. Zeile. Diese Beschreibung ist nicht erforderlich, wenn Sie nicht einschränken möchten (nur Verschlüsselung erzwingen) oder wenn Sie den Standardverschlüsselungsschlüssel verwenden möchten.

2. Ändern Sie den Java-Code

Ändern Sie den Beispielcode in Vorheriger Artikel. Nach "Download" gibt es keine Änderung (Sie müssen beim Herunterladen keine Verschlüsselung angeben).

S3Access.Java (nur erste Hälfte)


package s3test;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
import com.amazonaws.services.s3.model.DeleteObjectsResult;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;

public class S3Access {

    private static final String ENDPOINT_URL = "https://s3-ap-northeast-1.amazonaws.com";
    private static final String REGION       = "ap-northeast-1";
    private static final String ACCESS_KEY   = "【Zugangsschlüssel】";
    private static final String SECRET_KEY   = "[Geheimer Schlüssel]";
    private static final String KMS_KEY_ID   = "[KMS-Schlüssel-ID] * Fügen Sie das Teil ② ein";

    //--------------------------------------------------
    //hochladen
    //--------------------------------------------------
    public void putObject(String bucketName, String objectKey, int objectSize, InputStream is) throws Exception {

        //Client-Generierung
        AmazonS3 client = getClient(bucketName);

        ObjectMetadata metadata = new ObjectMetadata();
        //Stellen Sie nur die Größe für alle Fälle ein (Ausnahme, wenn inkonsistent)
        metadata.setContentLength(objectSize);

        //hochladen
        PutObjectRequest putRequest = new PutObjectRequest(bucketName, objectKey, is, metadata)
                                    .withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(KMS_KEY_ID));
        client.putObject(putRequest);
        client.putObject(bucketName, objectKey, is, metadata);
    }

Wenn Sie den Standardverschlüsselungsschlüssel verwenden möchten, schreiben Sie ** * .withSSEAwsKeyManagementParams () * ohne ** Argument in * PutObjectRequest *.

3. Vorsichtsmaßnahmen

Der zum Zeitpunkt des Uploads im Anforderungsheader beschriebene Inhalt unterscheidet sich je nach Art (Methode) der Verschlüsselung, die oben kurz erläutert wurde. Daher ** Wenn Sie die Verschlüsselung mit einer Bucket-Richtlinie erzwingen, müssen Sie sie entsprechend der Art der Verschlüsselung beschreiben. ** **.

Beachten Sie bei Verwendung von SSE-S3 Folgendes.

** [Schutz von Daten mithilfe der serverseitigen Verschlüsselung (SSE-S3) mit einem von Amazon S3 verwalteten Verschlüsselungsschlüssel](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev /UsingServerSideEncryption.html) ** ** Angeben der serverseitigen Verschlüsselung mit dem AWS SDK für Java **

Wenn Sie einen Fehler in der Korrespondenz zwischen der Bucket-Richtlinie und dem Java-Code machen, tritt ein Upload-Fehler auf.

** Die Methode mit SSE-S3 und die Methode mit dem Standardverschlüsselungsschlüssel in SSE-KMS sind unterschiedlich **. Achten Sie daher darauf, sie nicht zu verwechseln.

** [2017.7.6 Nachtrag] ** Die Verwendung eines Zugriffsschlüssels für die Authentifizierung ist nicht sicher. Der folgende Artikel zeigt Ihnen, wie Sie zur Verwendung der EC2-IAM-Rolle wechseln.

** Zugriff auf S3-Bucket mithilfe der SSE-KMS-Verschlüsselung in der EC2-IAM-Rollenumgebung (AWS SDK für Java) **

Recommended Posts

Verschlüsseln Sie Daten, die mit AWS SDK für Java / SSE-KMS in S3 hochgeladen wurden
Hochladen / Herunterladen / Löschen von Daten in S3 mithilfe von Amazon S3 Client Builder mit AWS SDK für Java
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
Zugriff auf den S3-Bucket mithilfe der SSE-KMS-Verschlüsselung in der EC2-IAM-Rollenumgebung (AWS SDK für Java)
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
AWS SDK für Java 1.11.x und 2.x.
Holen Sie sich eine Liste der S3-Dateien mit ListObjectsV2Request (AWS SDK für Java)
[AWS SDK für Java] Legen Sie die Wiederholungsrichtlinie für den S3-Client fest
Richten Sie signierte Cookies (für CloudFront) mit benutzerdefinierten Richtlinien mithilfe des AWS SDK für Java ein
Holen Sie sich die S3-Objektgröße mit AWS SDK for Ruby
Anmeldeinformationen, auf die das AWS SDK für Java standardmäßig verweist
Untersucht, wie Dienste mit Watson SDK für Java aufgerufen werden
Java für Anfänger, Daten verstecken
Drei JDKs für die kostenlose kommerzielle Nutzung von Java
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
Wie man einen revolutionären Diamanten mit Java für Aussage macht wwww
Hinweis: Bildspeicherung mit AWS S3
Verschlüsselung mit RSA-Verschlüsselung in Java
Löschen von AWS S3-Objekten in Java
Verwenden von Java mit AWS Lambda-Eclipse-Vorbereitung
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Umbenannte Ordner in AWS S3 (Java)
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
Wie kann ich mit NUXTJS Official S3 und CloudFront für AWS bereitstellen? Mit Docker-Compose