【发布时间】:2018-09-12 03:06:47
【问题描述】:
在 CodeBuild 中,我有 2 个项目。一个用于暂存站点,另一个用于生产站点。当我编译我的网站并通过临时项目运行它时,它工作正常。它已成功同步到我的暂存站点的 s3 存储桶。但是,当尝试编译它并通过生产项目运行它时,运行同步命令时,它返回错误:
致命错误:调用 ListObjects 操作时发生错误 (AccessDenied):访问被拒绝
[Container] 2018/09/11 08:40:33 命令没有成功退出 aws s3 sync public/ s3://$S3_BUCKET exit status 1
我做了一些挖掘,我认为问题出在我的存储桶策略上。我在 S3 存储桶上使用 CloudFront 作为 CDN。在我完全确定必须修改之前,我不想修改生产存储桶的存储桶策略。我担心它可能会对现场网站产生一些影响。 这是我的生产存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[bucket_name]/*"
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity [access_code]"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[bucket_name]/*"
}
]
}
【问题讨论】:
-
CodeBuild 使用什么 IAM 角色和策略?它可能会阻止它将文件保存到 Prod 存储桶中。 prod S3 存储桶是否与 CodeBuild 位于同一帐户中?如果没有,您需要设置跨帐户访问权限。
标签: amazon-web-services amazon-s3 amazon-cloudfront aws-codebuild