AWS CodeBuild 无法同步到 S3 存储桶 ListObject 被拒绝权限
AWS CodeBuild can't sync to S3 bucket ListObject denied permission
在 CodeBuild 中,我有 2 个项目。一个用于暂存站点,另一个用于生产站点。当我编译我的网站,并通过暂存项目 运行 它时,它工作正常。它已成功同步到我的暂存站点的 s3 存储桶。然而,当试图通过生产项目编译它并运行它时,当运行使用同步命令时,它returns一个错误:
fatal error: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
[Container] 2018/09/11 08:40:33 Command did not exit successfully 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]/*"
}
]
}
根据错误描述,缺少列表权限。
在您的存储桶策略中添加以下权限:
"Action": [
"s3:Get*",
"s3:List*"
]
这应该可以解决您的问题。还要检查在 codebuild
上创建的 IAM
服务角色以访问 S3
存储桶。在这种设置中,S3
存储桶策略和 IAM
角色都控制对 S3
存储桶的访问。
您的服务角色应具有 S3
.
的列表权限
{
"Sid": "S3ObjectPolicy",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:List*"
],
"Resource": ["arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"]
}
在 CodeBuild 中,我有 2 个项目。一个用于暂存站点,另一个用于生产站点。当我编译我的网站,并通过暂存项目 运行 它时,它工作正常。它已成功同步到我的暂存站点的 s3 存储桶。然而,当试图通过生产项目编译它并运行它时,当运行使用同步命令时,它returns一个错误:
fatal error: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
[Container] 2018/09/11 08:40:33 Command did not exit successfully 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]/*"
}
]
}
根据错误描述,缺少列表权限。
在您的存储桶策略中添加以下权限:
"Action": [
"s3:Get*",
"s3:List*"
]
这应该可以解决您的问题。还要检查在 codebuild
上创建的 IAM
服务角色以访问 S3
存储桶。在这种设置中,S3
存储桶策略和 IAM
角色都控制对 S3
存储桶的访问。
您的服务角色应具有 S3
.
{
"Sid": "S3ObjectPolicy",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:List*"
],
"Resource": ["arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"]
}