2017-06-15 3 views
0

J'utilise le stockage S3 d'Amazon avec le cryptage côté serveur avec les clés fournies par le client (SSE-C) pour stocker les fichiers vidéo. J'utilise Django comme serveur principal et j'ai stocké toutes les clés de noms et les clés secrètes associées à chaque fichier dans la base de données sur un conteneur EC2.Streaming des vidéos côté serveur cryptées sur S3 avec cloudfront

Je veux diffuser ces vidéos en utilisant le service amazon cloudfront. J'ai créé et configuré une distribution cloudfront avec stockage S3. Je suis capable de diffuser très facilement les vidéos non cryptées, mais je ne peux pas accéder aux vidéos cryptées car elles nécessitent la clé de nom et la clé secrète pour accéder aux données cryptées côté serveur.

Je n'ai trouvé aucune aide à cet égard. Est-il même possible de servir les fichiers média chiffrés côté serveur (SSE-C) en utilisant cloudfront?

Si possible, veuillez me guider vers la meilleure solution. Toute aide à cet égard serait grandement appréciée. Merci

Répondre

0

il nécessite la clé de nom et la clé secrète afin d'accéder aux données chiffrées côté serveur.

Ce n'est pas l'intégralité du problème; toutefois. CloudFront signed URLs with an origin access identity renverra les demandes de façon transparente afin que S3 autorise l'accès à ces objets lorsque CloudFront conclut que la demande est autorisée, mais que vous ne pouvez pas créer une URL signée CloudFront compatible avec SSE-C. Ceci est à son tour dû au fait que SSE-C dans S3 ne prend pas en charge le passage des paramètres nécessaires à S3 dans la chaîne de requête.

Lorsque vous utilisez l'URL presigned pour télécharger un nouvel objet, récupérer un objet existant, ou récupérer uniquement les métadonnées d'objets, vous devez fournir tous les en-têtes de chiffrement dans votre application client

http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html

Les paramètres de cryptage doivent être envoyés en tant qu'en-têtes et non en tant que paramètres de requête avec SSE-C. Et, si vous y réfléchissez, il semble y avoir peu d'intérêt à crypter des objets avec des clés qui sont révélées et consignées à chaque requête faite - les clés seraient dans la chaîne de requête.

SSE-S3 fonctionne de manière transparente avec CloudFront. SSE-KMS, je m'attendrais à être également supporté (puisque, d'après la documentation de l'API S3, aucun en-tête lié au chiffrement n'est requis (ou autorisé) pour les requêtes GET).

têtes de requête de chiffrement, comme x côté-AMZ-server-cryptage, ne doivent pas être envoyés pour les requêtes GET si votre objet utilise le chiffrement côté serveur avec des clés de chiffrement KMS gérés AWS (SSE-KMS) ou d'un serveur chiffrement -side avec les clés de chiffrement gérées Amazon S3 (SSE-S3)

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html

+0

Merci Michael pour votre réponse. Mais c'est encore un peu flou pour moi. Ce serait très gentil de votre part d'élaborer un peu plus loin. Voici ce que j'ai compris de votre réponse (veuillez me corriger si je me trompe): Le chiffrement de type SSE-C ne convient pas si l'on veut diffuser du contenu via cloudfront.Afin de servir les données via cloudfront et de les garder cryptées sur S3, il faudrait utiliser un type de cryptage côté serveur où les clés sont gérées par Amazon lui-même et non par le client comme SSE-KMS. –

+0

ou puis-je être en mesure de diffuser des vidéos cryptées SSE-C en passant la clé secrète et la clé de nom dans l'en-tête de la requête? –

+0

Je ne pense pas que CloudFront transmettra les en-têtes nécessaires à S3 même si votre application peut les injecter dans la requête. En fait, en y réfléchissant, je ne suis pas sûr que CloudFront fonctionnera avec SSE-KMS, du moins dans certaines régions S3. Les régions plus récentes, comme Londres, pourraient le faire, mais les régions plus anciennes, comme l'Oregon, ne le seront certainement pas, en raison de certaines caractéristiques de conception en place qui nécessiteraient des changements qui briseraient certaines utilisations existantes. Pouvez-vous expliquer votre motivation pour contrôler le cryptage de cette façon? Peut-être que vous résolvez le mauvais problème? –