【问题标题】:How does Heroku use AWS S3 credentials to access images in my bucket?Heroku 如何使用 AWS S3 凭证访问我存储桶中的图像?
【发布时间】:2019-02-10 04:37:16
【问题描述】:

我正在关注 Heroku 文档以在 S3 https://devcenter.heroku.com/articles/s3 上存储静态文件。我意识到该文档尚未更新以解释如何创建 IAM 用户,但我已经完成了该操作,并且还为存储桶和 CORS 文档创建了一个策略。然后我按照文档中的说明将环境变量添加到 Heroku,但对于 IAM 用户。我想知道的是 Heroku 如何知道如何处理这些环境变量。起名重要吗?我看到其他人将环境变量命名为 S3_* 而不是 AWS_* 就像 Heroku 文档中那样。我觉得必须缺少一个步骤,例如,“然后安装这个插件,它知道如何在请求静态文件时将这些环境变量发送到 S3”。因为当我在 Heroku 应用程序中使用单击 S3 控制台中的对象时提供的公共 URL 链接到它们时,我的图像没有显示出来

更新

我被误导认为有必要在 Heroku 上拥有一个 IAM 用户和相应的凭证作为环境变量,以便仅提供来自 S3 的静态文件。 @ceejayoz 帮助我意识到事实并非如此。您只需要一个允许 GetObject 的存储桶策略。成功执行此操作后,您将在存储桶上看到一个公共徽章,然后公众可以通过对象 URL 看到您的文件(单击 S3 控制台中的文件以查看此内容)。如果我希望能够以编程方式将文件上传到我的存储桶,我将需要一个客户端(在我的情况下,我相信 aws-sdk gem)和我上面提到的所有其他东西(环境变量、IAM 用户、CORS 文档) .

【问题讨论】:

    标签: heroku amazon-s3


    【解决方案1】:

    它由您选择的语言的 AWS 开发工具包处理。

    例如,在 PHP 中:

    https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_environment.html

    要向 Amazon Web Services 进行身份验证,开发工具包首先会检查您的环境变量中的凭证。 SDK 使用 getenv() 函数查找AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN 环境变量。这些凭据称为环境凭据。

    【讨论】:

    • 好的,我刚刚查看了 AWS SDK 的相应 ruby​​ 文档,并看到了类似命名的 env vars 的提及(尽管 Heroku 文档没有提及“S3_BUCKET_NAME”)。所以看起来我的 env vars 被恰当地命名了,但我怎么知道我的 Heroku 应用程序是否使用 AWS SKD?环境变量的存在是否足以让 Heroku 知道使用 SDK?我真的不需要选中复选框或在某处添加插件即可启用此功能?
    • @wetjosh 您负责 S3 集成。除非您对其进行编码,否则您的应用不会使用 S3。如果你使用 Rails:devcenter.heroku.com/articles/…
    • 让我问你一些事情@ceejayoz,如果我只想从 S3 提供我网站的静态文件,我什至需要处理任何这个 env var/IAM 用户/SDK 业务吗?
    • @wetjosh 正如您链接到的文档所示,“可以使用命令行或图形浏览器(如Amazon S3 控制台。” Heroku 不需要为此做任何事情。
    • 好吧,我不认为该文档清楚地表明,如果您只想提供静态文件,则不需要任何这些东西。它使我相信相反的观点。奇怪的是,该文档也根本没有提到 AWS SDK(如果我确实想上传的话)。所以我的存储桶策略或 CORS 一定有问题,或者我没有正确链接到图像。感谢您帮助我缩小问题范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多