Permisiuni AWS S3 Bucket – Acces refuzat (Programare, Amazon Web Services, Amazon S3)

David a intrebat.

Încerc să-mi dau permisiunea de a descărca fișiere existente într-un bucket S3. Am modificat Politica Bucket, după cum urmează:

        {
        "Sid": "someSID",
        "Action": "s3:*",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
        }
    }

Înțelegerea mea este că adăugarea la politica ar trebui să-mi dea drepturi complete la „bucketname” pentru contul meu „myuid”, inclusiv toate fișierele care se află deja în acel bucket. Cu toate acestea, primesc în continuare erori de acces refuzat atunci când încerc să descarc oricare dintre aceste fișiere prin intermediul linkului care apare în consolă.

Aveți vreo idee?

Comentarii

  • Spuneți că acest lucru oferă drepturi depline asupra bucket-ului, dar resursa dvs. include un prefix. Toate fișierele pe care le descărcați sunt în acest prefix? De asemenea, cum le descărcați? Din consolă, cu o aplicație, cu un SDK? –  > Por Bob Kinney.
10 răspunsuri
EsterlingAccime Youtuber

Pasul 1

Faceți clic pe numele bucket-ului dvs. și, în fila Permisiuni, asigurați-vă că opțiunea Blocați noi politici publice pentru bucket este debifată

Pasul 2

Apoi poți aplica politica ta de bucket

Sper că vă ajută

Comentarii

  • Aceasta nu este metoda corectă –  > Por ETL_Devs.
Karl Wilbur

David, Ai dreptate, dar am constatat că, în plus față de ceea ce a spus Bennie mai jos, trebuie să acordați și vizualizarea (sau orice acces doriți) „Utilizatorilor autentificați”.

Dar o soluție mai bună ar putea fi să editați politica utilizatorului pentru a acorda acces doar la bucket:

{
   "Statement": [
    {
      "Sid": "Stmt1350703615347",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::mybucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {}
    }
  ]
}

Primul bloc acordă toate permisiunile S3 pentru toate elementele din cadrul bucket-ului. Al doilea bloc acordă permisiunea de listare a bucket-ului în sine.

Comentarii

  • Acordarea acestui acces „utilizatorilor autentificați” înseamnă literalmente orice utilizator autentificat aws, chiar și cei care nu sunt asociați cu propriul cont… astfel încât se anulează ideea de a acorda acces unui utilizator pentru a accesa un bucket. –  > Por Salami.
  • Știu ce face și sunt de acord că pare ciudat, dar, la momentul respectiv, a fost necesară pentru a o face să funcționeze. –  > Por Karl Wilbur.
  • O altă modalitate de a face acest lucru este de a atașa o politică la un anumit utilizator IAM – în consola IAM, selectați un utilizator, selectați opțiunea Permissions (Permisiuni) fila Permisii, faceți clic pe Atașați politica și apoi selectați o politică precum AmazonS3FullAccess. Dintr-un motiv oarecare, nu este suficient să spuneți că un bucket acordă acces unui utilizator – trebuie să spuneți, de asemenea, că utilizatorul are permisiuni pentru a accesa serviciul S3. –  > Por sameers.
bennie j

