错误代码:将应用程序提交到无服务器应用程序存储库时出现 403 Forbidden
Posted
技术标签:
【中文标题】错误代码:将应用程序提交到无服务器应用程序存储库时出现 403 Forbidden【英文标题】:Error Code: 403 Forbidden when submitting app to serverless application repository 【发布时间】:2019-03-11 18:36:29 【问题描述】:我正在尝试将我的应用程序发布到无服务器应用程序存储库,但是当我选择我的“template.yml”文件时出现错误:
禁止(服务:Amazon S3;状态代码:403;错误代码:403 禁止;请求编号:XXXXXXXXXXXXXX; S3 扩展请求 ID: XXXXXXXXXXXXXXXXXX)
这是我的“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
【问题讨论】:
您是否已通过 AWS 账户的身份验证?听起来您没有权限在您使用的帐户上发布服务。 是的,我已登录帐户 嗯。那么除非您使用的帐户已被限制并且不允许执行该功能,否则我不知道。对不起。 【参考方案1】:为了能够使用无服务器应用程序存储库 (serverles-s-repo) 发布应用程序,serverles-s-repo 需要能够读取在打包应用程序期间上传到 S3 的 S3 工件。
如Publishing Applications 中所述,提供这些权限的标准方法是向serverles-s-repo
提供GetObject
,并在您的存储桶上使用资源策略,例如以下示例,其中<your-bucket-name>
将被替换以您的 S3 存储桶的名称命名。
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Principal":
"Service": "serverles-s-repo.amazonaws.com"
,
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<your-bucket-name>/*"
]
它在you made your bucket public 开始工作的原因是因为这样做,您使该存储桶中的对象,包括来自包装世界的工件可读,包括serverles-s-repo
服务。正如Access Control Lists 文档中所指出的那样,虽然这有效:
如果您将存储桶公开(不推荐),任何未经身份验证的用户都可以将对象上传到存储桶。
【讨论】:
【参考方案2】:我通过为我的存储桶创建输入以下策略解决了这个问题:
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Principal":
"Service": "serverles-s-repo.amazonaws.com"
,
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKET_NAME/*"
]
BUCKET_NAME
是我的存储桶的名称。
请用大量的 NaCl 来回答这个问题,因为我不是很了解 AWS 权限。
仅仅授予对我的 S3 存储桶的公共 READ 访问权限对我不起作用(就像对 @harry 所做的那样)。我还必须包含 sam deploy
构建的 packaged.yaml 模板——它包含完整的 S3 URL。
【讨论】:
【参考方案3】:我必须授予对我的 S3 存储桶和对象的公共读取访问权限才能使其工作。
【讨论】:
不是推荐的方法——参见上面@jamie Starke 的解释:***.com/a/52685172/2317829以上是关于错误代码:将应用程序提交到无服务器应用程序存储库时出现 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章
通过 FTP 将文件添加到 git 存储库时,在脚本中使用 inotifywait 自动执行 git 提交
当我的同事更改代码并将其提交到存储库时,我可以看到代码,但 xCode 编译时就好像他的贡献不存在一样
将 AWS::Route53::RecordSet DnsRecord 添加到无服务器 Cloudfront Distribution