首页 文章

设置凭据以显示Amazon S3中的静态图像

提问于
浏览
0

在我的Rails应用程序中,我想显示来自我的AWS S3存储桶的静态图像 . 所以没有必要像Paperclip或Carrierwave这样的解决方案,因为不涉及上传 . 所以我使用 aws-sdk gem与S3存储桶进行交互 .

这当然对公共图像很好,但是当我想显示私有图像时,我得到一个 access denied . 我设置了以下环境变量:AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY和S3_BUCKET_NAME .

在Heroku上我用 heroku config:set 添加了这些环境变量,在本地我使用 dotenv gem .

问题是我仍然在本地和Heroku上都有 access denied 错误 . 这里有什么问题?这是视图(使用静态URL,稍后这将是动态的):

= link_to "https://s3-eu-west-1.amazonaws.com/mybucket/Demo/20160503092647717.png" do
    = image_tag("https://s3-eu-west-1.amazonaws.com/mybucket/Demo/20160503092647717.png", width: '600')

2 回答

  • 0

    您无法通过将AWS凭据添加到服务器来解决此问题 . 您只向客户端/浏览器发送指向受保护资源的链接 . 您必须公开资源或者为了增加一点安全性,您可以创建新的访问密钥,这些访问密钥具有对存储桶的读访问权限并使用AWS JS SDK并将新创建的凭据提供给访问者 .

  • 0

    S3存储桶默认为PRIVATE,只能通过所有者访问密钥访问 .

    通过将Principal设置为“*”并附加到存储桶策略,可以使存储桶不需要访问密钥即可进行公共访问 .

    {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Sid":"AddPerm",
          "Effect":"Allow",
          "Principal": "*",
          "Action":["s3:GetObject"],
          "Resource":["arn:aws:s3:::examplebucket/*"],
          "Condition": {
            "IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
            "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} 
      }   
        }
      ]
    }
    

    以上“条件”可以限制哪个IP地址可以访问您的S3存储桶 .

    通过严格的策略和访问控制,您可以通过多种方式授予存储桶更新或查看的权限 . 您需要仔细阅读并配置它们 . 请点击这里:S3 example bucket policies

相关问题