【问题标题】:s3fs: AWS Message: Access Denied Ubuntu 11.10s3fs:AWS 消息:访问被拒绝 Ubuntu 11.10
【发布时间】:2012-02-22 08:17:57
【问题描述】:

我安装了这里描述的 s3fs http://code.google.com/p/s3fs/wiki/InstallationNotes

然后在我创建用户bucket_user

然后把他的accessKeyId:secretAccessKey放到/etc/passwd-s3fs

他们是 S3 我创建了一个存储桶 super_bucket

并设置其政策:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AddCanned",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::234234234234:user/bucket_user"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::super_bucket/*"
        }
    ]
}

然后在我的服务器上 /usr/bin/s3fs super_bucket /mnt/s3/

并收到答案:

s3fs: CURLE_HTTP_RETURNED_ERROR

s3fs: HTTP Error Code: 403

s3fs: AWS Error Code: AccessDenied

s3fs: AWS Message: Access Denied

正在使用的 s3fs 版本(s3fs --version):1.61

使用的保险丝版本(pkg-config --modversion fuse):2.8.4

系统信息(uname -a):Linux Ubuntu-1110-oneiric-64-minimal 3.0.0-14-server #23-Ubuntu SMP Mon Nov 21 20:49:05 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

发行版(cat /etc/issue):Ubuntu 11.10 \n \l

s3fs 系统日志消息(grep s3fs /var/log/syslog):空

所以我从头开始

在服务器上

纳米~/.passwd-s3fs

cmd+v accessKeyId:secretAccessKey

chmod 600 ~/.passwd-s3fs

在存储桶策略中

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::super_bucket/*",
                "arn:aws:s3:::super_bucket"
            ]
        }
    ]
}

“保存”

/usr/bin/s3fs super_bucket /mnt/s3/

再次收到

s3fs:AWS 消息:访问被拒绝

【问题讨论】:

    标签: ubuntu amazon-s3 s3fs


    【解决方案1】:

    更新

    分析

    显然s3fs 在 IAM 支持方面存在问题,包括您正在使用的最新 稳定 版本 1.61,请查看IAM user permissions issue 了解详细信息,特别是comment 4

    显然有人打电话给 [ListAllMyBuckets()] 这是确定之前请求的存储桶是否存在所必需的 正在尝试挂载。

    现在,ListAllMyBuckets()operation on the service 而不是 bucketobject,它们是您的 Resource 语句当前针对的唯一实体,因此使用 您当前的政策实际上拒绝了 ListAllMyBuckets()

    解决方案

    同样如 comment 4 中所述,您必须添加一个额外的策略片段来相应地满足您的 s3fs 版本的此要求:

    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        }
    ]
    

    或者,您可以在应用comment 9 中提供的补丁后从源代码构建 s3fs 版本 1.61,这应该可以解决问题(尽管我自己还没有测试过补丁)。显然,更高版本可能也包含对此的修复,请参阅comment 11 ff

    祝你好运!


    鉴于预期的功能(即将存储桶装载为本地文件系统读/写),s3fs 可能也需要访问存储桶本身,而不仅仅是其中包含的对象,这单独处理 - 尝试将您的 Resource 语句替换为以下内容:

    "Resource": [
        "arn:aws:s3:::super_bucket",
        "arn:aws:s3:::super_bucket/*",
    ]
    

    第一个资源以bucket为目标,而后者以其中包含的对象为目标。

    【讨论】:

    • 如果我做这个没有任何改变 ` "Principal": { "AWS": "*" }, `
    • @fullpipe - 哟,像这样排除Principal 确实是个好主意。您可能已经知道IAM user permissions issue?如果没有,您可能需要查看comment 1,尤其是关于${HOME}/.passwd-s3fs 上文件系统权限的明显要求。
    • 也许你有一些测试桶,我可以尝试安装
    • @fullpipe:查看我的更新答案以进一步分析IAM user permissions issue 并为您的问题提供可能的解决方案。
    【解决方案2】:

    没有人说我需要在 AWS IAM 中设置用户策略

    【讨论】:

      【解决方案3】:

      我可以通过在存储桶本身上指定ListBucket 权限以及对存储桶内容 指定Put/Get/DeleteObject 权限来完成这项工作。我通过this repo 中的shell 脚本跟踪this CloudAcademy guide,它试图很好地打包它。这是工作政策:

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:ListBucket"
                  ],
                  "Resource": [
                      "arn:aws:s3:::super_bucket"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:PutObject",
                      "s3:GetObject",
                      "s3:DeleteObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::super_bucket/*"
                  ]
              }
          ]
      }
      

      在以这种方式定义它之前,我只对存储桶而不是它的内容拥有一堆权限,虽然我能够登录到我的 FTP 实例,但当我尝试put test.txt 时,我得到了一个@987654327 @消息。

      put 尝试失败期间,我在日志中看到了这一点。这是此调试命令的调试输出:

      sudo /usr/local/bin/s3fs super_bucket \
      -o use_cache=/tmp,iam_role="super_ftp_user",allow_other /home/super_ftp_user/ftp/files \
      -o dbglevel=info -f \
      -o curldbg \
      -o url="https://s3-us-east-1.amazonaws.com" \
      -o nonempty
      

      输出:

      [CURL DBG] * Connection #8 to host super_bucket.s3-us-east-1.amazonaws.com left intact
      [INF]       curl.cpp:RequestPerform(2267): HTTP response code 200
      [INF]     s3fs.cpp:create_file_object(918): [path=/test.txt][mode=100644]
      [INF]       curl.cpp:PutRequest(3127): [tpath=/test.txt]
      [INF]       curl.cpp:PutRequest(3145): create zero byte file object.
      [INF]       curl_util.cpp:prepare_url(250): URL is https://s3-us-east-1.amazonaws.com/super_bucket/test.txt
      [INF]       curl_util.cpp:prepare_url(283): URL changed is https://super_bucket.s3-us-east-1.amazonaws.com/test.txt
      [INF]       curl.cpp:PutRequest(3225): uploading... [path=/test.txt][fd=-1][size=0]
      [INF]       curl.cpp:insertV4Headers(2598): computing signature [PUT] [/test.txt] [] []
      [INF]       curl_util.cpp:url_to_host(327): url is https://s3-us-east-1.amazonaws.com
      [CURL DBG] * Found bundle for host super_bucket.s3-us-east-1.amazonaws.com: 0x7fa0d00d3c60 [can pipeline]
      [CURL DBG] * Re-using existing connection! (#8) with host super_bucket.s3-us-east-1.amazonaws.com
      [CURL DBG] * Connected to super_bucket.s3-us-east-1.amazonaws.com (123.456.789.012) port 443 (#8)
      [CURL DBG] > PUT /test.txt HTTP/1.1
      [CURL DBG] > Host: super_bucket.s3-us-east-1.amazonaws.com
      [CURL DBG] > User-Agent: s3fs/1.88 (commit hash ***; OpenSSL)
      [CURL DBG] > Accept: */*
      [CURL DBG] > Authorization: xxxxxxx
      [CURL DBG] > Content-Type: application/octet-stream
      ...
      [CURL DBG] > Content-Length: 0
      [CURL DBG] >
      [CURL DBG] < HTTP/1.1 403 Forbidden
      [CURL DBG] < x-amz-request-id: 1234567890
      [CURL DBG] < x-amz-id-2: ******
      [CURL DBG] < Content-Type: application/xml
      [CURL DBG] < Transfer-Encoding: chunked
      [CURL DBG] < Date: Tue, 19 Jan 2021 04:30:15 GMT
      [CURL DBG] < Server: AmazonS3
      [CURL DBG] * HTTP error before end of send, keep sending
      [CURL DBG] <
      [CURL DBG] * Connection #8 to host super_bucket.s3-us-east-1.amazonaws.com left intact
      [ERR] curl.cpp:RequestPerform(2287): HTTP response code 403, returning EPERM. Body Text: <?xml version="1.0" encoding="UTF-8"?>
      <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>1234567890</RequestId><HostId>***</HostId></Error>
      [INF]       cache.cpp:DelStat(578): delete stat cache entry[path=/test.txt]
      

      【讨论】:

        猜你喜欢
        • 2012-11-05
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多