Die S3-Bucket-Aktion gilt nicht für Ressourcen


123

Ich folge den Anweisungen aus dieser Antwort , um die folgende S3-Bucket-Richtlinie zu generieren:

{
  "Id": "Policy1495981680273",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1495981517155",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::surplace-audio",
      "Principal": "*"
    }
  ]
}

Ich erhalte den folgenden Fehler zurück:

Die Aktion gilt nicht für Ressourcen in Anweisungen

Was fehlt mir in meiner Police?


1
Ich habe versucht, Lösung in Link: stackoverflow.com/a/36551238/2786039 Und es funktioniert jetzt. Grüße
Vuong Nguyen

Antworten:


216

In IAM-Dokumenten finden Sie http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

Bei einigen Diensten können Sie keine Aktionen für einzelne Ressourcen angeben. Stattdessen gelten alle Aktionen, die Sie im Element Aktion oder NotAction auflisten, für alle Ressourcen in diesem Dienst. In diesen Fällen verwenden Sie den Platzhalter * im Ressourcenelement.

Mit diesen Informationen sollte die Ressource einen Wert wie den folgenden haben:

"Resource": "arn:aws:s3:::surplace-audio/*"

39
Ich kann nicht glauben, dass dies in der Richtlinie von Bucket und / oder im Richtliniengenerator nicht erwähnt wird!
Carles Alcolea

4
Ich habe * verwendet und es gibt immer noch diesen Fehler. könnte mir jemand helfen
Yehuda Clinton

@ YehudaClinton, arbeitet für mich.
Stellen Sie

73

Nur die s3:ListBucketErlaubnis zu entfernen war für mich nicht gut genug und wahrscheinlich auch nicht für viele andere.

Wenn Sie die s3:ListBucketBerechtigung wünschen , müssen Sie nur die Ebene des Eimers (ohne die /*am Ende) haben, da diese Berechtigung für den Eimer selbst gilt und nicht für Elemente im Eimer.

Wie unten gezeigt, müssen Sie die s3:ListBucketBerechtigung als separate Anweisung von den Berechtigungen für Elemente im Bucket wie s3:GetObjectund haben s3:PutObject.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"        
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject", 
        "s3:PutObject"
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}

Einverstanden. Für einige Aktionen ist die ListBucket-Berechtigung erforderlich, bevor Sie GetObject ausführen können. Daher ist diese Antwort gründlicher.
3cheesewheel

2
Dies funktioniert für mich und zeigt nur, wie viel Arbeit AWS noch tun muss, um Benutzer zu grundlegenden Aufgaben zu führen.
Volvox

41

Die Fehleraktion gilt nicht für Ressourcen in Anweisungen

Es bedeutet einfach, dass die Aktion (die Sie in der Richtlinie geschrieben haben) nicht für die Ressource gilt. Ich habe versucht, meinen Eimer öffentlich zu machen, damit jeder ihn aus meinem Eimer herunterladen kann. Ich habe eine Fehlermeldung erhalten, bis ich ("s3: ListBucket") aus meiner Anweisung entfernt habe.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Principal": "*"
    }
  ]
}

Da der Listen-Bucket nicht im Bucket angewendet wird, hat das Löschen dieser Aktionsrichtlinie einwandfrei funktioniert.


Danke, das hat bei mir funktioniert und "s3: ListBucket" entfernt.
Paul Watson

14

Ich bin gerade auf dieses Problem gestoßen und habe eine kürzere Lösung für diejenigen gefunden, die ListBucket und GetObject in derselben Richtlinie haben möchten.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
      ],
      "Principal": "*"
    }
  ]
}

Falsch - Das Principalist für die S3-Richtliniengrammatik nicht zulässig.
azec-pdx

Keine der oben genannten Lösungen funktionierte für mich, der Auftraggeber war entweder ungültig oder mir wurde der Zugriff verweigert.
Daniel

Dies ist richtig. Die Ressource sollte in diesem Fall ein Array sein und diese 2 Zeilen enthalten ... Stimmen Sie ab.
Assil

4

Ich habe auch das ähnliche Problem beim Erstellen des Eimers konfrontiert

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

Ich habe den obigen Code in geändert

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

Wenn Sie Ihrem Bucket-Namen / * hinzufügen , wird das Problem behoben

Hier ist mein Eimername mrt9949


Danke dir! Verbrachte Ewigkeiten damit, danach zu suchen
Jack_Hardy

4

In meinem Fall bestand die Lösung für diesen Fehler darin, einige der von mir angewendeten Aktionen zu entfernen. Einige von ihnen sind für diese Ressource nicht relevant oder können nicht mit ihr arbeiten. In diesem Fall würde ich Folgendes nicht einschließen:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket hat mich erwischt! Vielen Dank dafür
Quad64Bit

Für mich hat funktioniert, wenn nur getObjet
LittleTiger

0

Sie müssen das Muster des Arns überprüfen, das unter dem Resource-Tag für die Policy- definiert ist.

"Ressource": "arn: aws: s3 ::: s3mybucketname / *"

Das Hinzufügen von "/ *" am Ende würde helfen, das Problem zu beheben, wenn Sie es auch dann sehen, wenn Ihre Richtlinie für den öffentlichen Zugriff für Ihren Bucket entsperrt wurde.


0
  • Gehen Sie in Ihrer Instanz zu Amazon S3.
  • Gehen Sie zu Berechtigungen -> Registerkarte Öffentlicher Zugriff.
  • Wählen Sie Bearbeiten und deaktivieren Sie Alle öffentlichen Zugriffe blockieren und speichern.
  • Auf der Registerkarte "Berechtigung" und in der Zugriffssteuerungsliste wird das Tag "Öffentlich" angezeigt.

0

Sie können ListBuckets auch für jeden Ordner konfigurieren

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

Diese Regeln werden zusammen mit SES verwendet, um eine E-Mail zu empfangen, ermöglichen es jedoch einem externen Benutzer, die Dateien anzuzeigen, die von SES in den Bucket gelegt wurden. Ich habe die Anweisungen von hier aus befolgt: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Außerdem müssen Sie domain.co/user/bei Verwendung des SDK das Präfix als WITH-Schrägstrich am Ende angeben, da sonst der Zugriff verweigert wird. hoffe es hilft jedem

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.