2013-08-24 6 views
0

Les urls qui travaillent à mon contenu sontURL AWS S3 CNAME 403 Problème

https://<bucket>.s3.amazonaws.com/<object> http://<bucket>.s3.amazonaws.com/<object>
<bucket>.s3.amazonaws.com/<object>
s3.amazonaws.com/<bucket>/<object>

Je veux cette URL pour travailler

<bucket>/<object>

mais cela ne fonctionne pas.

Ce code fonctionne

$request = $client->get("http://{$bucket}.s3.amazonaws.com/{$s3name}");
return $client->createPresignedUrl($request, $time);

Ce code ne

$request = $client->get("http://{$bucket}/{$s3name}");
return $client->createPresignedUrl($request, $time);

Quelqu'un peut-il m'aider ici? Dois-je avoir https pour faire ce travail? J'ai ajouté le CNAME aussi.

Répondre

0

Pour ce faire, vous devez utiliser l'hébergement virtuel: http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html

Cela implique deux parties - d'abord, mettre en place un CNAME avec votre nom d'hôte souhaité. Ensuite, assurez-vous d'envoyer le nom d'hôte correct lors de la demande. A partir de la documentation:

GET /homepage.html HTTP/1.1 
Host: johnsmith.net.s3.amazonaws.com 
+0

J'ai fait ce truc CNAME. Le CNAME est des fichiers. .com qui pointe vers .s3.amazonaws.com. – Toosick

+0

CNAME est seulement une partie. Envoyez-vous également l'en-tête de l'hôte correct lors de votre demande? –

+0

Oui.Je peux afficher le contenu public à / mais je ne peux pas afficher les URLs privées signées de l'API AWS SDK PHP 2 qui sont /? . Je peux voir les fichiers privés qui sont .s3.amazonaws.com/. – Toosick

0

Lors de la signature d'une demande d'un seau, vous aurez accès à la composante « s3.amazon ... » dans le nom d'hôte, la chaîne à la ressource signe COMPREND, qui ressemble à ceci:

/bucket/object 

la conclusion naturelle est que si vous utilisez un seau virtuel hébergé, alors la ressource ressemblerait à ceci:

/object 

Cependant, ce n'est pas correct. Vous avez toujours besoin du nom du compartiment avant le nom de l'objet dans la chaîne à signer, même s'il n'est pas inclus dans la partie path de l'URL (puisque s3 le récupère de l'en-tête Host:).

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

Pour vérifier cela, vous pouvez prendre manuellement l'URL signé généré par le code que vous montriez dans « ce code fonctionne, » changer le nom d'hôte à votre nom de seau, retirer le seau du chemin, et votre devrait trouver que la signature est toujours valide même si vous avez manuellement réécrit l'URL au format désiré.

+0

Oui, j'ai déjà essayé. Il semble que la redirection est correcte, mais je n'ai pas les permissions pour accéder au fichier. La page 403 dit 'Interdit code: AccessDenied Message: Accès refusé RequestId: 6BABFAE0FAE788D7 HostId: 8PKrtuqW2DU + T3YXhcyBkkvj0RM3w04ojZTCe9NvxRXPu522Bi1FWTC7eR3mNgm0' – Toosick

+0

C'est possible, mais si vous êtes en mesure d'y accéder d'une façon, vous devriez être en mesure d'accéder à l'autre si les informations d'identification de la signature sont identiques ... votre nom de compartiment est en minuscules, aucun caractère spécial autre que des tirets ou des chiffres, 63 caractères maximum ou moins, et dans DNS, "your.bucket.com" est configuré comme pointant CNAME à "your.bucket.com.s3.amazonaws.com"? –

+0

Oui. Je peux afficher le contenu public à / mais je ne peux pas afficher les URLs privées signées de l'API AWS SDK PHP 2 qui sont /? Toosick