3

特定のドメインからのCloudfrontファイルのホットリンクをブロックしようとしています。オンラインの例とAmazon独自のポリシージェネレーターを組み合わせて、私はこれを思いついた:

{
  "Version": "2008-10-17",
  "Id": "http referer policy",
  "Statement": [{
    "Sid": "Block image requests",
    "Action": "s3:GetObject",
    "Effect": "Deny",
    "Resource": "arn:aws:s3:::mybucket/subdir/*",
    "Condition": {
      "StringLike": {
        "aws:Referer": [
          "http://example.com/*"
        ]
      }
    },
    "Principal": {
      "AWS": "*"
    }
  }]
}

のサブディレクトリにあるファイルの無効化リクエストを送信しmybucket、数分後、まだ送信されているリファラーヘッダーを使用して画像を再読み込みしようとしました(Chromeの開発ツールを使用して確認済み)。Ctrl + F5でハードリロードを実行し、応答ヘッダーに「X-Cache:Miss from cloudfront」が含まれていたため、間違いなく最新バージョンのイメージを取得しています。

ただし、画像は引き続き正常に表示され、ブロックされません。ポリシージェネレーターには「aws:Referer」キーのオプションがありませんでしたが、Amazonのドキュメントにあります。ここで何か間違ったことをしましたか?

4

1 に答える 1

1

アップデート2

ポリシーを再検討するそもそも、CloudFrontがオブジェクトへのアクセスを実際にどのように許可したのでしょうか。たまたま、Amazon S3でCloudFrontの使用を開始するなどの一般的なアドバイスに従ってください。オブジェクトのアクセス許可が、AmazonS3バケット内の各オブジェクトに対してすべてをパブリックにするように設定されていることを確認する必要があります。

この場合、利用可能な3つの異なるS3アクセス制御メカニズム間の相互作用が原因で、関連する落とし穴に遭遇した可能性があります。これは、実際にはかなり混乱する可能性があります。これは、たとえばACLとバケットポリシーを一緒に使用することで対処されます。

ACLとバケットポリシーがバケットに割り当てられている場合、Amazon S3は、Amazon S3リソースへのアカウントのアクセス許可を決定するときに、既存のAmazonS3ACLとバケットポリシーを評価します。アカウントがACLまたはポリシーで指定されたリソースにアクセスできる場合、アカウントは要求されたリソースにアクセスできます。

したがって、ACLをバケットポリシーに移行し(つまり、aws:refererを介して拒否する前にCloudFrontアクセスを許可する)、その後、過度に寛大なACLを削除する必要があります。

幸運を!


アップデート1

さて、クライアントのキャッシュが邪魔になったので、これは些細なことではないのではないかと思います(AWSフォーラムでaws:refererを検索すると明らかです)。したがって、数回の反復が必要になる可能性があります(特に調査した場合)トピックはすでに自分で):

  • 発生する最も一般的な問題は、AWSドキュメントの主要な空白エラーです(これは、単純なドキュメントの修正により、ユーザーとAWSサポートスタッフに代わって多くの無駄な時間が改善されるため、特に厄介です)
    • ポリシーにはこの問題はありませんが、実際のドメインをサニタイズした場合、実際に本番コードのエラーを置き換えた可能性がありますか?
  • HTTP refererまた、ヘッダーが必ずしも利用可能になるとは限らないことを理解することも重要です。たとえば、リファラーの非表示を参照してください(したがって、ポリシーは悪意のあるアクセスを防ぐことはできませんが、明らかに問題ではありません)
    • Chrome開発者ツールを介して送信されることを確認したことはすでに述べたので、これも当てはまりません(セキュリティレベルの低下を強調するために言及しています)。

ポリシーは一見問題ないように見えますが、この方向をさらに掘り下げる前に、Chromeのキャッシュを実際に正常にバイパスしていることを確認することをお勧めします。これは、他のブラウザのユーザーよりも簡単ではないことで有名です。特に、Ctrl + F5 ページをリロードするだけで、キャッシュをバイパスしません (少なくとも信頼性は高くありません)。

そこにも記載されているように、他のキーの組み合わせの1つを使用して、ページをリロードし、キャッシュをバイパスすることができます(最初のリロード後、混乱する2番目を含むCtrl + F5)。ただし、代わりに次の2つの方法のいずれかを使用することをお勧めします。

  • Chromeの開発者ツールは、キャッシュなしでブラウジングするための専用サポートを提供します-ツールボックスパネルの右下隅にある設定の歯車アイコンです。これをクリックすると、オプションパネルのオーバーレイがトリガーされます。これらの中には、[キャッシュを無効にする]セクションがあります。ネットワーク
  • ChromeのシークレットモードCtrl + Shift + Nは、アクセスしたWebサイトに関する情報をGoogle Chromeに保存しないようにします。これは、今日の時点で(もちろんいつでも変更される可能性があります)、キャッシュされたコンテンツ、Cookie、DNSなどが期待どおりに含まれているようです。 、現在はあまり明示的ではありませんが。
于 2012-01-27T01:10:24.197 に答える