ビデオアプリで作業しており、_https://***.amazonaws.com/***
_のようなデフォルトURLを使用してAWS S3にファイルを保存していますが、コンテンツ配信に高速なCloudFrontを使用することにしました。
CFを使用して、このURL _https://***.cloudfront.net/***
_を使用して403 (Forbidden)
を取得し続けます。私は何かを見逃しましたか?
バケットを指すCloudFrontからコンテンツをロードすることを決定するまで、すべてが正常に機能します。
解決策はありますか?
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)
また、それは単純なものかもしれません。 S3バケットに初めてファイルをアップロードするとき、そのバケット内の他のファイルがパブリックであっても、バケット自体がパブリックであっても、そのファイルは非パブリックです。
AWSコンソールでこれを変更するには、公開したいフォルダー(アップロードしたフォルダー)の横にあるチェックボックスをオンにし、メニューから[公開]を選択します。
そのフォルダー(およびサブフォルダー)内のファイルが公開され、S3からファイルを提供できるようになります。
AWS CLIの場合、次のようにコマンドに「--acl public-read」オプションを追加します。
aws s3 cp index.html s3://your.remote.bucket --acl public-read
私にとっては、CodePipelineにS3バケットポリシーへのアクセスを許可する必要がありました。たとえば、次のようなものです:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mys3bucket/*"
}
]
}