Как отладить сообщение "s3: CreateBucket Access Denied" из CloudFormation

У меня есть стек CloudFormation, созданный из бессерверного файла YAML.

Один из ресурсов таков:

"S3BucketWebRoot": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": "samhain.today",
        "AccessControl": "PublicRead",
        "WebsiteConfiguration": {
          "IndexDocument": "index.html",
          "ErrorDocument": "404.html"
        }
      }
    }

У меня нет проблем с развертыванием файлов стека (включая создание самого ведра S3), но когда стек начинает собираться, я получаю:

    14:38:46 UTC-0500   CREATE_FAILED   AWS::S3::Bucket S3BucketWebRoot API: s3:CreateBucket Access Denied

Проблема в том, что Пользователь, связанный с бессерверной службой, в рамках своей политики:

{
        "Effect": "Allow",
        "Action": [
            "s3:CreateBucket",
            "s3:PutObject",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:DeleteObject",
            "s3:DeleteBucket",
            "s3:ListBucketVersions"
        ],
        "Resource": [
            "arn:aws:s3::*:*"
        ]
    }

Как мне вообще отладить это? Либо мой Resource неверен, либо используется какой-то другой пользователь, но это не имеет смысла, потому что они привязаны к идентификатору ключа доступа.


person Dancrumb    schedule 26.03.2017    source источник


Ответы (2)


Я хотел бы четко указать, что @Dancrumb уже написал в комментарии к отрицательному ответу: что, казалось, сработало для него и меня, так это заменить мелкозернистые разрешения S3 разрешением с одним подстановочным знаком:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
             "s3:*",
             ...
        ]
    }
}

Я могу только предполагать причину. В отчете о проблемах для бессерверного проекта на Github я видел, как люди упоминали, что они использовали пользователя, привязанного к учетной записи с включенным MFA, что применимо и в моем случае (учетная запись имеет MFA, а не пользователя). Если s3: * слишком разрешающий для вас, вы можете ограничить его «постфактум» с помощью дополнительного сегмента deny. К сожалению, у меня нет времени проверять эту теорию.

person Christoph    schedule 22.10.2019

Измените ресурс на:

"Resource": "*"

Это разрешит данные действия для любого ресурса. Все ваши действия связаны с S3, поэтому им будет разрешено работать с любыми корзинами Amazon S3.

Если вы хотите разрешить ему работать только с одним ведром, используйте:

"Resource": "arn:aws:s3:::BUCKET-NAME"
person John Rotenstein    schedule 26.03.2017
comment
Мне пришлось установить Action на s3:*, чтобы он заработал ... есть идеи, почему? - person Dancrumb; 27.03.2017
comment
Я понятия не имею. Кажется, что при создании политики он отлично работает с конкретными действиями. Какую ошибку вы получили? - person John Rotenstein; 27.03.2017