Дія Bucket S3 не стосується будь-яких ресурсів


124

Я дотримуюсь інструкцій з цієї відповіді, щоб створити наступну політику ковша S3:

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

Я повертаю таку помилку:

Дія не стосується будь-яких ресурсів у виписці

Що мені не вистачає в моїй політиці?


1
Я спробував рішення за посиланням: stackoverflow.com/a/36551238/2786039 І це працює зараз. З повагою
Вуонг Нгуен

Відповіді:


218

З документів IAM http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

Деякі служби не дозволяють вам вказувати дії для окремих ресурсів; натомість будь-які дії, перелічені в елементі Action або NotAction, застосовуються до всіх ресурсів цієї служби. У цих випадках ви використовуєте підстановку * в елементі "Ресурс".

З цією інформацією ресурс повинен мати таке значення, як нижче:

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

39
Не можу повірити, що це не згадується у політиці відра та / або генераторі політики!
Карлес Альколія

4
Я використовую *, і він все ще видає цю помилку. хтось може мені допомогти?
Єгуда Клінтон

@YehudaClinton, працює для мене. обов'язково додайте обидва / *
RMati

74

Просто видалення s3:ListBucketдозволу насправді не було досить хорошим рішенням для мене, і, мабуть, не для багатьох інших.

Якщо ви хочете s3:ListBucketдозволу, вам потрібно просто мати звичайний арн відра (без /*кінця), оскільки цей дозвіл стосується самого відра, а не предметів, що знаходяться в ньому.

Як показано нижче, ви повинні мати s3:ListBucketдозвіл як окрему заяву від дозволів , що відносяться до елементів у відрі , як s3:GetObjectі 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/*"
    }
  ]
}

Домовились. Для деяких дій потрібен дозвіл ListBucket, перш ніж ви зможете виконати GetObject, тому ця відповідь більш ретельна.
3cheesewheel

2
Це працює для мене і лише підкреслює, скільки роботи ще належить виконати AWS над керівництвом користувачів, щоб робити основні речі.
volvox

41

Помилка Дія не поширюється на будь-який ресурс у заяві

Просто це означає, що дія (ви написали в політиці) не стосується ресурсу. Я намагався оприлюднити своє відро, щоб хтось міг завантажити з мого відра. Я отримував помилку, поки не видаляв ("s3: ListBucket") зі свого заяви.

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

Оскільки відро списку не застосовується всередині відра, таким чином, видаляючи цю політику дій, спрацювало чудово.


Дякую, що працювали для мене, видаляючи "s3: ListBucket".
Пол Уотсон

14

Щойно наткнувся на цю проблему і знайшов коротше рішення для тих, хто хоче мати ListBucket та GetObject в одній політиці.

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

Неправильно - Principalзаборонено для граматики S3 Policy.
azec-pdx

Жодне з перерахованих вище рішень не працювало для мене, довіритель був або недійсним, або мені буде відмовлено у доступі.
Даніель

Це правильно, в цьому випадку Ресурс повинен бути масивом і включати ці 2 рядки ... Проголосувати.
Assil

4

Я також зіткнувся з подібним питанням під час створення відра

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

Я змінив вищевказаний код на

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

додати / * до імені відра, це вирішить проблему

Тут моє ім’я відра - mrt9949


Дякую!
Провели

4

У моєму випадку рішення цієї помилки намагалося видалити деякі дії, які я застосовував. Деякі з них не стосуються або не можуть працювати з цим ресурсом. У цьому випадку мені це не дозволить включати:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket дістав мене! Дякую за це
Quad64Bit

Для мене працювали, коли тримали лише getObjet
LittleTiger

0

Ви повинні перевірити шаблон арну, визначений під тегом Ресурс,

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

Додавання "/ *" врешті-решт допоможе вирішити проблему, якщо ви зіткнетеся з нею навіть після того, як для вашого відра буде розблоковано політику публічного доступу.


0
  • Перейдіть на Amazon S3 у своєму випадку.
  • Перейдіть на дозвіл -> вкладку загального доступу.
  • Виберіть Редагувати та зніміть прапорець Блокувати весь доступ до публіки та зберегти.
  • Ви побачите тег "Загальнодоступний" на вкладці "Дозвіл" та "Список контролю доступу".

0

Ви також можете налаштувати ListBuckets для кожної папки

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

Ці правила використовуються разом із SES для отримання електронної пошти, але дозволяє зовнішньому користувачеві переглядати файли, які SES помістив у відро. Я дотримувався інструкцій звідси: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Крім того, ви повинні вказати префікс у вигляді domain.co/user/косої риски в кінці під час використання SDK, інакше вам буде відмовлено у доступі. сподіваюся, що це допоможе комусь

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.