AWS CloudFront 编程访问导致 AccessDenied,没有任何解释
AWS CloudFront programmatic access results in AccessDenied with no explanation
我正在按照本指南 here 使用 cloudfront cdn 在 aws s3 上设置静态 nuxtjs 站点。
向导的每一步都成功了。我可以从 url 访问我网站的测试图像。但是,以编程方式访问 CloudFront 发行版的指南的最后一步给我以下错误:
我已验证程序化用户的政策是准确的:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation",
"cloudfront:GetInvalidation",
"cloudfront:ListInvalidations",
"cloudfront:UnknownOperation"
],
"Resource": "*"
}
]
}
为什么我会得到 AccessDenied?我什至尝试为 CloudFront/S3 打开 * 的操作,但仍然被拒绝了。我已验证我的 secret/access 密钥也与程序化用户与策略相匹配。
有没有什么方法可以让我得到更具体的错误消息,说明出了什么问题?
更新:错误似乎发生在 gulpfile 中的以下操作之一期间:
g = g.pipe(cloudfront(config));
// create a cache file to speed up consecutive uploads
g = g.pipe(publisher.cache());
// print upload updates to console
g = g.pipe(awspublish.reporter());
我想我会梳理 aws publisher 插件来寻找它们。也许该指南已过时并忘记了权限。
解决了。 NuxtJS 指南所依赖的创建 CDN/S3 的指南让您创建一个私有存储桶,但他们的 gulpfile 中的设置是针对 public-read 存储桶的。
要解决此错误,您只需添加:
'x-amz-acl': 'private'
到您的 gulpfile 中的 headers。
编辑:我还要说的是,这篇文章对另一篇文章的依赖是造成混乱的根源。另一篇文章是关于设置一个私有存储桶,其内容可以像 cdn 一样通过 CloudFront 访问。但我发现仅使用特定于存储桶的选项来托管静态站点(使其 public)更容易。
我正在按照本指南 here 使用 cloudfront cdn 在 aws s3 上设置静态 nuxtjs 站点。
向导的每一步都成功了。我可以从 url 访问我网站的测试图像。但是,以编程方式访问 CloudFront 发行版的指南的最后一步给我以下错误:
我已验证程序化用户的政策是准确的:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation",
"cloudfront:GetInvalidation",
"cloudfront:ListInvalidations",
"cloudfront:UnknownOperation"
],
"Resource": "*"
}
]
}
为什么我会得到 AccessDenied?我什至尝试为 CloudFront/S3 打开 * 的操作,但仍然被拒绝了。我已验证我的 secret/access 密钥也与程序化用户与策略相匹配。
有没有什么方法可以让我得到更具体的错误消息,说明出了什么问题?
更新:错误似乎发生在 gulpfile 中的以下操作之一期间:
g = g.pipe(cloudfront(config));
// create a cache file to speed up consecutive uploads
g = g.pipe(publisher.cache());
// print upload updates to console
g = g.pipe(awspublish.reporter());
我想我会梳理 aws publisher 插件来寻找它们。也许该指南已过时并忘记了权限。
解决了。 NuxtJS 指南所依赖的创建 CDN/S3 的指南让您创建一个私有存储桶,但他们的 gulpfile 中的设置是针对 public-read 存储桶的。
要解决此错误,您只需添加:
'x-amz-acl': 'private'
到您的 gulpfile 中的 headers。
编辑:我还要说的是,这篇文章对另一篇文章的依赖是造成混乱的根源。另一篇文章是关于设置一个私有存储桶,其内容可以像 cdn 一样通过 CloudFront 访问。但我发现仅使用特定于存储桶的选项来托管静态站点(使其 public)更容易。