Gulp AWS CloudFront编程访问导致AccessDenied,且无任何解释

3zwjbxry  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(123)

我按照这个指南在这里设置一个静态nuxtjs网站上的awss 3与cloudfront cdn。
指南的每一步都很成功。我可以从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打开 * 操作,但仍然被拒绝。我已经验证了我的密钥/访问密钥也与策略中的编程用户匹配。
有没有什么方法可以让我得到一个更具体的错误消息,告诉我出了什么问题?
UPDATE:在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出版商插件寻找他们。也许指南是过时的,忘记了一个许可。

hmmo2u0o

hmmo2u0o1#

NuxtJS指南所依赖的创建CDN/S3的指南要求您创建一个私有桶,但他们的gulpfile中的设置是针对公共读取桶的。
若要解决此错误,您只需添加:

'x-amz-acl': 'private'

到你的gulpfile文件头。
编辑:我还要说的是,这篇文章依赖于另一篇文章是一个混乱的来源。另一篇文章是关于建立一个私有的bucket,其内容可以像cdn一样通过CloudFront访问。但我发现使用bucket特定的选项来托管一个静态站点(使其公开)更容易。

相关问题