错误代码:403将应用程序提交到无服务器应用程序存储库时被禁止

时间:2018-10-06 13:10:17

标签: amazon-web-services amazon-s3

我正在尝试将应用程序发布到无服务器应用程序存储库,但是选择“ template.yml”文件时出现错误:

  

禁止访问(服务:Amazon S3;状态代码:403;错误代码:403   禁止要求编号:XXXXXXXXXXXXXX; S3扩展请求ID:   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 :(得分:3)

为了能够使用无服务器应用程序存储库(serverlessrepo)发布应用程序,serverlessrepo需要能够在打包应用程序期间读取上载到S3的S3工件。

Publishing Applications中所述,提供这些权限的标准方法是向GetObject的{​​{1}}提供存储桶上的资源策略,例如以下示例,其中serverlessrepo将替换为您的S3存储桶的名称。

<your-bucket-name>

它在you made your bucket public时开始工作的原因是因为这样做,您使该存储桶中的对象(包括来自打包世界的工件)变得可读,包括{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "serverlessrepo.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<your-bucket-name>/*" } ] } 服务。在Access Control Lists文档中已指出,此方法有效:

  

如果您将存储桶公开(不建议使用),则任何未经身份验证的用户都可以将对象上传到存储桶。

答案 1 :(得分:2)

我通过为我的存储桶输入以下策略来解决此问题:

{
    "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权限。

仅向我的S3存储桶授予公共READ访问权限对我不起作用(就像对@harry一样)。另外,我还必须包括sam deploy构建的packaged.yaml模板-它包含完整的S3 URL。

答案 2 :(得分:0)

我必须授予对我的S3存储桶和对象的公共读取访问权限,才能使其工作。

相关问题