2011-05-04 3 views
14

J'ai la politique de seau suivant mis sur mon seau:politique seau S3 amazon - restreindre l'accès par referer mais sans restreindre si urls sont générées via l'authentification de chaîne de requête

{ 

"Version": "2008-10-17", 

"Id": "My access policy", 

"Statement": [ 

    { 

"Sid": "Allow only requests from our site", 

"Effect": "Allow", 

"Principal": { "AWS": "*"}, 

"Action": "s3:GetObject", 

"Resource": "arn:aws:s3:::my_bucket/*", 

"Condition": { 

    "StringLike": { 

     "aws:Referer": [" http://mydomain.com/*"," http://www.mydomain.com/*"] 

     } 

       } 

}, 

{ 

    "Sid": "Dont allow direct acces to files when no referer is present", 

    "Effect": "Deny", 

    "Principal": {"AWS": "*" }, 

    "Action": "s3:GetObject", 

    "Resource": "arn:aws:s3:::my_bucket/*", 

    "Condition": { 

    "Null": {"aws:Referer": true } 

     } 

     } 

] 

    } 

J'ai aussi configuré query string authentication, mais il semble que Je ne peux pas avoir les deux. Si mes stratégies de compartiment sont définies pour refuser toute requête qui ne provient pas de mydomain, mon URL temporaire utilisant l'authentification par chaîne de requête ne sera pas non plus diffusée. Alors ma question est, comment puis-je avoir les deux? Existe-t-il un moyen de vérifier les paramètres de l'URL et de voir si elle a un paramètre appelé "Signature" et dans ce cas, n'applique pas la politique de référence?

Répondre

18

Supprimez l'espace dans la chaîne de redirection "http://mydomain.com/ *" qui est faux ... les exemples Amazon ont également fait cette erreur.

Pour la deuxième déclaration la plus facile de le résoudre est de supprimer cette déclaration ensemble et avoir les autorisations vos fichiers (ACLs) comme privées (propriétaire-lecture/écriture et nowrite World-NoRead /)

Je suis pas sûr, mais il apparaît que même si vous avez une instruction Deny, un fichier peut toujours être lu s'il a une autorisation publique (World Read).

De même, si vous distribuez les fichiers sur CloudFront, n'oubliez pas de lui permettre de lire le compartiment également. Ainsi, une politique de seau complet ressemblera:

{ 
"Version": "2008-10-17", 
"Id": "YourNetwork", 
"Statement": [ 
    { 
     "Sid": "Allow get requests to specific referrers", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::yourbucket/*", 
     "Condition": { 
      "StringLike": { 
       "aws:Referer": [ 
        "http://www.yourwebsite.com/*", 
        "http://yourwebsite.com/*" 
       ] 
      } 
     } 
    }, 
    { 
     "Sid": "Allow CloudFront get requests", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::12345678:root" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::yourbucket/*" 
    } 
] 
} 

(changer le 12345678 à votre compte AWS numéro d'identification sans les tirets)

+0

Merci pour la réponse. Cette information sera utile plus tard. Pour l'instant, j'utilise des liens signés avec des délais d'expiration différents à des fins différentes. – blushrt

Questions connexes