S3 ile Amazon Cloudfront. Erişim reddedildi


91

S3 kovalarını Cloudfront aracılığıyla dağıtmaya çalışıyoruz, ancak bazı nedenlerden dolayı tek yanıt, aşağıdaki gibi bir AccessDenied XML belgesi:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>89F25EB47DDA64D5</RequestId>
    <HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId>
</Error>

İşte kullandığımız ayar:

Dağıtım ayarları Menşe Ayarları

Ve işte kova için politika

{
    "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/*"
        }
    ]
}

Önbellek Davranışı Ayarları - imgur.com/JBZqrRm
Jordan Adams

Cloudfront'un S3 kovasından okuyabildiğinden emin olun.
Nathan C

Bunu nasıl etkinleştirir veya kontrol ederim?
Jordan Adams

Menşe ayarları, son seçenek. Ekran görüntüsüne bakın. :)
Nathan C

Sanırım bunu daha önce denedim ve işe yaramadı, ancak yeniden değiştirdim ve dağıtım sürecinde. Kovanın politikasını gönderime ekleyeceğim :)
Jordan Adams

Yanıtlar:


91

CloudFront dağıtımınızın kökününe erişiyorsanız, varsayılan bir kök nesnesi ayarlamanız gerekir: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html

CloudFront konsolunu kullanarak varsayılan bir kök nesne belirlemek için:

  • AWS Yönetim Konsolu'na giriş yapın ve Amazon CloudFront konsolunu https://console.aws.amazon.com/cloudfront/ adresinde açın .

  • Üst bölmedeki dağılımlar listesinde, güncellenecek dağıtımı seçin.

  • In Dağıtım Detayları bölmesinde , üzerinde Genel sekmesine tıklayın Düzen .

  • In Düzenleme Dağıtım iletişim kutusunda, içinde Standart Kök Nesne alanında, varsayılan kök nesnenin dosya adını girin.

    Örneğin sadece nesne adını girin index.html. Nesne adından önce / eklemeyin.

  • Değişikliklerinizi kaydetmek için Evet, Düzenle'yi tıklayın .


Benim durumumda, bu ayar sorunu çözmedi. Hala Erişim Engellendi hatası alıyorum
KurioZ7

53

Ben de aynı sorunu yaşadım ve Kousha'nın yanıtı kök yoldaki index.html için sorunu çözerken , benim sorunum "güzel URL'leri" almak için index.html ile birleştirilenleri kullandığım gibi alt dizinlerle de oldu (örnek .com / bir şey / "çirkin" yerine example.com/something.html)

Kısmen Amazonlar'ın hatası da, çünkü CloudFront dağıtımını ayarladığınızda, seçim yapabileceğiniz S3 kovaları sunacak ancak bunlardan birini seçerseniz arka sayfa olarak statik web sitesi barındırma URL'si yerine kova URL'sini kullanacak.

Yani sorunu çözmek için:

  • Kova için statik web barındırma hizmetini etkinleştir
  • Set Index (ve belki de hata uygun) belge
  • Bitiş Noktası URL'sini Kopyala - yukarıdaki ayarların yanında bulabilirsiniz - Şunun gibi görünmelidir: <bucket.name> .s3-website- <aws-region> .amazonaws.com
  • Bu URL’yi CloudFront Dağıtım kökenli olarak kullanın. (Bu ayrıca CF Varsayılan Kök Nesne ayarını gereksiz hale getirir , ancak yine de ayarlamak için zarar vermez)

Bu yorum tarihi itibariyle mükemmel cevap.
Sai Ramachandran

Benim için de öyleydi. Zaten çalışan başka bir web sitem vardı ve yenisini aynı şekilde yapılandırdım. Bunu gözden kaçırmak çok kolay.
Günther Eberl

Ayrıca kovana ortak GetObject ve ListObjects izinleri eklemeniz gerekir.
Georges

8

@Cezz ile aynı sorunu yaşadım, ancak çözüm benim durumumda işe yaramayacaktı.

Kova için statik web sitesi barındırma özelliği etkinleştirildiğinde, kullanıcıların içeriğe Cloudfront URL'si veya S3 URL'si üzerinden erişebilmeleri anlamına gelir; bunlar her zaman istenmez. Örneğin, benim durumumda, Cloudfront dağıtımı SSL etkindir ve kullanıcıların SSL olmayan bir bağlantı üzerinden erişememesi gerekir.

Bulduğum çözüm şuydu:

  • statik web barındırma barındırma S3 kovada devre dışı bırakmak
  • Cloudfront dağıtım kaynağını S3 kimliği olarak saklamak
  • "Kova Erişimini Sınırla" yı "Evet" olarak ayarlayın (ve kolaylığı için CloudFront'un kova politikasını otomatik olarak güncellemesine izin verin)
  • "Hata Sayfaları" nda, özel bir yanıt oluşturun ve "403: Yasak" hata kodunu istediğiniz yanıt sayfasına (/index.html, 200 yanıt koduyla) eşleyin.

Benim durumumda, tüm yolların index.html ile çözüldüğü tek sayfalık bir javascript uygulaması sunuyorum. S3 kovanızdaki farklı nesnelere giden yollarınız varsa, bu çalışmaz.


1
Cevabınız için teşekkürler. Bu benim için çalıştı. Ben de seninle aynı sorunu yaşadım. İnsanların S3 kovama erişmelerini istemedim, bu yüzden yalnızca Cloudfront'ta otomatik tamamlama tarafından önerilen şekilde orijini doldurduğunuzda çalışan S3 Orjinaline erişimi kısıtlamam gerekiyordu. Bir yandan not, statik web sitesi barındırma devre dışı bırakmak zorunda değilsiniz. Sadece kamu erişimine izin veren kepçe politikasını kaldırmak yeterlidir.
Torsten,

Bu gerçekten yardımcı oldu, yasak mesaj ilk başta farketmediğim S3'ten geliyor, dolayısıyla SPA'nızın çalışması için bunu özel bir hata sayfasıyla yakalamak zorundasınız.
Ivan

4

Benim durumumda, S3 kovasımdaki bir Başlangıç ​​Yolu ile birlikte “Yol Paterni” Davranışları ile birden fazla kaynak kullanıyordum:

Hatalı kurulum:

CloudFront Davranışı: /images/*->My-S3-origin

My-S3 kökenli: Menşe Yolu: /images

S3 dosyaları: /images/my-image.jpg

GET İsteği: /images/my-image.jpg -> 403

Olan, tüm CloudFront GET isteğinin kökene gönderilmesiydi: /image/my-image.jpgKökeni Yolu tarafından önceden eklenmiş: /imagesbu nedenle S3'e olan istek /images/images/my-image.jpgmevcut olmayan gibi görünüyor .

Çözüm

Origin Path öğesini kaldırın.

Bu, kovaya erişim erişim kimliği ve kova izinleri ve kısıtlı bireysel dosya izinleriyle erişmemi sağladı.


1

Benim durumumda Route 53’ü yanlış yapılandırdım. Etki alanımda bir Alias ​​oluşturdum ama CloudFront dağılımı yerine S3 Bucket'a işaret ettim.

Ayrıca varsayılan kök nesnesini de ihmal ettim. Konsol, ihmal etmenin olası sonuçları hakkında soru işareti metnine biraz bilgi eklerse gerçekten geliştirilebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.