Код ошибки: 403 Запрещено при отправке приложения в безсерверный репозиторий приложений. - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь опубликовать свое приложение в репозитории бессерверных приложений, но получаю сообщение об ошибке при выборе файла 'template.yml':

Запрещено (Сервис: Amazon S3; Код состояния: 403; Код ошибки: 403 Запрещено; Идентификатор запроса: XXXXXXXXXXXXXX; Идентификатор расширенного запроса S3: XXXXXXXXXXXXXXXXX)

это мой 'template.yml':

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'

Resources:
  DataScraper:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: data_scraper.handler
      Runtime: python3.6
      CodeUri:
        Bucket: ht-helpbot
        Key: data_scraper.zip
        Version: 1.0
      CodeUri: 's3://ht-helpbot/data_scraper.zip'
      Policies:
        - DynamoDBCrudPolicy:
              TableName: HTServiceProviderTable
  FindService:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: find_service.handler
      Runtime: python3.6
      CodeUri: 's3://ht-helpbot/find_service.zip'
      Policies:
        - DynamoDBCrudPolicy:
              TableName: HTServiceProviderTable

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Я решил эту проблему, введя следующую политику для моего ведра:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "serverlessrepo.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKET_NAME/*"
        }
    ]
}

, где BUCKET_NAME - имя моего ведра.

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

Простое предоставление общедоступного доступа READ к моей корзине S3 не сработало для меня (как это было для @harry).Также мне пришлось включить шаблон packaged.yaml, созданный sam deploy - он включает полный URL-адрес S3.

0 голосов
/ 07 октября 2018

Чтобы иметь возможность публиковать приложение с помощью репозитория бессерверных приложений (serverlessrepo), serverlessrepo должен иметь возможность считывать артефакты S3, загруженные в S3 во время упаковки вашего приложения.

Стандартный способпредоставление этих разрешений, как описано в Публикация приложений , означает предоставление GetObject для serverlessrepo политики ресурсов в вашем сегменте, например, в следующем примере, где <your-bucket-name> будет заменено наназвание вашей корзины S3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service":  "serverlessrepo.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<your-bucket-name>/*"
        }
    ]
}

Причина, по которой она начала работать, когда вы сделали вашу корзину общедоступной , заключается в том, что таким образом вы сделали объекты в этой корзине, включая артефактыиз мира читабельности упаковки, включая сервис serverlessrepo.Хотя это работает, как отмечается в документации Списки контроля доступа :

Если вы сделаете ваше хранилище общедоступным (не рекомендуется), любой не прошедший проверку подлинности пользователь может загрузить объекты в хранилище.

0 голосов
/ 07 октября 2018

Мне пришлось предоставить открытый доступ для чтения к моей корзине S3 и объектам, чтобы она работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...