从EC2机器访问拒绝s3cmd

时间:2014-04-23 13:29:56

标签: amazon-web-services amazon-ec2 amazon-s3 s3cmd

我正在尝试为我的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服务器前面唯一的东西是负载均衡器,但我不明白为什么它会干扰我的请求。 这可能是我错过的其他东西吗?

6 个答案:

答案 0 :(得分:7)

请检查您正在使用哪个密钥的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/*"
    
    
    }
    ]
    }
    

让我知道它是怎么回事

答案 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存储桶:

  1. 使用访问密钥和密钥 `

    您需要在/root/.s3cfg(default路径)中设置配置文件,如下所示

    access_key = XXXXXXXX SECRET_KEY = XXXXXXXXXXXXXXXXXXXX

    请注意,只需在.s3cfg中设置两个键值,不需要其他键。

    `
  2. 使用IAM添加s3策略&s3cmd> 1.5 alph2。 `

    您需要向ec2实例添加IAM,此角色可能具有以下策略

    { “效果”:“允许”, “行动”:[     “S3:” ] “资源”:“” } `

答案 4 :(得分:0)

我通过删除s3cmd的所有安装找到了我的问题的解决方案。然后确保apt-get是最新的并再次从apt-get安装它。在配置之后(和之前一样)它运行得很好!

答案 5 :(得分:0)

我也有类似的问题。即使将我的EC2实例与具有s3完全访问策略的IAM角色相关联,我的s3cmd也失败了,因为其中没有任何.s3cfg文件。我通过更新我的s3cmd的版本来修复。

  

sudo pip install s3cmd == 1.6.1

诀窍!