2017-06-14 3 views
2

J'essaie de télécharger le fichier journal de CloudTrail qui est stocké dans un compartiment S3 mais lorsque j'ai reçu le fichier, il est illisible jusqu'à ce que je sache qu'il pourrait être chiffré, par exemple here Je ne sais pas comment décrypter le fichier.Télécharger et décrypter le journal AWS CloudTrail chiffré dans le compartiment

Voici mon code:

AWSCredentials credentials = new BasicAWSCredentials(prop.getProperty("provider.aws01.username"), prop.getProperty("provider.aws01.password")); 
      s3client = new AmazonS3Client(credentials); 
     S3Object s3object = s3client.getObject(new GetObjectRequest(
       bucketName, "examplecloudtraillog.json.gz")); 
      System.out.println("Encrypted with: " + 
       s3object.getObjectMetadata().getSSEAlgorithm()); 
      InputStream is = s3object.getObjectContent(); 
      OutputStream outputStream = 
        new FileOutputStream(new File("test.txt")); 

     int read = 0; 
     byte[] bytes = new byte[1024]; 

     while ((read = is.read(bytes)) != -1) { 
      outputStream.write(bytes, 0, read); 
     } 

     System.out.println("Done!"); 

Et quand je l'ai reçu le fichier, il ressemble à du charabia, voici le fichier de sortie:

