Crontab + AWS:“无法找到凭证”

Crontab + AWS:“无法找到凭证”

我有一台 Linode(Ubuntu 16.04),我正尝试通过调用脚本的 cron 作业将文件复制到 AWS S3 存储桶,但日志输出: upload failed: ../path/file.ext to s3://bucket/prefix/file.ext Unable to locate credentials

脚本tarsa 目录,然后将该 tar 上传到我的 s3 存储桶

  • 如果我直接通过以下方式调用脚本,它将开始工作sudo
  • 作为 root cron 作业,它tar可以工作,但aws上传不工作(出现上述错误)
  • 作为 [用户] cron 作业,tar失败(与故意的权限相关),但aws上传成功。
  • 当我安装 AWS CLI 时,我忘记了具体是如何措辞的,但我选择为所有用户安装它

我尝试过的事情

  1. aws我的脚本直接调用/usr/local/bin/aws
  2. /usr/local/bin/aws在 crontab 中以及我的脚本中添加PATH
  3. 在 crontab 中添加AWS_CONFIG_FILE="/home/[user]/.aws/config",也在我的脚本中添加
  4. aws configure以 root身份重新运行
  5. 下列的这个提示,并比较 cron 和交互式环境。我的环境计划 PATH包括我的列出的所有内容环境交互 PATH,再加上一些,甚至还有一些重复 - 这很糟糕吗?

我的环境交互(1810 行)与我的相比环境计划(36 行)。这肯定是我的环境存在差异,对吧?我搜索了我的环境交互对于 的任何实例aws,但没有,即使该环境工作正常。有没有关于在其中寻找其他特定项目的提示?

任何想法和帮助都非常感谢!谢谢!

答案1

如果您想使用 sudo 运行特定命令user,并从其主目录而不是您的主目录读取配置,那么您必须使用sudo -H -u user ...sudo 运行它以自动将 HOME 变量更新为被调用的用户。

在这种情况下,这将意味着将自动生成 AWS_CONFIG_FILE 和 AWS_CREDENTIALS 的有效值。

答案2

我将.aws目录从复制/home/[user//root/,这似乎解决了问题。

将配置文件复制到根文件夹是否存在安全或其他问题?

答案3

这里的问题是,要将文件上传到 s3,我们需要为 bash 脚本设置凭据。我遇到了同样的问题。

我以 bash 形式运行代码,一切正常。但当我添加 bash 脚本以 cron 形式运行时,同样的问题也出现在凭证上。

因此,我通过在我的 bash 脚本上提供凭据来解决这个问题,因为在运行 cron 时,它无法从aws 配置。因此,在其中添加凭据并不能解决您的问题。您可以看到以下代码作为我如何操作的示例。它对我有用。

export AWS_CONFIG_FILE="/root/.aws/config" #change it as per user
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

参考此关联了解更多信息。

但不建议在脚本中添加 aws 凭证。因此,您可以使用任何用户来配置 AWS 凭证。以该用户身份登录

sudo su - {user}

然后使用aws configure并配置您的 AWS 凭证,添加访问密钥 ID、机密、区域等。当您尝试以 root 身份配置时,只有 root 可以使用该凭证。因此,您需要 root 才能运行 s3 副本。

相关内容