Puncte:0

Domeniu la Bucket S3 Acces refuzat

drapel tr

Bună ziua, am o problemă când primesc AccessDenied în domeniul meu

Îmi încarc site-ul într-un bucket AWS S3, fac public, creez o pagină statică, dar când accesez prin domain.com/mypage primesc un AccessDenied.

Din aws mydomain.s3.amazonaws.com/mypage funcționează bine.

DNS-ul meu de domeniu este configurat astfel

;; SECȚIUNEA RĂSPUNSURI:
mydomain.com. 2101 ÎN CNAME mydomain.s3.amazonaws.com.
mydomain.s3.amazonaws.com. 41342 ÎN CNAME s3-1-w.amazonaws.com.
s3-1-w.amazonaws.com. 219 ÎN CNAME s3-w.us-east-1.amazonaws.com.
s3-w.us-east-1.amazonaws.com. 3 ÎN A 52.217.69.36

Vreun sfat pentru a rezolva asta?

Puncte:0
drapel lu

Aceasta este din documentația de asistență Amazon:

Scurta descriere:

Pentru a depana erorile Acces refuzat, determinați dacă distribuția dvs. este numele de domeniu de origine este un punct final al site-ului web S3 sau un API REST S3 punct final. Urmați acești pași pentru a determina tipul punctului final:

  1. Deschideți consola CloudFront.
  2. Alegeți distribuția dvs. CloudFront, apoi alegeți Setări de distribuție.
  3. Alegeți fila Origins and Origin Groups.
  4. Alegeți fila Origins and Origin Groups.

Examinați numele de domeniu sub Nume și cale de domeniu de origine, apoi determinați tipul punctului final pe baza formatului numelui de domeniu.

Punctele finale API REST folosesc acest format:

DOC-EXEMPLU-BUCKET.s3.amazonaws.com

Notă: Asigurați-vă că urmați regulile pentru denumirea compartimentelor Amazon S3.

Punctele finale ale site-ului folosesc acest format:

DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com

Notă: În funcție de regiunea AWS, formatul punctului final poate folosi formatul liniuță (s3-site-web-Regiune) sau formatul punct (s3-site-ul web.Regiune).

Dacă distribuția dvs. utilizează un punct final API REST, vedeți că folosesc un S3 Punctul final al API-ului REST ca origine a distribuției mele CloudFront. De ce Primesc erori 403 Acces refuzat?

Dacă distribuția dvs. utilizează un punct final de site, verificați următoarele cerințe pentru a evita erorile cu acces refuzat:

  1. Obiectele din găleată trebuie să fie accesibile publicului.
  2. Obiectele din găleată nu pot fi criptate de AWS Key Management Service (AWS KMS).
  3. Politica compartimentului trebuie să permită accesul la s3:GetObject.
  4. Dacă politica compartimentului acordă acces public la citire, atunci contul AWS care deține compartimentul trebuie să dețină și obiectul. 5.Obiectele solicitate trebuie să existe în găleată.
  5. Amazon S3 Block Public Access trebuie dezactivat pe bucket.
  6. Dacă Requester Pay este activat, atunci cererea trebuie să includă parametrul cerere-plătitor.
  7. Dacă utilizați un antet Referer pentru a restricționa accesul de la CloudFront la originea dvs. S3, apoi examinați antetul personalizat.

Notă: Dacă nu doriți să permiteți public (anonim) accesul la obiectele dvs. S3, apoi modificați configurația pentru a utiliza API-ul S3 REST punctul final ca origine a distribuției dvs. Apoi, configurați-vă distribuție și compartiment S3 pentru a restricționa accesul folosind un acces la origine identitate (OAI). Pentru instrucțiuni, consultați Utilizarea unui punct final API REST ca origine cu acces restricționat de un OAI în Cum folosesc CloudFront pentru servi un site web static găzduit pe Amazon S3?

Rezoluţie

Obiectele din găleată trebuie să fie accesibile publicului

O distribuție care utilizează un punct final de site web acceptă numai public continut accesibil. Pentru a determina dacă un obiect din găleata S3 este accesibil public, deschideți adresa URL a obiectului într-un browser web. Sau tu poate rula o comandă curl pe adresa URL.

Următorul este un exemplu de adresă URL a unui obiect S3:

http://DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com/index.html

Dacă browserul web sau comanda curl returnează o eroare Acces refuzat, atunci obiectul nu este accesibil publicului.

Permiteți accesul public de citire la obiect într-unul dintre următoarele moduri:

  1. Creați o politică de compartiment care permite accesul public la citire pentru toate obiectele din compartiment.
  2. Utilizați consola Amazon S3 pentru a permite accesul public la citire pentru obiect.
  3. Obiectele din găleată nu pot fi criptate AWS KMS
  4. Distribuțiile CloudFront nu acceptă obiecte criptate AWS KMS. Trebuie să eliminați criptarea KMS de la obiectele S3 pe care doriți să le faceți servi folosind distribuția.

Notă: În loc să utilizați criptarea AWS KMS, utilizați AES-256 pentru a vă cripta obiectele.

Utilizați una dintre următoarele moduri pentru a verifica dacă există un obiect din găleată Criptat KMS:

