J'ai un ensemble de fichiers vidéo qui ont été copiés d'un compartiment AWS d'un autre compte vers mon compte dans mon propre compartiment.
Je rencontre maintenant un problème avec tous les fichiers où je reçois des erreurs d'accès refusé lorsque j'essaie de rendre tous les fichiers publics.
Plus précisément, je me connecte à mon compte AWS, passe en S3, explore en détail les structures de dossiers pour localiser l'un des fichiers vidéo.
Lorsque je regarde ce fichier spécifique, l'onglet des autorisations sur les fichiers ne montre aucune autorisation attribuée à qui que ce soit. Aucun utilisateur, groupe ou autorisation système n'a été attribué.
Au bas de l'onglet Autorisations, je vois une petite boîte qui dit "Erreur: Accès refusé". Je ne peux rien changer au fichier. Je ne peux pas ajouter de méta-données. Je ne peux pas ajouter d'utilisateur au fichier. Je ne peux pas rendre le fichier public.
Existe-t-il un moyen de prendre le contrôle de ces fichiers afin de les rendre publics? Il y a plus de 15 000 fichiers/environ 60 Go de fichiers. J'aimerais éviter de télécharger et de re-télécharger tous les fichiers.
Avec l'aide et les suggestions des gens ici, j'ai essayé ce qui suit. J'ai créé un nouveau dossier dans mon panier appelé "média".
J'ai essayé cette commande:
aws s3 cp s3://mybucket/2014/09/17/thumb.jpg s3://mybucket/media --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=emailaddress=my_aws_account_email_address
Je reçois une erreur fatale 403 lors de l'appel de l'opération HeadObject: Interdit.
Une énigme très intéressante! Heureusement, il existe une solution.
Tout d'abord, un récapitulatif:
J'ai réussi à reproduire cela et peux confirmer que les utilisateurs du compte B ne peuvent pas accéder au fichier, pas même l'utilisateur root du compte B!
Heureusement, les choses peuvent être réparées. La commande aws s3 cp
dans L'interface de ligne de commande AWS peut mettre à jour les autorisations sur un fichier lorsqu'elle est copiée sous le même nom. Cependant, pour déclencher cela, vous devez également mettre à jour quelque chose d'autre sinon vous obtenez cette erreur:
Cette demande de copie est illégale car elle tente de copier un objet sur lui-même sans modifier ses métadonnées, sa classe de stockage, son emplacement de redirection de site Web ou ses attributs de chiffrement.
Par conséquent, les autorisations peuvent être mises à jour avec cette commande:
aws s3 cp s3://my-bucket/ s3://my-bucket/ --recursive --acl bucket-owner-full-control --metadata "One=Two"
--acl bucket-owner-full-control
accordera la permission au compte B afin que vous puissiez utiliser les objets normalementRésultat final: Un seau que vous pouvez utiliser!
aws s3 cp s3://account1/ s3://accountb/ --recursive --acl bucket-owner-full-control
Pour définir correctement les autorisations appropriées pour les fichiers nouvellement ajoutés, ajoutez cette stratégie de compartiment:
[...]
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012::user/their-user"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
Et définissez ACL pour les fichiers nouvellement créés dans le code. Exemple Python:
import boto3
client = boto3.client('s3')
local_file_path = '/home/me/data.csv'
bucket_name = 'my-bucket'
bucket_file_path = 'exports/data.csv'
client.upload_file(
local_file_path,
bucket_name,
bucket_file_path,
ExtraArgs={'ACL':'bucket-owner-full-control'}
)
source: https://medium.com/artificial-industry/how-to-download-files-that-others-put-put-in-your-aws-s3-bucket-2269e20ed041 (disclaimer: écrit par moi)
Je crains que vous ne puissiez pas transférer la propriété comme vous le souhaitez. Voici ce que vous avez fait:
Ancien compte copie les objets dans le nouveau compte.
La "bonne" façon de procéder (en supposant que vous souhaitiez devenir propriétaire du nouveau compte) serait la suivante:
Nouveau compte copie les objets de l'ancien compte.
Voir la petite mais importante différence? Docs S3 genre de l'expliquer.
Je pense que vous pourriez vous en sortir sans avoir à télécharger le tout en copiant simplement tous les fichiers dans le même compartiment, puis en supprimant les anciens fichiers. Assurez-vous de pouvoir modifier les autorisations après la copie. Cela devrait aussi vous faire économiser de l'argent, car vous n'aurez pas à payer les coûts de transfert de données pour tout télécharger.