2017-08-18 3 views
0

J'ai une règle de redirection personnalisée pour mon seau sur S3:règles de redirection personnalisées sur le rendement S3 403 lors de l'utilisation CloudFront

<RoutingRules> 
    <RoutingRule> 
    <Condition> 
     <KeyPrefixEquals/> 
     <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> 
    </Condition> 
    <Redirect> 
     <Protocol>https</Protocol> 
     <HostName>example2.com</HostName> 
     <ReplaceKeyPrefixWith>services/create?key=</ReplaceKeyPrefixWith> 
     <HttpRedirectCode>307</HttpRedirectCode> 
    </Redirect> 
    </RoutingRule> 
</RoutingRules> 

Et mon seau a une bonne politique:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Sid": "PublicReadForGetBucketObjects", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::example.com/*" 
     } 
    ] 
} 

Cela fonctionne bien quand j'y accède via son URL interne http://example.com.s3-website-us-east-1.amazonaws.com et qu'il me redirige vers mon autre serveur correctement.

Cependant, cela ne fonctionne pas avec mon installation CloudFront. Lorsque j'essaie d'y accéder directement (http://example.com/images/dummy.jpg), je reçois un 403 AccessDenied.

Répondre

0

Apparemment, lorsque vous utilisez le compartiment S3 par défaut comme origine, il ne respecte pas les règles de redirection.

Par défaut, il essaie d'utiliser:

example.com.s3.amazonaws.com, mais vous devez le forcer à une origine personnalisée:

example.com.s3-website-us-east-1.amazonaws.com à la place. Une fois que je l'ai forcé, il a commencé à fonctionner.

+1

Correct. [* "Sur la page Créer une distribution, dans la section Paramètres d'origine, pour Origine du nom de domaine, saisissez le point de terminaison d'hébergement de site Web statique Amazon S3 pour votre compartiment, par exemple, * example.com.s3-website-us-east-1. ** Remarque ** * Veillez à indiquer le point de terminaison d'hébergement de site Web statique, pas le nom du compartiment. "*] (http://docs.aws.amazon.com/AmazonS3/latest/ dev/website-hosting-cloudfront-walkthrough.html) Si vous sélectionnez le compartiment dans la liste, CloudFront se connecte au point de terminaison REST du compartiment, au lieu du point de terminaison du site Web. –