我分期付款s3fs,在这里描述http://code.google.com/p/s3fs/wiki/InstallationNotes
然后在我创建用户bucket_user
然后在/etc/passwd-s3fs中放置他的accessKeyId: in
它们是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 --版本):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
桶内政策
{
"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消息:拒绝访问
发布于 2012-02-15 22:07:47
没有人说我需要在AWS IAM中设置用户策略
发布于 2012-01-30 15:05:52
更新
分析
显然,s3fs在IAM支持方面存在问题,包括您正在使用的最新稳定版本1.61,请查看IAM用户权限问题以获得详细信息,特别是评论4
显然,在尝试挂载之前,需要调用[ListAllMyBuckets()]来确定请求的桶是否存在。
现在,ListAllMyBuckets()是一个对服务的操作,而不是桶,桶或对象,它们是当前Resource语句的唯一目标实体,因此使用ListAllMyBuckets()实际上被当前策略所拒绝。
解决方案
正如评论4中所概述的,您必须添加一个额外的策略片段,以相应地满足您的s3fs版本的这一要求:
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
}
]或者,您可以在应用了s3fs中提供的修补程序之后,从源代码构建评论9版本1.61,该修补程序应该解决了这个问题(不过,我还没有亲自测试该修补程序)。显然,以后的版本也可能包含一个修复程序,请参阅评论11 ff。
祝好运!
考虑到预期的功能(即将桶挂载为本地文件系统读/写),s3fs可能还需要访问桶本身,而不仅仅是其中包含的对象,这些对象是单独处理的--尝试用以下方法替换Resource语句:
"Resource": [
"arn:aws:s3:::super_bucket",
"arn:aws:s3:::super_bucket/*",
]第一个资源以桶为目标,而后者以其中包含的对象为目标。
发布于 2021-01-19 05:36:22
我能够通过对桶本身指定ListBucket权限和对桶内容指定Put/Get/DeleteObject权限来实现这一点。我是通过这个回购中的shell脚本来跟踪它的,该脚本试图很好地打包它。这是一项工作政策:
{
"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尝试中,我在日志中看到了这一点。它是该调试命令的调试输出:
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]https://stackoverflow.com/questions/9065543
复制相似问题