Crypter les données téléchargées vers S3 à l'aide du kit AWS SDK pour Java / SSE-KMS

** Télécharger / Télécharger / Supprimer des données vers S3 à l'aide d'Amazon S3 Client Builder avec AWS SDK pour Java ** Téléchargement pour le chiffrement côté serveur C'est une méthode pour correspondre. Si vous écrivez d'abord la conclusion, ** Lors de l'utilisation d'AmazonS3ClientBuilder, la même description que pour AmazonS3Client est OK **.

Il existe différents types de méthodes de chiffrement des données S3, mais ici, "SSE-KMS ”Sera repris.

0. Types de cryptage des données S3

Il existe deux types principaux: le chiffrement côté serveur (SSE) et le chiffrement côté client (CSE).

La première est une méthode dans laquelle les données envoyées par le client sont reçues du côté serveur, puis cryptées et enregistrées dans le stockage, et la seconde est une méthode dans laquelle les données sont cryptées et envoyées au côté serveur avant d'être envoyées par le client. Cependant, lors de l'utilisation du chiffrement côté serveur, le chemin de communication doit être chiffré avec SSL / TLS en utilisant HTTPS pour se connecter au point de terminaison, de sorte que les données brutes ne circulent pas sur Internet de toute façon. ..

Chacune est divisée en plusieurs méthodes, mais le CSE n'est pas couvert ici.

Parmi ceux-ci, dans le SSE-KMS utilisé cette fois,

il y a.

1. Préparation / émission de CMK (clé) et paramètre de stratégie pour le compartiment S3 (uniquement si nécessaire)

Si vous souhaitez émettre une clé CMK explicitement, utilisez le menu IAM «Clé de chiffrement». s3_enc_1.jpg Sur l'écran ci-dessus, ① (ARN) est utilisé lors de la définition de la stratégie de compartiment et ② (ID de clé) est utilisé lors de la spécification de l'ID de clé de chiffrement dans le code Java.

N'oubliez pas de donner la permission pour que l'utilisateur qui utilise l'accès S3 puisse utiliser cette clé. s3_enc_2.jpg

Si vous n'émettez pas explicitement une clé CMK et n'utilisez pas la clé de chiffrement par défaut, vous n'avez pas besoin de le faire.

Ensuite, si vous souhaitez appliquer le chiffrement lors du téléchargement, définissez une stratégie de compartiment. s3_enc_3.jpg Pour limiter la clé de chiffrement à utiliser, écrivez "," à la fin de la 13e ligne et de la 14e ligne. Cette description n'est pas nécessaire si vous ne souhaitez pas limiter (forcer le cryptage uniquement) ou si vous souhaitez utiliser la clé de cryptage par défaut.

2. Changer le code Java

Modifiez l'exemple de code dans Article précédent. Il n'y a pas de changement après "Télécharger" (vous n'avez pas besoin de spécifier le cryptage lors du téléchargement).

S3Access.java (première moitié uniquement)


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   = "【clé d'accès】";
    private static final String SECRET_KEY   = "[Clef secrète]";
    private static final String KMS_KEY_ID   = "[ID clé KMS] * Insérez la pièce ②";

    //--------------------------------------------------
    //télécharger
    //--------------------------------------------------
    public void putObject(String bucketName, String objectKey, int objectSize, InputStream is) throws Exception {

        //Génération de clients
        AmazonS3 client = getClient(bucketName);

        ObjectMetadata metadata = new ObjectMetadata();
        //Définissez uniquement la taille au cas où (Exception si incohérente)
        metadata.setContentLength(objectSize);

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

Si vous souhaitez utiliser la clé de chiffrement par défaut, écrivez ** * .withSSEAwsKeyManagementParams () * sans ** argument dans * PutObjectRequest *.

3. Précautions

Le contenu décrit dans l'en-tête de la demande au moment du téléchargement diffère selon le type (méthode) de cryptage expliqué brièvement ci-dessus. Par conséquent, ** Lors de l'application du chiffrement avec une stratégie de compartiment, il est nécessaire de le décrire en fonction du type de chiffrement. ** **

Lorsque vous utilisez SSE-S3, reportez-vous à ce qui suit.

** [Protection des données à l'aide du chiffrement côté serveur (SSE-S3) avec la clé de chiffrement gérée Amazon S3](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev /UsingServerSideEncryption.html) ** ** Spécification du chiffrement côté serveur à l'aide du kit AWS SDK pour Java **

Si vous faites une erreur dans la correspondance entre la stratégie de compartiment et le code Java, une erreur de téléchargement se produit.

** La méthode utilisant SSE-S3 et la méthode utilisant la clé de chiffrement par défaut dans SSE-KMS sont différentes **, veillez donc à ne pas les confondre.

** [PostScript 2017.7.6] ** L'utilisation d'une clé d'accès pour l'authentification n'est pas sécurisée. Par conséquent, l'article suivant vous montre comment passer à l'utilisation du rôle IAM EC2.

** Accès au compartiment S3 à l'aide du chiffrement SSE-KMS dans l'environnement de rôle IAM EC2 (AWS SDK pour Java) **

Recommended Posts

Crypter les données téléchargées vers S3 à l'aide du kit AWS SDK pour Java / SSE-KMS
Importer / télécharger / supprimer en bloc des données sur S3 à l'aide d'Amazon S3 Client Builder avec AWS SDK pour Java
Essayez Spark Submit to EMR à l'aide du kit AWS SDK pour Java
Accéder au compartiment S3 à l'aide du chiffrement SSE-KMS dans l'environnement de rôle IAM EC2 (AWS SDK pour Java)
J'ai essayé de faire fonctionner SQS en utilisant AWS Java SDK
SDK AWS pour Java 1.11.x et 2.x
Obtenir une liste de fichiers S3 avec ListObjectsV2Request (AWS SDK for Java)
[AWS SDK for Java] Définir la stratégie de nouvelle tentative pour le client S3
Configurer des cookies signés (pour CloudFront) avec des stratégies personnalisées à l'aide du kit AWS SDK pour Java
Obtenir la taille de l'objet S3 avec AWS SDK pour Ruby
Informations d'identification référencées par le kit AWS SDK for Java par défaut
A étudié comment appeler des services avec Watson SDK pour Java
Java pour les débutants, masquage des données
Trois JDK à considérer pour une utilisation commerciale gratuite de Java
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
Comment faire un diamant révolutionnaire en utilisant Java pour déclaration wwww
Remarque: Stockage d'images à l'aide d'AWS S3
Chiffrer à l'aide du chiffrement RSA en Java
Suppression d'objets AWS S3 dans Java
Utilisation de Java avec AWS Lambda-Eclipse Préparation
[Java] Essayez de mettre en œuvre à l'aide de génériques
Dossiers renommés dans AWS S3 (Java)
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
Comment déployer sur AWS à l'aide de NUXTJS S3 et CloudFront officiels? Avec docker-compose