我需要定期将EC2
实例中存在的日志复制到S3
存储桶。所以我使用亚马逊cli和crontab来安排它。
在crontab -e
中,我添加了以下行
* * * * * aws --version >> /tmp/out.txt 2&>1
* * * * * aws s3 cp log_file_path s3://bucket >> /tmp/out.txt 2&>1
第一个声明,我只是用来检查aws cli是否正常工作,因为我是新手,每分钟都会将aws版本重定向到一个文件。
第一个命令工作正常但第二个命令没有。如果我独立运行aws s3 cp
命令,那么它运行正常,即将日志文件复制到s3存储桶。但如上所述,它不能与cron一起使用,
通过日志知道我得到以下错误:
Upload failed....An error occurred (AccessDenied) when calling the PutObject operation : Access Denied.
有人可以指出如何使其发挥作用。
答案 0 :(得分:2)
我猜您在您的EC2用户帐户中将AWS凭据设置为环境变量。 cron作业无法访问这些环境变量,这就是您需要将它们移动到~/.aws/credentials
的原因。
然而更好的选择是通过IAM角色assign the permissions to the EC2 instance directly。
答案 1 :(得分:0)
第一步是创建具有正确权限的EC2角色,以便s3操作可行。 因此不需要aws cli配置。
然后创建将执行上载或任何aws相关操作的脚本,最后添加cron命令。
从安全和管理角度考虑将ec2角色创建为必需角色。