Utilizați consola Amazon S3 pentru a vizualiza proprietățile obiectului. Revizuire caseta de dialog Criptare. Dacă este selectat AWS-KMS, atunci obiectul este criptat KMS. Rulați comanda head-object utilizând linia de comandă AWS Interfață (AWS CLI). Dacă comanda returnează ServerSideEncryption ca aws:kms, atunci obiectul este criptat KMS. Notă: Dacă primiți erori când rulați comenzi AWS CLI, asigurați-vă că utilizați cel mai mult versiunea recentă a AWS CLI. Pentru a schimba criptarea obiectului setări folosind consola Amazon S3, consultați Cum adaug criptare la un obiect S3?

Pentru a modifica setările de criptare ale obiectului utilizând AWS CLI, mai întâi verificați că găleata obiectului nu are criptare implicită. Dacă găleata nu are criptare implicită, atunci rulați următoarele comandă pentru a elimina criptarea obiectului prin copierea obiectului in sine:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html

Avertizare: Copierea obiectului peste el însuși elimină setările pentru clasa de stocare și
site-ul-redirecționare-locație. Pentru a menține aceste setări în nou obiect, asigurați-vă că specificați în mod explicit clasa de stocare sau valorile site-ului-redirecționare-locație în cererea de copiere.

Politica compartimentului trebuie să permită accesul la s3:GetObject Pentru a utiliza a distribuție cu un punct final al site-ului web S3, politica dvs. nu trebuie au o declarație deny care blochează accesul public de citire la s3: Acțiunea GetObject.

Chiar dacă aveți o declarație explicită allow pentru s3:GetObject în dvs politica de grup, confirmați că nu există o negare explicită conflictuală afirmație. O declarație de negare explicită înlocuiește întotdeauna o declarație explicită permite declarația.

Urmați acești pași pentru a vă revizui politica privind compartimentul pentru s3:GetObject:

  1. Deschideți găleata S3 din consola Amazon S3.

  2. Alegeți fila Permisiuni.

  3. Alegeți Politica compartimentului.

  4. Examinați politica grupului pentru declarații cu „Action”: „s3:GetObject” sau „Action”: „s3:*”.

Următorul exemplu de politică conține o declarație explicită allow for acces public la s3:GetObject. Cu toate acestea, există și o negare explicită declarație pentru s3:GetObject care blochează accesul, cu excepția cazului în care cererea este dintr-un anume Amazon Virtual Private Cloud (Amazon VPC).

