Kami mencoba membagikan bucket S3 melalui Cloudfront tetapi karena alasan tertentu satu-satunya respons adalah dokumen XML AccessDenied seperti berikut:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>89F25EB47DDA64D5</RequestId>
<HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId>
</Error>
Berikut pengaturan yang kami gunakan:
Dan ini kebijakan untuk ember
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity *********"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::x***-logos/*"
}
]
}
permissions
amazon-web-services
amazon-s3
amazon-cloudfront
Jordan Adams
sumber
sumber
Jawaban:
Jika Anda mengakses root dari distribusi CloudFront Anda, Anda perlu mengatur objek root default: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html
Untuk menentukan objek root default menggunakan konsol CloudFront:
Masuk ke Konsol Manajemen AWS dan buka konsol Amazon CloudFront di https://console.aws.amazon.com/cloudfront/ .
Di daftar distribusi di panel atas, pilih distribusi untuk diperbarui.
Di panel Rincian Distribusi , pada tab Umum , klik Edit .
Di kotak dialog Edit Distribusi , di bidang Objek Root Default , masukkan nama file objek root default.
Masukkan hanya nama objek, misalnya
index.html
,. Jangan menambahkan / sebelum nama objek.Untuk menyimpan perubahan Anda, klik Ya, Edit .
sumber
Saya baru saja mengalami masalah yang sama dan sementara jawaban Kousha memang memecahkan masalah untuk index.html di jalur root, masalah saya juga dengan sub-direktori ketika saya menggunakan yang dikombinasikan dengan index.html untuk mendapatkan "url cantik" (contoh .com / sesuatu / daripada "jelek" example.com/something.html)
Sebagian itu juga merupakan kesalahan Amazon, karena ketika Anda mengatur distribusi CloudFront, ia akan menawarkan Anda ember S3 untuk dipilih, tetapi jika Anda memilih salah satunya, itu akan menggunakan URL ember daripada URL hosting situs web statis sebagai backend.
Jadi untuk memperbaiki masalah:
sumber
Saya memiliki masalah yang sama dengan @Cezz, meskipun solusinya tidak akan berfungsi dalam kasus saya.
Segera setelah hosting situs web statis diaktifkan untuk bucket, itu berarti pengguna dapat mengakses konten baik melalui URL Cloudfront, atau URL S3, yang tidak selalu diinginkan. Sebagai contoh, dalam kasus saya, distribusi Cloudfront diaktifkan SSL, dan pengguna tidak dapat mengaksesnya melalui koneksi non-SSL.
Solusi yang saya temukan adalah:
Perhatikan bahwa dalam kasus saya, saya melayani aplikasi javascript satu halaman di mana semua jalur diselesaikan oleh index.html. Jika Anda memiliki jalur yang menyelesaikan ke objek yang berbeda di bucket S3 Anda, ini tidak akan berfungsi.
sumber
Dalam kasus saya, saya menggunakan beberapa asal-usul dengan "Pola Path" Perilaku bersama dengan Path Asal dalam ember S3 saya:
Penyiapan yang buruk:
Perilaku CloudFront:
/images/*
->My-S3-origin
My-S3-origin: Path Asal:
/images
File S3: /images/my-image.jpg
DAPATKAN Permintaan: /images/my-image.jpg -> 403
Apa yang terjadi adalah seluruh permintaan CloudFront GET dikirimkan ke asal:
/image/my-image.jpg
diawali oleh Origin Path:,/images
sehingga permintaan ke S3 sepertinya/images/images/my-image.jpg
tidak ada.Larutan
hapus Path Asal.
Ini memungkinkan saya untuk mengakses bucket dengan identitas akses asal dan izin bucket serta izin file individual dibatasi.
sumber
Dalam kasus saya, saya salah mengonfigurasi Rute 53. Saya telah membuat Alias di domain saya tetapi mengarahkannya ke S3 Bucket alih-alih distribusi CloudFront.
Saya juga menghapus objek root default. Konsol dapat benar-benar ditingkatkan jika mereka menambahkan sedikit informasi ke teks tanda tanya tentang konsekuensi potensial dari menghilangkannya.
sumber