AWS S3 "ACCESS DENIED" 正在尝试 Rails Sitemap_Generator

AWS S3 "ACCESS DENIED" trying on Rails Sitemap_Generator

所以我按照 sitemap_generator Gem 上的说明将站点地图上传到 S3(因为它不是从“public”文件夹中读取的)并且我不断收到以下错误:

In '/var/www/mysite/releases/20200902316/public/':
rake aborted!
Aws::S3::Errors::AccessDenied: Access Denied

这有点有趣,因为我在 S3 上为 Active_Storage 使用完全相同的凭据并且工作正常。

这是我的 sitemap.rb

require 'aws-sdk-s3'

# Set the host name for URL creation
SitemapGenerator::Sitemap.default_host = "https://mywebsite.com"

SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new('s3_bucket',
  aws_access_key_id: 'my_access_key',
  aws_secret_access_key: 'my_secret',
  aws_region: 'us-east-1'
)

这一切都直接来自 site_generator 页面上的自述文件...所以我不太明白为什么如果相同的凭据适用于 Active Storage,它就不会工作...

https://github.com/kjvarga/sitemap_generator

好的......这会有点涉及,因为要让它发挥作用,不仅仅是我的问题的答案。但让我们从这里开始吧。

我之所以首先要这样做是因为 Google Search Console 无法访问我的 rails“public”文件夹中的站点地图。所以我决定让 Sitemap Generator 将它发送到我的 S3 存储桶。

这就是我遇到“拒绝访问”错误的地方。 (一定要使用“环境”变量...否则你不会访问正确的数据库。)

RAILS_ENV=production bundle exec rake sitemap:refresh

您收到此错误的原因是,默认情况下,Amazon 将所有 S3 存储桶设置为:“阻止 Public 访问。”因此,您需要在 S3 存储桶权限下禁用“阻止 Public 访问”功能,如下所示。 (当您阅读本文时,这可能看起来有所不同,因为他们之前已多次更改该配置。)

禁用该功能后,您应该就可以上传您的站点地图了。但是...您仍然无法将此站点地图连接到 Google Search Console,因为您还需要将存储桶添加到 Search Console。

http://yourbucketname.s3.amazonaws.com/

您可以通过将提供的护目镜 html 文件上传到您的存储桶的根目录,然后单击“验证”来验证您的存储桶。

然后您终于可以上传站点地图生成器站点地图了:

http://yourbucketname.s3.amazonaws.com/sitemaps/sitemap.xml.gz

它仍然会说无法获取它...但是几天后它应该会开始更新。