Partagez un fichier privé avec un lien temporaire

AWSBeginner
Pratiquer maintenant

Introduction

Un collègue a besoin de télécharger temporairement un rapport privé. Vous générerez et testerez un lien signé, vérifierez ses limites d'accès et nettoierez les ressources d'entraînement sans rendre le fichier public.

Terminez d'abord Organisez les documents avec des clés et des métadonnées pour les clés, les téléchargements et le nettoyage. Le compartiment privé et une identité restreinte sont préparés dans cette nouvelle VM ; aucune connexion personnelle ni rédaction de stratégie IAM n'est nécessaire. Utilisez Terminal et l'onglet AWS View, à côté. Gardez les liens de téléchargement complets privés.

Lien avec les certifications

Ce laboratoire propose une pratique des sujets d’examen suivants.

Lisez le rapport avec votre identité configurée

Dans cette étape, vous récupérerez le rapport autorisé et verrez qu'un autre objet privé reste en dehors des autorisations de votre identité.

Une autorisation définit ce qu'une identité peut faire sur une ressource. Votre lecteur préparé peut lister ce compartiment et lire shared/report.txt, mais ne peut pas lire private/payroll.txt ni modifier le stockage. Vous utiliserez ces autorisations sans rédiger de stratégies ; le cours IAM enseigne cela par la suite.

Rejoignez l'espace de travail avec cd (change directory, changer de répertoire) :

cd /home/labex/project

Listez le préfixe partagé du compartiment préparé :

aws s3 ls s3://labex-private-documents/shared/

La liste contient une ligne se terminant par report.txt ; sous ce préfixe, elle désigne la clé complète shared/report.txt. Le préfixe organise la clé ; son nom ne rend pas l'objet public. Votre requête AWS CLI réussit parce que l'identité configurée est autorisée à lister le compartiment.

Téléchargez le rapport avec une requête AWS CLI authentifiée :

aws s3 cp s3://labex-private-documents/shared/report.txt authorized-report.txt

Examinez ce rapport fictif avec cat, qui affiche un fichier texte local :

cat authorized-report.txt
Monthly report: 42000 revenue

Dans AWS View, ouvrez shared/report.txt. L'aperçu affiche le même contenu stocké, en utilisant l'accès autorisé du lecteur.

Exemple : le lecteur peut prévisualiser le rapport partagé.

Cet exemple montre le rapport disponible pour le lecteur configuré. Les commandes de téléchargement de l'étape suivante vérifient le lien temporaire lui-même.

Essayez de lire l'objet distinct de paie :

aws s3 cp s3://labex-private-documents/private/payroll.txt denied-payroll.txt

Cette commande doit échouer avec une erreur 403 ou AccessDenied. L'objet existe, mais ce lecteur n'est pas autorisé à le récupérer. L'accès d'une identité à un rapport ne lui donne pas accès à tous les objets du compartiment. Vous partagerez uniquement le rapport autorisé.

Générez et utilisez un lien de téléchargement temporaire

Dans cette étape, vous générerez un lien signé et téléchargerez le rapport avec un client HTTP plutôt qu'une identité AWS sur la requête du destinataire.

Un lien temporaire permet le téléchargement autorisé jusqu'à la fin de sa durée de validité.

Lien de téléchargement temporaire

Une URL présignée est un lien contenant une signature et une date d'expiration. Elle permet à un destinataire d'effectuer un téléchargement autorisé sans recevoir vos identifiants AWS. Les fichiers de liens sont préparés avec des autorisations restreintes ; gardez leur contenu complet privé.

aws s3 presign produit une URL autorisant le téléchargement de l'objet indiqué. --expires-in définit la durée de validité demandée en secondes ; 600 signifie dix minutes à partir de la génération. Cela ne modifie pas les autorisations d'accès de l'objet. L'opérateur > du shell écrit la sortie dans le fichier local déjà protégé au lieu d'afficher le lien complet :

aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 600 > download-link.txt

La commande n'affiche rien parce que sa sortie est allée dans le fichier. Toute personne détenant cette URL peut utiliser son accès délégué tant qu'elle est valide ; gardez donc le lien complet hors des captures d'écran et des messages publics.

Lisez le lien dans une variable du shell sans l'afficher. $(...) capture la sortie d'une commande ; cat lit le fichier et DOWNLOAD_URL=... affecte le texte capturé. Il n'y a pas d'espaces autour du = de l'affectation :

DOWNLOAD_URL=$(cat download-link.txt)

curl effectue une requête HTTP. -f traite les réponses d'erreur HTTP comme des échecs, -sS masque l'indicateur de progression tout en conservant les messages d'erreur et -o écrit le corps de la réponse dans un fichier local. Les guillemets doubles gardent l'URL entière dans un argument, y compris ses paramètres de requête :

