** 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.
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.
Wenn Sie ein CMK explizit ausstellen möchten, verwenden Sie das IAM-Menü "Verschlüsselungsschlüssel". 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.
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. 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.
Ä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 *.
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.
Recommended Posts