我正在尝试为我的nginx服务器使用日志轮换配置,我将其用作位于EC2 Ubuntu实例上的反向代理机器.
我希望在轮换后将这些日志存储在S3存储桶上,但是当我尝试配置s3cmd工具时,我只是"访问被拒绝,你确定你的密钥有ListAllMyBuckets权限错误".
我很确定我的凭据在IAM上正确配置,尝试了至少五种不同的凭证(甚至是根信用凭证),结果相同.使用具有相同凭据的aws cli工具列出我本地计算机上的所有存储桶工作正常,这让我感到困惑,因为我的EC2实例上没有任何访问权限.
这是我跑的:
which s3cmd /usr/local/bin/s3cmd s3cmd --configure --debug Access Key: ************** Secret Key: ******************************* Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: False HTTP Proxy server name: HTTP Proxy server port: 0
这就是结果
... DEBUG: ConnMan.put(): connection put back to pool (http://s3.amazonaws.com#1) DEBUG: S3Error: 403 (Forbidden) DEBUG: HttpHeader: x-amz-id-2: nMI8DF+............ DEBUG: HttpHeader: server: AmazonS3 DEBUG: HttpHeader: transfer-encoding: chunked DEBUG: HttpHeader: x-amz-request-id: 5912737605BB776C DEBUG: HttpHeader: date: Wed, 23 Apr 2014 13:16:53 GMT DEBUG: HttpHeader: content-type: application/xml DEBUG: ErrorXML: Code: 'AccessDenied' DEBUG: ErrorXML: Message: 'Access Denied' DEBUG: ErrorXML: RequestId: '5912737605BB776C' DEBUG: ErrorXML: HostId: 'nMI8DF+............ ERROR: Test failed: 403 (AccessDenied): Access Denied ERROR: Are you sure your keys have ListAllMyBuckets permissions?
我的nginx服务器前面唯一的东西是负载均衡器,但我不明白为什么它会干扰我的请求.这可能是我错过的其他东西吗?
请检查IAM用户是否使用了哪些密钥
步骤将是
AWS控制台转到IAM面板
IAM 用户 > 在底部菜单中选择用户 >第二个选项卡是 权限
附加用户策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListAllMyBuckets"], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::YOU-Bucket-Name" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::YOU-Bucket-Name/*" } ] }
让我知道事情的后续
请不要相信--configure开关:
我面临同样的问题.它在--configure中显示403,但最后我保存了Settings,然后尝试:
错误:测试失败:403(AccessDenied):访问拒绝
重试配置?[是/否] n
保存设置?[y/N] y
配置保存到'/root/.s3cfg'
# s3cmd put MyFile s3://MyBucket/
& 有效..
当您设置它时,s3cmd在您的主目录中创建一个名为.s3cfg的文件.我会确保你把这个文件放在你的logrotate脚本可以读取的地方,然后使用-c标志.
例如,将logfile.txt文件上载到logbucket存储桶:
/ usr/local/bin/s3cmd -c /home/ubuntu/.s3cfg put logfile.txt s3:// logbucket