Vous penseriez qu'ils rendraient public la lecture du comportement par défaut, n'est-ce pas? :) J'ai partagé votre frustration lors de la création d'une API personnalisée pour l'interface avec S3 à partir d'une solution C #. Voici l'extrait de code qui permet de télécharger un objet S3 et de le définir par défaut sur un accès en lecture publique:
public void Put(string bucketName, string id, byte[] bytes, string contentType, S3ACLType acl) {
string uri = String.Format("https://{0}/{1}", BASE_SERVICE_URL, bucketName.ToLower());
DreamMessage msg = DreamMessage.Ok(MimeType.BINARY, bytes);
msg.Headers[DreamHeaders.CONTENT_TYPE] = contentType;
msg.Headers[DreamHeaders.EXPECT] = "100-continue";
msg.Headers[AWS_ACL_HEADER] = ToACLString(acl);
try {
Plug s3Client = Plug.New(uri).WithPreHandler(S3AuthenticationHeader);
s3Client.At(id).Put(msg);
} catch (Exception ex) {
throw new ApplicationException(String.Format("S3 upload error: {0}", ex.Message));
}
}
La fonction ToACLString (acl) renvoie une lecture publique , BASE_SERVICE_URL est s3.amazonaws.com et la constante AWS_ACL_HEADER est x-amz-acl . Le plug-in et le contenu de DreamMessage vous sembleront probablement étranges, car nous utilisons le framework Dream pour rationaliser nos communications http. Essentiellement, nous faisons un http PUT avec les en-têtes spécifiés et une signature d'en-tête spéciale par spécifications aws (voir cette page dans la documentation aws pour des exemples de construction de l'en-tête d'autorisation).
Pour modifier une liste de contrôle d'accès à 1000 objets existante, vous pouvez écrire un script, mais il est probablement plus facile d'utiliser un outil GUI pour résoudre le problème immédiat. Le meilleur que j'ai utilisé jusqu'à présent provient d'une société appelée cloudberry pour S3; il semble qu'ils bénéficient d'un essai gratuit de 15 jours pour au moins un de leurs produits. Je viens de vérifier que cela vous permettra de sélectionner plusieurs objets à la fois et de définir leur ACL sur public via le menu contextuel. Profitez du cloud!