首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >s3fs: AWS消息:拒绝Ubuntu11.10访问

s3fs: AWS消息:拒绝Ubuntu11.10访问
EN

Stack Overflow用户
提问于 2012-01-30 14:39:10
回答 3查看 2.4K关注 0票数 4

我分期付款s3fs,在这里描述http://code.google.com/p/s3fs/wiki/InstallationNotes

然后在我创建用户bucket_user

然后在/etc/passwd-s3fs中放置他的accessKeyId: in

它们是S3我创建了一个桶super_bucket

并制定其政策:

代码语言:javascript
复制
{
    "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/

并收到答复:

代码语言:javascript
复制
s3fs: CURLE_HTTP_RETURNED_ERROR

s3fs: HTTP Error Code: 403

s3fs: AWS Error Code: AccessDenied

s3fs: AWS Message: Access Denied

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

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

系统信息(uname -a):Linux Ubuntu-1110-oneiric-64-最小3.0.0-14-服务器#23-Ubuntu 11月21日20:49:05 UTC 2011 x86_64 GNU/Linux

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

s3fs syslog消息(grep s3fs /var/log/syslog):空

,所以我从开始

在服务器上

nano ~/.passwd-s3fs

cmd+v访问密钥:秘密访问密钥

chmod 600 ~/.passwd-s3fs

桶内政策

代码语言:javascript
复制
{
    "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消息:拒绝访问

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-15 22:07:47

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

票数 6
EN

Stack Overflow用户

发布于 2012-01-30 15:05:52

更新

分析

显然,s3fs在IAM支持方面存在问题,包括您正在使用的最新稳定版本1.61,请查看IAM用户权限问题以获得详细信息,特别是评论4

显然,在尝试挂载之前,需要调用[ListAllMyBuckets()]来确定请求的桶是否存在。

现在,ListAllMyBuckets()是一个对服务的操作,而不是桶,桶对象,它们是当前Resource语句的唯一目标实体,因此使用ListAllMyBuckets()实际上被当前策略所拒绝。

解决方案

正如评论4中所概述的,您必须添加一个额外的策略片段,以相应地满足您的s3fs版本的这一要求:

代码语言:javascript
复制
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:ListAllMyBuckets",
        "Resource": "arn:aws:s3:::*"
    }
]

或者,您可以在应用了s3fs中提供的修补程序之后,从源代码构建评论9版本1.61,该修补程序应该解决了这个问题(不过,我还没有亲自测试该修补程序)。显然,以后的版本也可能包含一个修复程序,请参阅评论11 ff

祝好运!

考虑到预期的功能(即将桶挂载为本地文件系统读/写),s3fs可能还需要访问桶本身,而不仅仅是其中包含的对象,这些对象是单独处理的--尝试用以下方法替换Resource语句:

代码语言:javascript
复制
"Resource": [
    "arn:aws:s3:::super_bucket",
    "arn:aws:s3:::super_bucket/*",
]

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

票数 2
EN

Stack Overflow用户

发布于 2021-01-19 05:36:22

我能够通过对桶本身指定ListBucket权限和对桶内容指定Put/Get/DeleteObject权限来实现这一点。我是通过这个回购中的shell脚本来跟踪它的,该脚本试图很好地打包它。这是一项工作政策:

代码语言:javascript
复制
{
    "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时,我得到了一条553 Could not create file.消息。

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

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
[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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9065543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档