2016-05-24 12 views
1

私はAmazon S3バケットmybucketを持っていて、特定のネストされたフォルダ(またはS3用語では特定の「接頭辞」)のコンテンツへのアクセスのみを有効にしたいと考えています。Amazon S3:特定のリファラーのためだけに、特定のパスへのアクセスを許可する方法は?

次のS3バケットポリシーを試しましたが、機能しません。条件を追加した後、私はブラウザでアクセス拒否エラーを取得し始めました。

{ 
    "Version": "2012-10-17", 
    "Id": "Policy for mybucket", 
    "Statement": [ 
     { 
      "Sid": "Allow access to public content only from my.domain.com", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mybucket/public/content/*", 
      "Condition": { 
       "StringLike": { 
        "aws:Referer": [ 
         "http://my.domain.com/*" 
        ] 
       } 
      } 
     } 
    ] 
} 

これを達成するためにポリシーはどのように見えるのですか?

+0

「動作しません」を定義します。このポリシーは有効です。 –

+0

こんにちは@ Michael-sqlbot、私は私の声明を明確にした。正直言って、私はまだこれをデバッグしています。少なくとも私のバケツにコンテンツを配布するCloudfrontでRefererを受け取ったようです(まだ利用できないS3のログ)。動作は本当に奇妙です、私がrefererで条件を追加すると、アクセス拒否のエラーが出ます。 – Visionscaper

+0

CloudFrontはデフォルトでリファラーをS3に転送しません。キャッシュヒット率が低下するため、CloudFrontはキャッシュをチェックしてしまうため、おそらくは悪い考えです同じURL *と* refererのレスポンスがあり、それぞれのリファラが独自のキャッシュされたコピーを持つようになります。そうでなければ、リクエストはS3に送られてリファラを検証します)。 CloudFrontのアクセスIDを使用してCloudFrontがバケットにアクセスできるようにし、[AWS Web Application Firewall](https://aws.amazon.com/waf/)を使用してCloudFrontへのアクセスを制御します。 –

答えて

1

ポリシーを2つのステートメントに分割する必要があります。フォルダ(接頭辞)へのアクセスを許可する1つと、参照者がホワイトリストにあるドメインの1つではない場合にアクセスを拒否するアクセス許可1つ:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy for mybucket", 
    "Statement": [ 
     { 
      "Sid": "Allow access to public content", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mybucket/public/content/*" 
     }, 
     { 
      "Sid": "Deny access to public content when not on my.domain.com", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::mybucket/public/content/*", 
      "Condition": { 
       "StringNotLike": { 
        "aws:Referer": [ 
         "http://my.domain.com/*" 
        ] 
       } 
      } 
     } 
    ] 
} 
+0

それは私のために働いた。私は既にCloudfrontを使用していて、バケツを制限していたので、ポリシーの2番目の部分は必要ありませんでした。 –

+0

ええと...私はあまりにも早く話したと思います。私はこの作業を行うために、Cloudfrontディストリビューションに別の動作を追加しました。 –

関連する問題