2016-09-27 9 views
5

私はCloudflareをS3にホストされているファイルに対してCDNとして動作させようとしています。S3 with Cloudflareが直接アクセスを許可しない

S3バケット:cdn.mydomain.com.s3.amazonaws.com

CDN(CloudFlareの):たとえばcdn.mydomain.com

私が欲しいのはcdn.mydomain.com/file.jpg(CloudFlareの)ではなくcdn.mydomain.com.s3.amazonaws.com/file.jpg(S3)にアクセスできるようにすることです。

今、私は私のバケツを指すのCloudFlare上で設定CNAME、および以下のCORSを持っている:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>*</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>Authorization</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

私はS3またはCDN経由で任意のファイルにアクセスしようとすると、私は許可拒否を取得します。私がファイルを一般公開した場合、S3とCDN経由でそのファイルにアクセスできます。

私は*.mydomain.comAllowedOriginを変更しようとしましたが、運はありません。

+0

希望この記事の助けあなた https://www.maxcdn.com/one/tutorial/s3-access/ – rocketspacer

答えて

7

解決策が見つかりました。 article at CloudFlare's support centerにはこれが言及されていません。

CORSではなくバケットポリシーを編集する必要があります。その記事にあるように、バケットにアクセスするためにドメインを許可する代わりに、CloudFlare IPを許可する必要があります。参考のため、ここではIPのリストは以下のとおりです。ここでhttps://www.cloudflare.com/ips

はCloudFlareので動作するようにバケットポリシーのサンプルです:

{ 
     "Sid": "SOME_STRING_ID_HERE", 
     "Effect": "Allow", // or deny 
     "Principal": {"AWS": "*"}, // or whatever principal you want 
     "Action": "s3:GetObject", // or whatever action you want 
     "Resource": "arn:aws:s3:::cdn.mydomain.com/*", // or whatever resource you want 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": [ 
        "103.21.244.0/22", 
        "103.22.200.0/22", 
        "103.31.4.0/22", 
        "104.16.0.0/12", 
        "108.162.192.0/18", 
        "131.0.72.0/22", 
        "141.101.64.0/18", 
        "162.158.0.0/15", 
        "172.64.0.0/13", 
        "173.245.48.0/20", 
        "188.114.96.0/20", 
        "190.93.240.0/20", 
        "197.234.240.0/22", 
        "198.41.128.0/17", 
        "199.27.128.0/21" 
       ] 
      } 
     } 
    } 
0

それはS3にエントリーガードとしてドメイン名を使用することをお勧めします、というよりIPのリストサイトのS3コンソールへ

ゴー
は、あなたのドメイン名

S3-CORS-Config exampleのためのあなたのCORSRulesを追加CORS設定
の追加]を選択します許可
の下プロパティパネル
を選択

もっとCORSの設定はちょっと間違いhere


見つけることができますが、この答えは唯一のあなたの資産を参照するからではなく、S3はあなたのための生成元エンドポイントからの他のサイト ...

0
を禁止

承認された解決策は正確に機能しません。 CloudFlareにアクセスするだけです。そのソリューションが機能するには、ポリシー内の他の場所のすべてを明示的に拒否する必要があります。このバケットポリシーは、Cloudflareの最新のIPアドレス(IPv6を含む)に対して更新され、クラウドフレアIPアドレスからのすべてのアクセスをそのまま受け入れません。

{ 
"Id": "Policy1517260196123", 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "A string ID here", 
     "Action": "s3:*", 
     "Effect": "Deny", 
     "Resource": "arn:aws:s3:::yourbucket.example.com/*", 
     "Condition": { 
      "NotIpAddress": { 
       "aws:SourceIp": [ 
        "103.21.244.0/22", 
        "103.22.200.0/22", 
        "103.31.4.0/22", 
        "104.16.0.0/12", 
        "108.162.192.0/18", 
        "131.0.72.0/22", 
        "141.101.64.0/18", 
        "162.158.0.0/15", 
        "172.64.0.0/13", 
        "173.245.48.0/20", 
        "188.114.96.0/20", 
        "190.93.240.0/20", 
        "197.234.240.0/22", 
        "198.41.128.0/17", 
        "2400:cb00::/32", 
        "2405:8100::/32", 
        "2405:b500::/32", 
        "2606:4700::/32", 
        "2803:f800::/32", 
        "2c0f:f248::/32", 
        "2a06:98c0::/29" 
       ] 
      } 
     }, 
     "Principal": { 
      "AWS": "*" 
     } 
    } 
] 

}

+0

まあ、私はバケツがパブリックではなかったことを言及するのを忘れてしまいました。とにかく誰もそれにアクセスすることはできませんでした。あなたのアプローチも有効です。バケットがパブリックであると仮定した場合、ポリシーは 'NotIpAddress'の場合にはアクセスをブロックします。同じアイデア;) – rlcabral

関連する問題