Vraag Wat veroorzaakt Access Denied bij gebruik van de aws cli om te downloaden van Amazon S3?


Ik ben echt aan het rondzwalken in AWS en probeer erachter te komen wat ik hier mis. Ik zou het zo willen maken dat een IAM-gebruiker bestanden uit een S3-bucket kan downloaden - zonder de bestanden gewoon volledig openbaar te maken - maar ik krijg toegang geweigerd. Als iemand kan zien wat er gebeurt, word ik opgestookt.

Wat ik tot nu toe heb gedaan:

  • Heeft een gebruiker gemaakt genaamd my-user (ter wille van het voorbeeld)
  • Gegenereerde toegangstoetsen voor de gebruiker en zet ze in ~ / .aws op een EC2-instantie
  • Ik heb een emmerbeleid gemaakt waarvan ik had gehoopt dat het mijn gebruikers toegang verleent
  • Leid het commando aws s3 cp --profile my-user s3://my-bucket/thing.zip .

Emmerbeleid:

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

Het resultaat is A client error (AccessDenied) occurred: Access Denied hoewel ik kan downloaden met dezelfde opdracht en de standaardtoegangscode (root-account?).

Ik heb ook geprobeerd een gebruikersbeleid toe te voegen. Hoewel ik niet weet waarom het nodig zou zijn, dacht ik dat het geen kwaad zou doen, daarom heb ik dit aan mijn gebruiker gekoppeld.

{
  "Statement": [
    {
      "Sid": "Stmt1384889624746",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Dezelfde resultaten.


47
2017-11-19 19:37


oorsprong




antwoorden:


Ik worstelde hiermee ook, maar ik vond een antwoord hier https://stackoverflow.com/a/17162973/1750869 die hielp om dit probleem voor mij op te lossen. Antwoord hieronder overslaan.


U hoeft geen rechten voor iedereen te openen. Gebruik het onderstaande Bucket-beleid voor de bron en bestemming voor het kopiëren van een bucket in het ene account naar het andere met behulp van een IAM-gebruiker

Bucket om van te kopiëren - SourceBucket

Bucket to Copy to - DestinationBucket

Bron AWS-account-ID - XXXX-XXXX-XXXX

Source IAM-gebruiker - src-iam-user

Het onderstaande beleid betekent - de IAM-gebruiker - XXXX-XXXX-XXXX: src-iam-user heeft s3: ListBucket en s3: GetObject-rechten op SourceBucket / * en s3: ListBucket en s3: PutObject-privileges op DestinationBucket / *

Op de SourceBucket zou het beleid moeten zijn als:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

Op de DestinationBucket moet het beleid zijn:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

commando dat moet worden uitgevoerd is s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


36
2017-11-19 23:27



Oh mijn god, je bent mijn held. Ik miste net de ListBucket-toestemming op bucket-niveau. Ik weet nog steeds niet waarom ik de emmer nodig heb om er een voorwerp van te cpnen, maar dat is oke. Misschien is het slechts een eigenaardigheid van het gebruik van het commando aws? - Josh Gagnon
Ja, het is best raar. Je zou denken dat het hebben van één enkel beleid van s3: * (hoe onveilig dat ook is) voldoende zou zijn voor het testen van je gezondheidstoestand. - Sergio
fml, 2 dagen verspild voor die ListBucket-toestemming. goede vangst - chaqke
Veel tijd besteed .. Dit was het benodigde antwoord. ListBucket - bucketname, GetObject - bucketname / * - rsmoorthy


Toen ik met hetzelfde probleem geconfronteerd werd, bleek dat AWS encryptie op de server vereiste om ingeschakeld te kunnen worden. Dus het volgende commando werkte voor mij succesvol:

aws s3 cp test.txt s3://my-s3-bucket --sse AES256

8
2017-09-19 08:53



Bedankt! In mijn geval was dat zo --sse aws:kms om de bucket "default" te gebruiken ... - Michael Yoo


Ik zou de door 'Willekeurige geverifieerde AWS-gebruiker' optie niet aanbevelen.

Hiermee wordt een ACL op bucketniveau toegevoegd waarmee AWS-accounts (niet alleen uw IAM-gebruikers) voor die bucket kunnen worden weergegeven / verwijderd / gewijzigd-acls.

dat wil zeggen openbaar lezen / schrijven voor iedereen met een aws-account.


4
2018-06-12 10:51



Heb je dit getest? Ik had de indruk dat AWS-account eigenlijk elke entiteit binnen mijn organisatie betekent, dat wil zeggen een gebruiker, een EC2-instantie, een IAM-rol, maar niet iemand van een ander account. Ik zou het mis hebben en ik zal mijn bijdrage aanpassen en snel mijn emmers controleren als dat het geval is. Bedankt. - James Dunmore
JEP. Toegestane "geauthenticeerde gebruiker" in S3 ACL's betekent alle AWS-accounts. Het dwingt ondertekende verzoeken af, maar niets meer. Hier is een referentie: link - Andrew


Ik heb dit probleem kunnen verhelpen zonder beleidsregels te hoeven schrijven - via de S3-console (web ui) Ik heb de bucket geselecteerd en op het tabblad Machtigingen de optie "Any Authenticated AWS User" gekozen en alle vakken uitbetaald.

BIJWERKEN: zoals opgemerkt in opmerkingen "Elke geverifieerde AWS-gebruiker" is niet alleen gebruikers in uw account, het is allemaal AWS-geverifieerde gebruiker, gebruik alsjeblieft met voorzichtigheid


3
2018-03-01 13:52



Ik stel me voor dat dit beleid voor je maakt. Als je alle vakjes aanvinkt, krijg je ListBucket, enzovoort en meer. - Josh Gagnon
Ik ben er zeker van dat het is - ik weet gewoon dat het schrijven van beleid lastig kan zijn, die vakjes geven je misschien een beetje meer, maar een leuke snelle oplossing - James Dunmore


Zelfs als uw IAM-beleid correct is ingesteld, kunt u nog steeds een foutmelding krijgen zoals An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied vanwege MFA (Multi-Factor Authentication) vereisten voor uw inloggegevens. Deze kunnen u overrompelen, want als u zich al hebt aangemeld bij de AWS-console, ziet u dat uw inloggegevens goed werken en is de toestemming geweigerd door aws cli niet bijzonder nuttig.

Er zijn al enkele goede instructies over het instellen van MFA met aws cli:

Kortom, u moet naar het adres van uw MFA-apparaat gaan en dat met de code van uw apparaat verzenden om een ​​tijdelijk token te krijgen.


1
2017-07-12 17:00



Je hebt mijn dag gered! - shintaroid


Ik ging gewoon gewoon op de webUI en klikte op de bucket, ging toen naar permissies en ging toen naar policy. Toen ik het opende, klikte ik gewoon op verwijderen. Ik deed dit omdat ik denk dat het ook de configuratie was.

Ik ging terug naar de hoofdpagina van de s3, klikte vervolgens op de emmer en probeerde deze te verwijderen en het werkte.

zelfs toen ik het deed door met aws-cli te gebruiken

$ aws s3 rb s3://bucket-name --force  

Hoe dan ook, dat is het ding dat voor mij werkte. Het beleid met betrekking tot machtigingen zorgt ervoor dat u de bucket niet kunt verwijderen.


0
2017-10-14 04:19





Zodra ik deze fout kreeg door simpelweg te proberen te draaien:

aws s3 cp s3://[bucketName]/[fileName] .

in een map waar ik geen rechten had. Het is gek, maar zorg ervoor dat je de eigenaar bent van de map waarin je bent voordat je verder gaat!


0
2017-08-16 04:48