【问题标题】:Symfony 4 & Amazon S3 - AWS credentials not workingSymfony 4 和 Amazon S3 - AWS 凭证不起作用
【发布时间】:2020-06-12 23:28:48
【问题描述】:

我有一个部署到 Digital Ocean Ubuntu 服务器的 Symfony 4 项目。 为了存储文件,我使用了 Amazon S3 存储桶。 我已经使用 aws/aws-sdk-php 库与 Amazon S3 存储桶进行交互。 我在 ~/.aws/credentials 创建了全局凭证文件并设法使其工作。

问题是它在服务器上不起作用。 我将凭据文件复制到服务器的 ~/.aws/ 目录,但出现此错误。

Error retrieving credentials from the instance profile metadata server. (Client error: `GET http://169.254.169.254/latest/meta-data/iam/security-credentials/` resulted in a `404 Not Found` response: not found)

我对此错误进行了一些研究 - 似乎 php 服务器没有找到凭据文件。 我该如何解决这个问题?

【问题讨论】:

    标签: php amazon-web-services symfony ubuntu amazon-s3


    【解决方案1】:

    所有 AWS 开发工具包都以特定的优先级顺序从各种来源搜索凭证。你可以在boto3 documentation看到这个顺序。

    通常,如果 SDK 无法从其搜索的任何来源中找到 任何 凭据,则它会报告从其搜索列表中的最终凭据提供程序检索凭据时出错,这就是通常(也许总是)来自实例元数据服务的 STS 凭据。

    在您的情况下,您甚至没有在 AWS 上运行,因此实例元数据服务不相关,您看到的错误消息是 red herring

    这是我怀疑正在发生的事情:您试图通过 ~/.aws/credentials 文件提供凭证,但 AWS PHP SDK 没有在那里找到凭证。因此,可能会发生以下情况之一:

    1. 您的 PHP 应用程序以不同的 Linux 用户身份运行,因此其主目录与您放置 .aws/credentials 文件的目录不同
    2. 您的 ~/.aws/credentials 文件在某些​​方面无效或其中的凭据为零(我会说不太可能)

    我的投票是#1。

    【讨论】:

    • 嗨,@jarmod。谢谢你的解释。你的第一个意见真的很有趣。我以 root 用户身份访问控制台,但 PHP 服务器以 CI/CD 管道中的“部署”用户身份运行。所以我将 ~/.aws/credentials 文件复制到 /home/deploy/.aws/credentials,但仍然出现错误。有什么想法吗?
    • 还有一个比较奇怪的是,我的第一种方法是使用项目目录下的.env文件,但是没有成功。所以我转向了全局凭证方法,但仍然无法正常工作。这两种方法都适用于我的本地。权限问题是否可能发生此错误?谢谢!
    • 可能会暂时向您的 PHP 应用程序添加其他代码以列出 ~/.aws/ 中的文件并 cat/print ~/.aws/credentials 的内容以确保它们是您认为的那样。只是为了验证它确实有权访问有效的凭据配置文件(但它没有使用它)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多