0

Je dois sécuriser mes fichiers qui ne devraient pas être lus ou téléchargés directement dans le browzer après avoir copié le lien dans le browzer.comment sécuriser les fichiers s3 avec des utilisateurs signés de confiance utilisant cloudfront aws-sign?

Ci-dessous mon fichier app.js:

var express = require('express'), 
    aws = require('aws-sdk'), 
    bodyParser = require('body-parser'), 
    multer = require('multer'), 
    multerS3 = require('multer-s3'); 

var cfUtil = require('aws-cloudfront-sign'); 
/**************************/ 
var cfPk = 
'-----BEGIN RSA PRIVATE KEY-----\n' + 
'MIIEogIBAAKCAQEAgBmGbFU3bxnZpqMQ2LwmFP4lq7RauurKCF623Snm1XGNQuF9\n' + 
'XqDeK3TH3ZfYC6P4iQ+C+Ynw15UP/MGbULO2UCmLfkA30FyI/u46jdhdD7hvMqEj\n' + 
'UOEBxVJGFhqrZyerd9A7dRqYS6DTbaz3Vb+aGNcBLuqPP9/TydkkqoFqQnft43W7\n' + 
'mWPp7Cx+TDkY/untwF3TWJdiAeke3FBAB2mni+BlmrNQs3vfufhW2XMV8sSOY+cN\n' + 
'7chQmruV1stS+KCGiFfkiel824KI/1yVUe7+ofDGJF7v1G6WD4XV2sBAz01EIWSK\n' + 
'vo1txA1lSoRcFHmnNOB4d8dKncilxEjstq6J5QIDAQABAoIBAC/m26CJIUiXdw9c\n' + 
'LQGPIgJ5oyaZM9kdfkskflfsddsdfldfksdfjlksdfkfdfdfjsdljdfsdfksd08G\n' + 
'znfj3zT6UcmuhsdfkhsdkjfksdfkjsdfkjskjdfkjlszDfhkSJDFHksdjJj7U/TQ\n' + 
'WFEla/9b7yJjhgdfjsdfkDfklDfkldkljfksjdhfkshdjsdfhksdfkjsdYqOIrnp\n' + 
'67CzIc/U76qkT/hsgdfsdfklkghfksdfkhkdhfkdkksdhfklsdhfklskkGuZOBOn\n' + 
'vbRyFdfsDfwajhflsdhfpoaSudfhahfhhgTA0yVFFkYOZ6z6xyqoT8Qs+eUVGXCP\n' + 
'Au5h6WECgYEA/fjlmzHgMnyfsCugmd/Qbh4tyDVBET6jKKG/JI/K43DjTTLWthcx\n' + 
'Rlse1B6LbvbdzvbzdghdfghdtrytyrtyrtyreTO7WQLAEtTUOngsXms33ZdHtzIj\n' + 
'r6UW9yqiDG6wNHH3Ql8oJCMaKs8z/mrcPJut0JORLmqd68NeOyxeIi0CgYEAgR9a\n' + 
'TG2L06zJZ2Zk6sFee/4nZ5HgMHavxt25/JJtLG4Rew/lb1N10QcSk3v4I7bl41uB\n' + 
'QhlHfyYd1yb0a2iTckfdsdfsdfaDfAFAVx95NS0ti3tO1hsuPKVTrMTEpEB2lul3\n' + 
'BQuZehOE9HCW2QlDnwBeM2SDA0kagknIh63XsZkCgYBgEkIQxfowPvJNOwOikYaP\n' + 
'0TyySmrVsiMYIK9kjjxKcw6Yyk1sTjOk9FkWYP3SwHqfEs0L4hSn6u3F9/34bp+N\n' + 
'fmtkUTW0WK3G0jtYV5XiegCEvZnelmxe9g1M7ESmfUyMWjwVUFen69tfLEhXymaL\n' + 
'SryidN/rdgtM/vdrXOoy9QKBgAks4izGKAZ9o74uP4OTBBTJhaFNc2HePTVjciDp\n' + 
'gsqCc8mL4qDbjGazGvXR/FsFVyalzPaddcweu0kaziZdm36Z1JPI4o1fMUijtVax\n' + 
'voXJvfjVtWGgAbgj05NayZohX/14B9YG8fwDwRHhokZ/6wc0bn02ajzkh/a0KYTC\n' + 
'rK4ZAoGAGqYbrwHYFFgAOhOaPdER9jK+MXWl1pUhdFTUbNETgF0Nay06GifY+1DA\n' + 
'oTu2hg3k7z5464WANk/ixn5nlyRD/i8Ab4ENA56sFly9qOyEdWlXKNrocMd4wjJr\n' + 
'ZVF3wvEieF2E1PTySKYNb0ZUm70nfzMj6sRFw9ow58LdpPVXIew=\n' + 
'-----END RSA PRIVATE KEY-----' 
/************************/ 