‹  ÅUÛ²¢Xý• 
_OQr¿øxDÅž‰Ž 
{£ÈU6 Xqþ½Ásº«ººª§f¢#&‚13W^ȵòóÈFA^B<šüòy„”U.*q”g£ÉˆúDr£££Rƒ½%ªºÑäó¨ê 
Ô[åÃn‡Ê& 
PïeM#¨ô#П@ 
yîøS§£×oÐN”‘4I É4ïP„•&”p½»ìòº'\áoPÞ=Öà "c\§ÈΓ!}ïb£ó[Õ¨&‚Þ­ Aõ&üÔ,ÂaüÝúÞz”Ï}Øì%ºÕW(ûìU?¡aeŸ|×cöyß‹Š’”‰ 
|DQ!I±<=÷~r9ÔÊlÒƒN"N&´HR4-J$ÉÓ“Ág,Ã4ʆiõ•y†Ñ,Ai_Ô3[P¢çG Éó¿%vú±Èóm>õŽð1S0˜*ÎúQu.k½mœÍÌÎdö(ëMÆY³é^““±W÷R  ÈNsS Ë¦8Ž­—]‘å÷1[R'na60Úé†>øW²Ž5P-²û©8¢:®Z†Kk'ÎwDh¯£ÐòºÙ[email protected]æBƒ¾” ÎiWšb…xm+ÇìVsö|ö,Õ­võZÜR;\ŽYÅÁW4³¥\n*wÖŦ*u{+im¨®USÎÇ×ÇÊ÷뛚:GYZ\ð‹M{w-Œ‹–aòrIÎö 
FÙtetÝ]´Óþø’^¬sŠo/;u,šóQÝýó(âA~Ñ7‹Ònzé.;ºÜI’¼‚Øç7öù‡>Ôö‘;Rr_ny;¥Øl=ŸÝ ~Õxööq 
Pw0´§E·N÷صÎè%·È¡$8Ë¡ÊS|,û§NpÎ]ìÒ‚tÚ—ÙÅœ‡Á9¸«ÛÄ×ÝlãTÛUwne 
o3–Ü«u!CeKzjÜr÷½,³ëã}®®3èÑX§Çêa(”$Ù9Ü8m3*Ÿ:g:{¬¸Òf®öâ 
͇|mÎl¤¦|tØ?Xèr†¹?òšpa¯cÀTùF{Èb0}±³„oWüµ•I¾ÝMU>Ëó²-k‰…ÆÞDIÔõüî•«@Ù<ƒ‡K·Ýÿ«&I,‚~) 
Ôip èN“u™ÖŽ¦åY3V·ækyàp[D%¨Þ¸j‚î-|ü0(ŠžôÍ}ÍÑëëœÓ¦ƒI€({~Ž`iŽ# h‚¡hB‰ 
Kþ.Ï ¤$Qá"$XF"‰>Íø>’‚>ŠòúMÞôO¶×?KÒg·yÝgzýÚ«7}QÈÉD“ÍÉä)S¯ÿþ]ßÍw,‘ 
’äYHQo”‹/ ×€Ù="(Š~ ÐDCaúyHÍèS‚ÏJb¯&ÿ”®I^Ã^W£ä¿‘wŽœ0â?(ï5&ÀÕ´ý‡5þYâÿÆí‡JÿS 
®ÀÎ üëóçTÁe•Ÿñ¯ï­üõf| ùIåÿÍ´Ù^¡™þÚXÌÆã¶ß¥ÿN3þí“|°Ìa‚sE̦cy\Láê»ÕFÎüFî(ZfO…]ñ¦ã¨õ;ˆíÕx·‡ô,†c™µ(çzÓ-4;çÉVMœn:¯R}=o’0 
X…—¦ÍTç\Ï>L“B°Éúê¯/7\ÐÓUÐXšcvl,fŒð‡¢1Ê}lcÑ[Zm±­¿YY#ïܽä`xýrMt™Æ÷ã¸ràöD‘×y#×É™/4êTÒ9·5­óÅìâ GÓ=S‚ ‹lY3*^$Ö¢=ð)çjS%ÎjÙ‹Kqž6ç«› ÎnÏŽgQ­'Q{gJ­-;}Ìî´.N3]‘ť… c…Ç5c/Òìæ­Õ9åBÙÊUUßVk XrÇ;í°£ 
rÇÂ’Ò–‚'ÆTH5_?K%>ÂóõºB13f-иU“ŹxZøÇóXÔ 
›`k$”­$ØoÇÙB•œŽ›­[ÝúŠöi’ˆR—øʻڱó*,i-‘¹P}­Øýº'Íà°œûžÏõúò×Û‚ÙYSMWSWVy³åf“¯¶öã@Š¯¨ÑSûj¼C?A‘ñ×tøæ@&” € ×Æ'(
    „Oú4!Ë …@ÿt †>EÑ!"[email protected]’!0>Ë@DSÿÛø<ÿÿ_‡€ìÏ KJ„("ÑkƒHø(äˆ@$¸°·õY_©¤"a 

Comment puis-je télécharger et décrypter le fichier journal du CloudTrail ?

MISE À JOUR

J'ajouté ces lignes de code comme suit:

AWSCredentialsProvider cp = new StaticCredentialsProvider(credentials); 
       InputStream is = s3object2.getObjectContent(); 
       byte[] bytes = IOUtils.toByteArray(is); 
       ByteBuffer ciphertextBlob = ByteBuffer.wrap(bytes); 

        AWSKMS kms = AWSKMSClientBuilder.standard().withCredentials(cp).withRegion("eu-central-1").build(); 
        DecryptRequest req = new DecryptRequest().withCiphertextBlob(ciphertextBlob); 
        ByteBuffer plainText = kms.decrypt(req).getPlaintext(); 

Et cela me donne l'erreur comme suit:

Exception in thread "main" com.amazonaws.services.kms.model.InvalidCiphertextException: null (Service: AWSKMS; Status Code: 400; Error Code: InvalidCiphertextException; Request ID: 3260fbb1-51b0-11e7-a1e6-f561a86f2a15) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1258) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1030) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:742) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:716) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513) 
    at com.amazonaws.services.kms.AWSKMSClient.doInvoke(AWSKMSClient.java:3036) 
    at com.amazonaws.services.kms.AWSKMSClient.invoke(AWSKMSClient.java:3012) 
    at com.amazonaws.services.kms.AWSKMSClient.executeDecrypt(AWSKMSClient.java:811) 
    at com.amazonaws.services.kms.AWSKMSClient.decrypt(AWSKMSClient.java:787) 
    at awslogdownloader.TestOne.main(TestOne.java:92) 

J'ai vérifié les métadonnées du S3Object à voir si elle est cryptée, et elle retourne AES256 pour getSSEAlgorithm mais le getSSEAwsKmsKeyID renvoie null.

Répondre

0

Vous devez utiliser la clé KMS pour déchiffrer les données.

http://docs.aws.amazon.com/kms/latest/developerguide/programming-encryption.html

ByteBuffer ciphertextBlob = Place your ciphertext here; 

DecryptRequest req = new DecryptRequest().withCiphertextBlob(ciphertextBlob); 
ByteBuffer plainText = kms.decrypt(req).getPlaintext(); 
+0

Ai-je besoin de télécharger et obtenir la clé KMS d'abord afin de le décrypter ou il sera charge automatiquement? J'ai essayé d'obtenir l'identifiant de clé KMS utilisé pour chiffrer les fichiers journaux mais il renvoie null –

+0

J'ai essayé avec votre suggestion (voir la mise à jour) mais il m'a donné l'erreur de InvalidCiphertextException car le texte chiffré peut être corrompu ou invalide. Je ne suis même pas sûr si le fichier journal est correctement chiffré. –