我正在尝试为我的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服务器前面唯一的东西是负载均衡器,但我不明白为什么它会干扰我的请求。 这可能是我错过的其他东西吗?
答案 0 :(得分:7)
请检查您正在使用哪个密钥的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/*"
}
]
}
让我知道它是怎么回事
答案 1 :(得分:7)
请不要相信--configure开关:
我面临同样的问题。 它在--configure中显示403,但最后我保存了Settings,然后尝试了:
错误:测试失败:403(AccessDenied):访问被拒绝
重试配置? [Y / n] n
保存设置? [y / N] y
配置保存到'/root/.s3cfg'
# s3cmd put MyFile s3://MyBucket/
&安培;它工作..
答案 2 :(得分:6)
当你设置它时,s3cmd会在你的主目录中创建一个名为.s3cfg的文件。我会确保你把这个文件放在你的logrotate脚本可以读取的地方,然后使用-c标志。
例如,将logfile.txt文件上传到logbucket存储桶:
/ usr / local / bin / s3cmd -c /home/ubuntu/.s3cfg put logfile.txt s3:// logbucket
答案 3 :(得分:1)
您使用的s3cmd
版本是什么?
我使用s3cmd
1.1尝试了它,似乎s3cmd
1.1不适用于IAM角色。
但有人说s3cmd
1.5 alpha2支持IAM角色。(http://t1983.file-systems-s3-s3tools.file-systemstalk.info/s3cmd-1-5-0-alpha2-iam-roles-supportincluded-t1983.html)
我尝试了s3cmd
1.5 beta1(https://github.com/s3tools/s3cmd/archive/v1.5.0-beta1.tar.gz),它可以与IAM角色一起使用。
因此,有两种方法可以访问s3cmd
的s3存储桶:
答案 4 :(得分:0)
我通过删除s3cmd的所有安装找到了我的问题的解决方案。然后确保apt-get是最新的并再次从apt-get安装它。在配置之后(和之前一样)它运行得很好!
答案 5 :(得分:0)
我也有类似的问题。即使将我的EC2实例与具有s3完全访问策略的IAM角色相关联,我的s3cmd也失败了,因为其中没有任何.s3cfg文件。我通过更新我的s3cmd的版本来修复。
sudo pip install s3cmd == 1.6.1
诀窍!