web-dev-qa-db-ja.com

AWS CloudFrontファイルをロードするときに403(禁止)を取得する

ビデオアプリで作業しており、_https://***.amazonaws.com/***_のようなデフォルトURLを使用してAWS S3にファイルを保存していますが、コンテンツ配信に高速なCloudFrontを使用することにしました。

CFを使用して、このURL _https://***.cloudfront.net/***_を使用して403 (Forbidden)を取得し続けます。私は何かを見逃しましたか?

バケットを指すCloudFrontからコンテンツをロードすることを決定するまで、すべてが正常に機能します。

解決策はありますか?

15
Shina

CloudFrontが403 (Bad request)を返すことができる別の理由を特定しました。たぶんそれはエッジのケースですが、私はあなたと共有したいと思います。

CloudFrontは、フォワードループ検出メカニズムを実装して、フォワーディングループ攻撃を防ぎます。
AWSサポートに従って、2つを超えるCloudFrontディストリビューションを元としてカスケードすることはできません。

CloudFront BをオリジンとしてCloudFront Aを設定し、CloudFront BからオリジンとしてCloudFront Cを設定し、CloudFront CからオリジンとしてS3バケットがあるとします。

A --> B --> C --> S3 bucket (can return a 403 error)

カスケードの最後にあるS3バケットにあるCloudFront Aからファイルをリクエストすると、CloudFront Cは403(Bad request)を返します。

カスケードが2つのCloudFrontディストリビューションと最後のS3バケットのみで構成されている場合、S3オリジンからのファイルのリクエストは機能します。

A --> B --> S3 bucket (works)

5
Stefan Rode

また、それは単純なものかもしれません。 S3バケットに初めてファイルをアップロードするとき、そのバケット内の他のファイルがパブリックであっても、バケット自体がパブリックであっても、そのファイルは非パブリックです。

AWSコンソールでこれを変更するには、公開したいフォルダー(アップロードしたフォルダー)の横にあるチェックボックスをオンにし、メニューから[公開]を選択します。

そのフォルダー(およびサブフォルダー)内のファイルが公開され、S3からファイルを提供できるようになります。

AWS CLIの場合、次のようにコマンドに「--acl public-read」オプションを追加します。

aws s3 cp index.html s3://your.remote.bucket --acl public-read
5
Patrick Chu

私にとっては、CodePipelineにS3バケットポリシーへのアクセスを許可する必要がありました。たとえば、次のようなものです:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mys3bucket/*"
        }
    ]
}
0
Jghorton14