{
    „Versiune”: „2008-10-17”,
    „Id”: „PolicyForCloudFrontPrivateContent”,
    "Afirmație": [
        {
            „Sid”: „Permiteți-OAI-Acces-la-bucket”,
            „Efect”: „Permite”,
            „Principal”: {
                „AWS”: „arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX”
            },
            „Acțiune”: „s3:GetObject”,
            „Resurse”: [
                „arn:aws:s3:::DOC-EXEMPLU-GALETE/*”
            ]
        },
        {
            „Sid”: „Permiteți-Public-Accesul-la-grupă”,
            „Efect”: „Permite”,
            „Principal”: „*”,
            „Acțiune”: „s3:GetObject”,
            „Resurse”: [
                „arn:aws:s3:::DOC-EXEMPLU-GALETE/*”
            ]
        },
        {
            „Sid”: „Doar acces-la-specific-VPCE”,
            „Efect”: „Nega”,
            „Principal”: „*”,
            „Acțiune”: „s3:GetObject”,
            „Resurse”: [
                „arn:aws:s3:::DOC-EXEMPLU-GALETE/*”
            ],
            "Condiție": {
                „StringNotEquals”: ​​{
                    "aws:sourceVpce": "vpce-1a2b3c4d"
                }
            }
        }
    ]
  }
  1. Modificați politica compartimentului pentru a elimina sau edita instrucțiunile care blochează accesul public la citire la s3:GetObject.

Notă: CloudFront memorează în cache rezultatele unei erori de acces refuzat pentru perioada de timp specificată în TTL minim de memorare în cache a erorii. The valoarea implicită este de un minut. După eliminarea unei declarații de negare din politică, puteți rula o invalidare a distribuției dvs. către eliminați obiectul din cache.

Dacă politica compartimentului acordă acces public la citire, atunci contul AWS care deține găleata trebuie să dețină și obiectul Pentru o politică găleată să permite accesul public de citire la obiecte, contul AWS care deține găleată trebuie să dețină și obiectele. O găleată sau un obiect este deținut de contul de identitate AWS Identity and Access Management (IAM) care a creat găleata sau obiectul.

Notă: cerința de proprietate asupra obiectului se aplică accesului public de citire acordat printr-o politică de compartiment. Nu se aplică citirii publice accesul acordat de lista de control al accesului (ACL) a obiectului.

Urmați acești pași pentru a verifica dacă găleata și obiectele au același lucru proprietar:

  1. Rulați această comandă AWS CLI pentru a obține ID-ul canonic S3 al proprietarului compartimentului:
aws s3api list-buckets --query Owner.ID
  1. Rulați această comandă pentru a obține ID-ul canonic S3 al proprietarului obiectului:

Notă: Acest exemplu arată un singur obiect, dar puteți utiliza lista comanda pentru a verifica mai multe obiecte.

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
  1. Dacă ID-urile canonice nu se potrivesc, atunci găleata și obiectul au proprietari diferiți.

Notă: De asemenea, puteți utiliza consola Amazon S3 pentru a verifica găleata și proprietarii de obiecte. Proprietarii se găsesc în fila Permisiuni a găleata sau obiectul respectiv.

Urmați acești pași pentru a schimba proprietarul obiectului în proprietarul găleții:

  1. Din contul proprietarului obiectului, rulați această comandă pentru a prelua permisiunile ACL atribuite obiectului:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name
  1. Dacă obiectul are permisiuni ACL de control complet al proprietarului de găleți, atunci treceți la pasul #3. Dacă obiectul nu are bucket-owner-full-control ACL permisiuni, apoi rulați această comandă de la contul proprietarului obiectului:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control
  1. Din contul proprietarului găleții, rulați această comandă pentru a schimba proprietarul obiectului prin copierea obiectului peste el:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html

Obiectele solicitate trebuie să existe în găleată Dacă un utilizator nu are permisiuni s3:ListBucket, atunci utilizatorul primește acces interzis erori pentru obiectele lipsă în loc de erori 404 Not Found. Rulați head-object Comanda AWS CLI pentru a verifica dacă un obiect există în găleată.

Notă: Confirmați că cererea de obiect trimisă către CloudFront se potrivește exact cu numele obiectului S3. Numele obiectelor S3 sunt sensibile la majuscule. Dacă cererea nu are numele corect al obiectului, atunci Amazon S3 răspunde ca și cum obiectul lipsește. Pentru a identifica ce obiect CloudFront solicită de la Amazon S3, utilizați jurnalul de acces la server.

Dacă obiectul există în găleată, atunci eroarea Acces refuzat nu este mascarea unei erori 404 Not Found. Verificați alte cerințe de configurare pentru a rezolva eroarea Acces refuzat.

Dacă obiectul nu se află în găleată, atunci eroarea Acces refuzat este mascarea unei erori 404 Not Found. Rezolvați problema legată de obiectul lipsă.

Notă: Nu este o bună practică de securitate să activați accesul public s3:ListBucket. Activarea accesului public s3:ListBucket permite utilizatorii să vadă și să enumere toate obiectele dintr-o găleată. Aceasta expune obiectul detalii despre metadate (de exemplu, cheie și dimensiune) pentru utilizatori, chiar dacă utilizatorii nu au permisiuni pentru descărcarea obiectului.

Amazon S3 Block Public Access trebuie dezactivat pe bucket Confirmați că nu există setări Amazon S3 Block Public Access aplicat pe găleată. Aceste setări pot suprascrie permisiunile care permite accesul public în citire. Setările Amazon S3 Block Public Access pot se aplică grupelor individuale sau conturilor AWS.

Dacă Requester Pay este activat, atunci cererea trebuie să includă parametru cerere-plătitor Dacă Solicitantul Plătește este activat pe o găleată, atunci accesul anonim la găleată nu este permis. Utilizatori din alte persoane conturile trebuie să specifice parametrul cerere-plătitor atunci când trimit cereri către găleată. În caz contrar, acești utilizatori primesc un acces refuzat eroare.

Dacă utilizați un antet Referer pentru a restricționa accesul de la CloudFront la originea dvs. S3, apoi examinați antetul personalizat Dacă utilizați Antet referitor pentru a restricționa accesul de la CloudFront la site-ul dvs. S3 originea punctului final, verificați valoarea secretă sau jetonul setat pe compartimentul S3 politică. Apoi, confirmați că valoarea secretă sau simbolul se potrivește cu valoarea pe antetul personalizat de origine CloudFront.

Dacă utilizați o declarație explicită de respingere în politica compartimentului, atunci confirmați că există și o declarație de autorizare care acordă acces pe bază pe antetul Referer. Nu puteți acorda acces doar cu un explicit nega declarația.

De exemplu, următoarea politică de grup oferă acces la originea S3 atunci când cererea conține șirul "aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER":

{
  "Version":"2012-10-17",
  "Id":"Exemplu de politică de referință http",
  "Afirmație":[
    {
      "Sid":"Permite obținerea cererilor care provin din CloudFront meu cu antetul referitor",
      "Efect":"Permite",
      "Principal":"*",
      "Acțiune":"s3:GetObject",
      "Resurse":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condiție":{
        "StringLike":{"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER"}
      }
    }
  ]
}

Cu acest exemplu de politică de grup, antetul personalizat de origine CloudFront trebuie sa fie:

  • Antet: Referitor
  • Valoare: MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER

Notă: Exemplul de politică de grup oferă acces public (anonim) la bucket deoarece Principalul este o valoare wildcard ("Principal":"*"). Cu toate acestea, din cauza declarației de condiție, accesul la originea S3 se acordă numai dacă cererea include antetul Referer și valoarea antetului se potrivește cu valoarea din politica compartimentului.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.