Akcja S3 Bucket nie ma zastosowania do żadnych zasobów

124

Ja postępując zgodnie z instrukcjami z tej odpowiedzi do generowania kontynuację polityki S3 wiadra:

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

Otrzymuję następujący błąd:

Akcja nie dotyczy żadnego zasobu (ów) w instrukcji

Czego mi brakuje w mojej polisie?

Philip Kirkbride
źródło
1
Wypróbowałem rozwiązanie w linku: stackoverflow.com/a/36551238/2786039 I już działa. Pozdrawiam
Vuong Nguyen

Odpowiedzi:

219

Z dokumentacji IAM: http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

Niektóre usługi nie pozwalają na określenie działań dla poszczególnych zasobów; zamiast tego wszelkie akcje wymienione w elemencie Action lub NotAction mają zastosowanie do wszystkich zasobów w tej usłudze. W takich przypadkach używasz symbolu wieloznacznego * w elemencie Resource.

Dzięki tym informacjom zasób powinien mieć wartość taką jak poniżej:

"Resource": "arn:aws:s3:::surplace-audio/*"
Oluwafemi Sule
źródło
40
Nie mogę uwierzyć, że nie ma o tym wzmianki w zasadach wiadra i / lub generatorze zasad!
Carles Alcolea
4
Używam * i nadal wyświetla ten błąd. czy ktoś mógłby mi pomóc?
Yehuda Clinton
@YehudaClinton, pracuje dla mnie. upewnij się, że dodałeś oba / *
RMati
74

Samo usunięcie s3:ListBucketpozwolenia nie było dla mnie wystarczająco dobrym rozwiązaniem i prawdopodobnie nie jest dla wielu innych.

Jeśli chcesz uzyskać s3:ListBucketpozwolenie, musisz mieć tylko zwykły obszar wiadra (bez /*na końcu), ponieważ to uprawnienie dotyczy samego segmentu, a nie elementów w nim.

Jak pokazano poniżej, musisz mieć s3:ListBucketpozwolenie jako oddzielne oświadczenie od uprawnień dotyczących elementów w zasobniku, takich jak s3:GetObjecti 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/*"
    }
  ]
}
Łukasz
źródło
Zgoda. W przypadku niektórych działań wymagane jest uprawnienie ListBucket, zanim będzie można wykonać GetObject, więc ta odpowiedź jest dokładniejsza.
3cheesewheel
2
To działa dla mnie i pokazuje tylko, ile pracy AWS wciąż musi wykonać, aby kierować użytkowników do podstawowych rzeczy.
volvox
41

Akcja błędu nie dotyczy żadnych zasobów w instrukcji

Po prostu oznacza to, że akcja (napisana w polityce) nie dotyczy zasobu. Próbowałem upublicznić moje wiadro, aby każdy mógł go pobrać. Pojawiał się błąd, dopóki nie usunąłem („s3: ListBucket”) z mojego wyciągu.

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

Ponieważ zasobnik listy nie ma zastosowania w zasobniku, dlatego usunięcie tej polityki akcji działało dobrze.

Wazon007
źródło
Dziękuję, że zadziałało, usuwając "s3: ListBucket".
Paul Watson,
14

Po prostu napotkałem ten problem i znalazłem krótsze rozwiązanie dla tych, którzy chcą mieć ListBucket i GetObject w tej samej polityce.

{
  "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": "*"
    }
  ]
}
Alex Spence
źródło
Źle - Principalnie jest dozwolone w gramatyce zasad S3.
azec-pdx
Żadne z powyższych rozwiązań nie zadziałało dla mnie, zleceniodawca był nieważny lub odmówiono mi dostępu.
Daniel
To prawda, w tym przypadku zasób powinien być tablicą i zawierać te 2 wiersze ... Głosuj.
Assil
4

Z podobnym problemem spotkałem się również podczas tworzenia wiadra

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

Zmieniłem powyższy kod na

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

dodaj / * do nazwy zasobnika, rozwiąże to problem

Tutaj moja nazwa wiadra to mrt9949

Ravi Teja Mureboina
źródło
Dziękuję Ci! Spędziłem
całe
4

W moim przypadku rozwiązaniem tego błędu była próba usunięcia niektórych akcji, które stosowałem. Niektóre z nich nie dotyczą tego zasobu lub nie mogą z nim współpracować. W tym przypadku nie pozwoliłoby mi dołączyć tych:

GetBucketAcl ListBucket ListBucketMultipartUploads

Yehuda Clinton
źródło
ListBucket mnie dopadł! Dzięki za to
Quad64Bit
U mnie działało, gdy utrzymywałam tylko getObjet
LittleTiger
0

Musisz sprawdzić wzorzec arn zdefiniowany w tagu Resource dla Policy-

„Zasób”: „arn: aws: s3 ::: s3nazwazbioru / *”

Dodanie „/ *” na końcu pomogłoby rozwiązać problem, jeśli napotkasz go nawet po odblokowaniu polityki dostępu publicznego dla twojego Bucket.

Pinaki
źródło
0
  • Przejdź do Amazon S3 w swojej instancji.
  • Przejdź do Uprawnienia -> zakładka Dostęp publiczny.
  • Wybierz Edytuj i odznacz Zablokuj dostęp publiczny i zapisz.
  • Zobaczysz tag „Publiczny” na karcie Uprawnienia i na liście kontroli dostępu.
Chathura Devinda
źródło
0

Możesz także skonfigurować ListBuckets dla każdego folderu, na przykład

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

Reguły te są używane razem z SES do odbierania wiadomości e-mail, ale umożliwiają zewnętrznemu użytkownikowi przeglądanie plików, które zostały umieszczone w wiadrze przez SES. Postępowałem zgodnie z instrukcjami tutaj: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Ponadto domain.co/user/podczas korzystania z zestawu SDK należy określić przedrostek jako ukośnik WITH na końcu, w przeciwnym razie odmowa dostępu. mam nadzieję, że to pomoże każdemu

zavr
źródło