Frage Was verursacht den Zugriff verweigert, wenn Sie den aws CLI zum Herunterladen von Amazon S3 verwenden?


Ich drehe in AWS herum und versuche herauszufinden, was ich hier vermisse. Ich möchte es so einrichten, dass ein IAM-Benutzer Dateien aus einem S3-Bucket herunterladen kann - ohne die Dateien ganz öffentlich zu machen - aber ich bekomme Zugriff verweigert. Wenn jemand sehen kann, was los ist, werde ich begeistert sein.

Was ich bisher gemacht habe:

  • Erstellt einen Benutzer namens my-user (als Beispiel)
  • Generierte Zugriffsschlüssel für den Benutzer und setzen sie in ~ / .aws auf einer EC2-Instanz
  • Ich habe eine Bucket-Richtlinie erstellt, von der ich gehofft hatte, dass sie meinem Benutzer Zugriff gewährt
  • Lief den Befehl aws s3 cp --profile my-user s3://my-bucket/thing.zip .

Eimer Politik:

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

Das Ergebnis ist A client error (AccessDenied) occurred: Access Denied obwohl ich mit dem gleichen Befehl und den Standard (root account?) Zugriffstasten herunterladen kann.

Ich habe versucht, eine Benutzerrichtlinie hinzuzufügen. Obwohl ich nicht weiß, warum es notwendig sein würde, dachte ich, es würde nicht schaden, also habe ich das meinem Benutzer beigefügt.

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

Gleiche Ergebnisse.


47
2017-11-19 19:37


Ursprung




Antworten:


Ich hatte auch damit zu kämpfen, aber ich habe hier eine Antwort gefunden https://stackoverflow.com/a/17162973/1750869 Das hat mir geholfen, dieses Problem zu lösen. Reposting Antwort unten.


Sie müssen Berechtigungen nicht für alle Benutzer öffnen. Verwenden Sie die folgenden Bucket-Richtlinien für Quelle und Ziel, um mit einem IAM-Benutzer aus einem Bucket in einem Konto in ein anderes zu kopieren

Bucket zum Kopieren von - SourceBucket

Zu kopierender Bucket - DestinationBucket

Quell-AWS-Konto-ID - XXXX-XXXX-XXXX

Quelle IAM-Benutzer - src-iam-user

Die folgende Richtlinie bedeutet - der IAM-Benutzer - XXXX-XXXX-XXXX: src-iam-user hat s3: ListBucket und s3: GetObject-Berechtigungen für SourceBucket / * und s3: ListBucket und s3: PutObject-Berechtigungen für DestinationBucket / *

Auf dem SourceBucket sollte die Richtlinie wie folgt aussehen:

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

Auf dem DestinationBucket sollte die Richtlinie sein:

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

Befehl ausgeführt werden soll s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


36
2017-11-19 23:27



Oh mein Gott, du bist mein Held. Ich habe nur die ListBucket-Erlaubnis auf der Bucket-Ebene vermisst. Ich weiß immer noch nicht, warum ich den Eimer brauche, um ein Objekt daraus zu machen, aber das ist okay. Vielleicht ist es nur eine Kleinigkeit, den Befehl aws zu verwenden? - Josh Gagnon
Ja, es ist ziemlich seltsam. Sie würden denken, eine einzelne Richtlinie von s3 zu haben: * (wie unsicher es auch sein mag) wäre genug für den Gesundheitstest. - Sergio
fml, 2 Tage vergeudet für die ListBucket-Erlaubnis. guter Fang - chaqke
Viel Zeit verbraucht .. Dies war die notwendige Antwort. ListBucket - Bucketname, GetObject - Bucketname / * - rsmoorthy


Als ich das gleiche Problem sah, stellte sich heraus, dass AWS die serverseitige Verschlüsselung aktivieren musste. Also der folgende Befehl funktionierte erfolgreich für mich:

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

8
2017-09-19 08:53



Vielen Dank! In meinem Fall war es --sse aws:kms den Bucket "default" verwenden ... - Michael Yoo


Ich würde die von James erwähnte Option "Jeder authentifizierte AWS-Benutzer" nicht empfehlen.

