** 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.
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.
Si vous souhaitez émettre une clé CMK explicitement, utilisez le menu IAM «Clé de chiffrement». 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é.
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. 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.
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 *.
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.
Recommended Posts