curl -fsS "$DOWNLOAD_URL" -o shared-download.txt

Curl ne reçoit ni identifiants AWS ni profil ; l'URL elle-même contient la signature nécessaire à ce téléchargement. Lisez le résultat :

cat shared-download.txt
Monthly report: 42000 revenue

cmp compare deux fichiers octet par octet. && affiche le message uniquement lorsque la comparaison réussit :

cmp authorized-report.txt shared-download.txt && echo 'Temporary-link download matches'

Le message confirme que le téléchargement HTTP contient le même rapport. Générer un lien seul ne prouve pas qu'il fonctionne ; cette requête teste l'autorisation réelle, la signature et les octets stockés. Si plus de dix minutes s'écoulent avant le téléchargement, générez un nouveau lien et rechargez la variable avec les deux commandes ci-dessus.

Vérifiez l'expiration du lien

Dans cette étape, vous observerez la limite de validité d'un lien partagé. Le lien de dix minutes permettait de tester un téléchargement réussi ; un lien distinct de courte durée permet d'observer rapidement l'expiration.

Générez un autre lien avec une durée volontairement courte de quinze secondes, en le stockant dans le deuxième fichier protégé :

aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 15 > short-link.txt

Capturez-le sans l'afficher :

SHORT_URL=$(cat short-link.txt)

sleep attend le nombre de secondes indiqué. Attendez seize secondes pour dépasser la durée demandée de ce lien court :

sleep 16

Réutilisez le lien court d'origine, sans en générer un autre. Ici, -s masque l'indicateur de progression, -o enregistre le corps de la réponse et -w affiche uniquement le statut HTTP. %{http_code} est le champ de statut de curl et \n termine la ligne. Nous omettons -f pour que vous puissiez examiner le refus :

curl -s -o expired-response.xml -w '%{http_code}\n' "$SHORT_URL"

Statut attendu : 403. Le fichier existe toujours et votre identité peut toujours le lire, mais la fenêtre de validité de l'URL déléguée est terminée. Le corps XML de la réponse explique l'expiration de la requête ; vous pouvez examiner cette réponse sans risque, car elle ne contient pas le lien :

cat expired-response.xml

Son Code est AccessDenied et son Message est Request has expired.. Cela établit la raison du refus ; une erreur de connexion ne prouverait pas l'expiration.

Nettoyez avec l'identité de maintenance préparée

Dans cette étape, vous supprimerez les objets et le compartiment du laboratoire avec l'identité de maintenance préparée.

Votre lecteur par défaut n'a volontairement aucune autorisation de suppression. Un profil AWS CLI est une configuration nommée sélectionnant une identité et les paramètres des services. Le profil préparé cleanup est autorisé à supprimer les ressources de cet exercice. --profile cleanup le sélectionne pour les commandes suivantes ; vous ne saisissez ni n'examinez d'identifiants.

Supprimez le rapport partagé par sa clé exacte :

aws --profile cleanup s3 rm s3://labex-private-documents/shared/report.txt

Supprimez aussi l'autre objet fourni jetable par sa clé exacte :

aws --profile cleanup s3 rm s3://labex-private-documents/private/payroll.txt

Les deux messages de suppression nomment les objets prévus. Confirmez que le compartiment est vide avec une liste authentifiée :

aws --profile cleanup s3 ls s3://labex-private-documents/ --recursive

La commande réussie n'affiche aucune ligne d'objet. Supprimez le compartiment vide :

aws --profile cleanup s3 rb s3://labex-private-documents

La sortie est remove_bucket: labex-private-documents. Confirmez les compartiments restants :

aws --profile cleanup s3 ls

Aucune ligne de compartiment ne reste, et AWS View affiche No buckets. Un lien de téléchargement ne peut pas servir un fichier supprimé. Les fichiers locaux d'URL protégés peuvent aussi être supprimés avec rm local, car vous n'en avez plus besoin :

rm download-link.txt short-link.txt

Vos copies téléchargées du rapport restent disponibles pour examen. La suppression du stockage, l'expiration du lien et le nettoyage des fichiers locaux sont des opérations différentes ; vous avez effectué chacune des parties appropriées de cet exercice.

Résumé

Vous avez récupéré un rapport privé autorisé, observé le refus de lecture d'un objet, généré une URL de téléchargement temporaire et comparé le téléchargement HTTP avec la copie authentifiée. Vous avez ensuite vérifié qu'un lien de courte durée était refusé après expiration.

Une URL présignée délègue une opération déjà autorisée à l'identité qui la signe ; elle ne rend pas l'objet public et ne contourne pas les autorisations. Traitez le lien complet comme un secret d'accès temporaire. Vous avez terminé en utilisant un profil de maintenance distinct pour supprimer les objets, le compartiment et les fichiers locaux d'URL du laboratoire.