Dadurch wird eine ACL auf Bucket-Ebene hinzugefügt, die es jedem AWS-Konto (nicht nur Ihren IAM-Benutzern) erlaubt, diesen Bucket aufzulisten / zu löschen / zu ändern.

d.h. öffentliches Lesen / Schreiben für jeden mit einem aws-Konto.


4
2018-06-12 10:51



Hast du das getestet? Ich hatte den Eindruck, dass das AWS-Konto eigentlich jede Entität bedeutet, die meine Organisation hat - d. H. Ein Benutzer, eine EC2-Instanz, eine IAM-Rolle, aber keine Person von einem anderen Konto. Ich könnte mich irren, und ich werde meinen Beitrag bearbeiten und meine Eimer schnell prüfen, wenn das der Fall ist. Vielen Dank. - James Dunmore
Jep. "Berechtigter Benutzer" in S3-ACLs bedeutet alle AWS-Konten. Es erzwingt signierte Anfragen, aber nicht mehr. Hier ist eine Referenz: Verknüpfung - Andrew


Ich habe es geschafft, dies zu beheben, ohne Richtlinien schreiben zu müssen - von der S3-Konsole (Web-UI) habe ich den Bucket ausgewählt und auf der Registerkarte Berechtigungen "Any Authenticated AWS User" gewählt und alle Felder mit einem Ticket versehen.

AKTUALISIEREN: Wie in den Kommentaren "Jeder authentifizierte AWS-Benutzer" angegeben, handelt es sich nicht nur um Benutzer in Ihrem Konto, sondern um authentifizierte AWS-Benutzer. Bitte verwenden Sie sie mit Vorsicht


3
2018-03-01 13:52



Ich stelle mir vor, dass Sie eine Richtlinie für Sie erstellen. Wenn Sie alle Kästchen ankreuzen, bekommen Sie ListBucket usw. und mehr. - Josh Gagnon
Ich bin sicher, es ist - ich weiß nur, dass das Schreiben von Richtlinien ein Schmerz sein kann, diese Tick-Boxen geben Ihnen vielleicht ein bisschen mehr, aber eine nette schnelle Lösung - James Dunmore


Selbst wenn Ihre IAM-Richtlinien korrekt eingerichtet sind, können Sie trotzdem einen Fehler erhalten An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied aufgrund von MFA (Multi-Factor Authentication) -Anforderungen an Ihre Anmeldeinformationen. Diese können Sie überraschen, denn wenn Sie sich bereits bei der AWS-Konsole angemeldet haben, scheint es, dass Ihre Anmeldeinformationen einwandfrei funktionieren, und die Fehlermeldung "admit denied" von aws cli ist nicht besonders hilfreich.

Es gibt bereits einige gute Anweisungen zum Einrichten von MFA mit aws cli:

Grundsätzlich benötigen Sie die Adresse Ihres MFA-Geräts und senden Sie diese mit dem Code von Ihrem Gerät, um ein temporäres Token zu erhalten.


1
2017-07-12 17:00



Du hast meinen Tag gerettet! - shintaroid


Ich ging einfach auf die WebUI weiter und klickte auf den Bucket, ging dann zu Berechtigungen und ging dann zur Policy. Als ich es öffnete, klickte ich einfach auf Löschen. Ich tat dies, weil ich denke, dass es auch Konfiguration war.

Ich ging zurück zur Hauptseite von s3, klickte dann auf den Bucket und versuchte, ihn zu löschen, und es funktionierte.

auch wenn ich es mit aws-cli gemacht habe

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

Wie auch immer, das ist die Sache, die für mich funktioniert hat. Die Richtlinie für Berechtigungen hindert Sie daran, den Bucket zu löschen.


0
2017-10-14 04:19





Sobald ich diesen Fehler bekommen habe, indem ich einfach versucht habe:

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

in einem Ordner, in dem ich keine Berechtigungen hatte. Es ist albern, aber stellen Sie sicher, dass Sie der Besitzer des Ordners sind, bevor Sie fortfahren!


0
2017-08-16 04:48