aws.config.update({ 
    secretAccessKey: 'mysecretaccesss', 
    accessKeyId: 'myaccessKeyId' 
}); 

var app = express(), 
    s3 = new aws.S3(); 

app.use(bodyParser.json()); 

var upload = multer({ 
    storage: multerS3({ 
     s3: s3, 
     bucket: 'my_buket', 
     key: function (req, file, cb) { 
      // console.log(file); 
      // console.log(req); 
      var newFileName = Date.now() + "-" + file.originalname; 
      var fullPath = '/'+ newFileName; 
      console.log(fullPath) 


var cfKeypairId = 'HKASHDDAKSHDHSDKAJ'; 
var cfURL = 'http://smbhdshdb.cloudfront.net'+fullPath; 
var signedUrl = cfUtil.getSignedUrl(cfURL, { 
    keypairId: cfKeypairId, 
    expireTime: Date.now() + 60000, 
    privateKeyString: cfPk 
}); 

console.log(signedUrl); 

// console.log(req); 
      cb(null, fullPath); //use Date.now() for unique file keys 

     } 


    }) 
}); 


app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/index.html'); 
}); 


app.post('/upload', upload.any(), function (req, res, next) { 
    res.send("Uploaded!"); 
}); 

app.listen(3001, function() { 
    console.log('Example app listening on port 3001!'); 
}); 

Ci-dessous mon fichier index.html:

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
Hey! Lets try uploading to s3 directly :) 

<form method="post" enctype="multipart/form-data" action="/upload"> 
    <p> 
     <input type="text" name="title" placeholder="optional title"/> 
    </p> 

    <p> 
     <input type="file" name="upl"/> 
     <!-- <input type="file" name="uplo"/> --> 
    </p> 

    <p> 
     <input type="submit"/> 
    </p> 
</form> 
</body> 
</html> 

Ci-dessous est ma politique de seau qui ne va pas avec principale. Est-ce que quelqu'un peut me donner comment donner la politique de compartiment et comment activer la sécurité à mes dossiers? J'ai seulement besoin que les fichiers soient diffusés ou téléchargés uniquement avec les URLs signées.

aidez s'il vous plaît?

Répondre

0

quelqu'un peut-il me donner comment donner la politique du compartiment et comment activer la sécurité à mes fichiers?

Si vous avez (1) créé vos CloudFront paires de clés pour vos confiance signataires, (2) Ensemble Restrict Bucket Accès à Oui dans les Origines onglet et (3) fait que votre seau la stratégie n'autorise pas l'accès GetObject à l'exception de l'Identité d'accès origine, vos fichiers sont alors sécurisés à l'aide d'URL signées (ou de cookies). Vous pouvez essayer de coller l'URL dans votre navigateur pour voir qu'elle n'est pas téléchargée. Chaque fois qu'un client doit télécharger votre fichier privé, il doit utiliser le signedUrl votre application créée.

Voir:

Creating CloudFront Key Pairs for Your Trusted Signers

Creating an Origin Access Identity and Adding it to Your Distribution Using the CloudFront Console

Et je besoin de savoir quelle est la valeur de 'XXXXXXXXXXXXX' dans la variable ci-dessous.

C'est simplement une chaîne aléatoire qui est générée lorsque vous créez votre distribution CloudFront la première fois. Il devient partie intégrante du nom de domaine . Par exemple: d7ip55b96n1wwe.cloudfront.net.