【问题标题】:AWS is rejecting my credentials when I try to push to S3 from an Ubuntu server instead of my local machine当我尝试从 Ubuntu 服务器而不是本地计算机推送到 S3 时,AWS 拒绝了我的凭据
【发布时间】:2020-11-14 18:39:41
【问题描述】:

我有一个客户(作为客户,而不是程序!)运行一个由 S3 和 Cloudfront 提供支持的站点。我开发了一个数据驱动的 Web 交互(当然由 JS 提供支持),因为数据更新频繁,所以我会定期为他们更新。我使用他们提供给我的公钥/私钥对,因为我非常合理地无法访问他们的整个 AWS 账户。

客户希望能够随时更新交互,即使我没有立即待命。但是我要求他们通过 Docker 容器或你有什么来复制我的本地环境是不现实的——我什至不确定他们是否具有对他们的 Mac 的管理员访问权限。我没有直接联系他们管理基础设施的 DevOps 团队。 (这是一家大公司,我的联系人不是开发人员。)

我的计划是在 我的 AWS 账户上启动一个小型、廉价的 EC2 实例,安装必要的语言和库来复制我在我的机器上所做的事情:获取新数据并处理它(在R - 原始文件非常大,因此交互式无法直接获取它们),重新编译交互式(在Node.js,使用Webpack)并将其实时推送或推送到登台服务器(使用awscli,亚马逊的Python客户)。我已经有简单的 Shell 脚本可以一举完成所有这些,并且我已经确认客户端能够使用我提供的 .pem 文件将 ssh 插入我的小实例并运行一两个 Shell 脚本。

问题:当上传请求来自我的小型 Ubuntu 18.04 服务器而不是我的本地计算机时,客户的 AWS 账户拒绝了他们提供给我的凭据。关于如何在 Ubuntu 上安装 awscli 有很多相互竞争的说明——aptitude、pip、direct download from Amazon 等。我都试过了,目前正在服务器上使用这个版本:

$ aws --version
aws-cli/1.18.104 Python/3.6.9 Linux/5.3.0-1030-aws botocore/1.17.27

我在服务器上运行了aws configure,确定我使用了正确的密钥对,并且设置得很好(至少我是这么认为的)。但是当我用一个无害的命令测试它时,我被告知密钥无效:

$ aws s3 ls s3://[client's s3 instance]
An error occurred (InvalidAccessKeyId) when calling the ListObjectsV2 operation:
The AWS Access Key Id you provided does not exist in our records.

当我在本地机器 MacBook 上使用相同的凭据运行这个完全相同的命令时,它工作得很好。我 100% 确定我使用的是相同的密钥对——我手动检查过。

所以我很困惑为什么 AWS 拒绝来自 Ubuntu 服务器的请求但接受来自本地计算机的请求。我浏览了我能找到的所有 StackOverflow 帖子和留言板,但诊断结果通常是密钥对错误,而事实并非如此。

我唯一能想到的是我在本地使用了不同版本的awscli。在我的本地机器上,我仍在使用旧版本:

 $ aws --version
 aws-cli/1.16.10 Python/2.7.17 Darwin/19.6.0 botocore/1.12.0

我不愿意更新我机器上的 cli,以防它也在那里中断,但可以在 VM 中进行测试。但更重要的是,我想知道,在后台运行aws 命令是否存在更根本的区别,即从服务器和笔记本电脑运行。这对 Google 来说很棘手!

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-ec2 ubuntu-18.04 aws-cli


    【解决方案1】:

    毕竟,检查了 100 次,服务器上的凭据中缺少一个字符。秩序在宇宙中恢复。谢谢!

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 2021-09-06
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      相关资源
      最近更新 更多