Modificați resursa arn:aws:s3:::bucketname/AWSLogs/123123123123/* în arn:aws:s3:::bucketname/* pentru a avea drepturi depline la bucketname

varotariya vajsi

Utilizați metoda de mai jos pentru a încărca orice fișier pentru o formă publică lizibilă folosind TransferUtility în Android.

transferUtility.upload(String bucketName, String key, File file, CannedAccessControlList cannedAcl)

Exemplu

transferUtility.upload("MY_BUCKET_NAME", "FileName", your_file, CannedAccessControlList.PublicRead);

Comentarii

  • Mulțumesc, aceasta este ceea ce am nevoie în cazul meu. –  > Por Lalit Sharma.
chaqke

Pentru a clarifica: Nu este foarte bine documentat, dar aveți nevoie de două declarații de acces.

În plus față de declarația dvs. care permite acțiuni la resursa „arn:aws:s3::::bucketname/AWSLogs/123123123123123/*”, aveți nevoie, de asemenea, de o a doua declarație care permite ListBucket la „arn:aws:s3::::bucketname”, deoarece, la nivel intern, clientul Aws va încerca să listeze bucket-ul pentru a determina că există înainte de a efectua acțiunea sa.

Cu cea de-a doua declarație, ar trebui să arate astfel:

"Statement": [
    {
        "Sid": "someSID",
        "Action": "ActionThatYouMeantToAllow",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
    },
    {
        "Sid": "someOtherSID",
        "Action": "ListBucket",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucketname",
        "Principal": {
            "AWS": [
                "arn:aws:iam::123123123123:user/myuid"
            ]
    }
]

Notă: Dacă utilizați IAM, săriți peste partea „Principal”.

Diego Santa Cruz Mendezú

pentru a arăta site-ul web static în s3:

Acestea sunt politici de tip bucket:

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

Gajendra

Motivul posibil: dacă fișierele au fost puse/copiate de un alt utilizator de cont AWS, atunci nu puteți accesa fișierul, deoarece proprietarul fișierului nu sunteți încă dumneavoastră. Utilizatorul contului AWS căruia i-au fost plasate fișierele în directorul dvs. trebuie să acorde acces în timpul unei operațiuni de plasare sau copiere.

Pentru o operațiune de plasare, proprietarul obiectului poate rula această comandă:

aws s3api put-object --bucket destination_awsexamplebucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --acl bucket-owner-full-control

Pentru o operațiune de copiere a unui singur obiect, proprietarul obiectului poate rula una dintre aceste comenzi:

aws s3api copy-object --bucket destination_awsexammplebucket --key source_awsexamplebucket/myobject --acl bucket-owner-full-control

ref : AWS Link

Comentarii

  • Aceasta este exact problema mea. Există o modalitate de a încărca un fișier și de a acorda acces la acesta oricui? Încarc în s3 folosind comanda Powershell Tool Write-S3Object Nu furnizez nicio cheie la comandă și m-aș aștepta ca obiectul să fie accesibil oricui. –  > Por demonicdaron.
  • Tocmai am găsit răspunsul: Trebuie doar să adaug -PublicReadWrite la comandă, iar obiectul va fi accesibil oricui –  > Por demonicdaron.
Danilo Rocha Alves

Dacă aveți un bucket criptat, veți avea nevoie de kms permis.

ETL_Devs

Acordarea accesului public la Bucket pentru a adăuga politica NU este o modalitate corectă. în acest fel, bucket-ul dvs. este expus publicului chiar și pentru o perioadă scurtă de timp.

Vă veți confrunta cu această eroare chiar dacă aveți acces de administrator (utilizatorul Root nu se va confrunta cu ea)Conform documentației AWS, trebuie să adăugați „PutBucketPolicy” la utilizatorul IAM.

Deci, pur și simplu adăugați o Politică S3 la utilizatorul IAM ca în captura de ecran de mai jos, menționați ARN-ul Bucket pentru a-l face mai sigur și nu trebuie să vă faceți Bucket-ul public din nou.

Comentarii

  • Omule, acest lucru pare a fi corect, dar din explicațiile tale lipsesc o grămadă de contexte. Ai putea să te explici mai detaliat? –  > Por kamatheuska.
  • dacă îmi puteți spune ce parte nu ați înțeles, poate voi putea actualiza răspunsul. Totuși, ideea mea era să atașez un rol PutBucketPolicy la proprietarul găleții, ceea ce va oferi mai mult control (prin IAM) și securitate. –  > Por ETL_Devs.
  • V-aș sugera să explicați cum s-a ajuns în punctul în care ați făcut captura de ecran, în special pentru persoanele care încep cu AWS, găsind aceste lucruri sunt deosebit de confuze. De asemenea, adăugarea documentației pe care o citați ar fi foarte utilă, deoarece am putea verifica dacă este încă actualizată. –  > Por kamatheuska.
Pronoy999

Mergeți la această adresă link și generați o Politică. În Principal câmpul *

În câmpul Actions setați câmpul Get Objects

Dați ARN ca arn:aws:s3:::<bucket_name>/*

Apoi adăugați declarația și apoi generați politica, veți obține un fișier JSON și apoi copiați fișierul și lipiți-l în Bucket Policy.

Pentru mai multe detalii, accesați aici.

Comentarii

  • Obțineți obiecte: „Action”: „s3:GetObject” –  > Por Elad Amsalem.