s3fs:AWS消息:访问被拒绝Ubuntu 11.10
我安装了这里描述的s3fs 然后在中创建用户bucket\u user 然后将他的accessKeyId:secretAccessKey放入/etc/passwd-s3fs中 它们是S3,我创建了一个bucket super_bucket 并制定政策:s3fs:AWS消息:访问被拒绝Ubuntu 11.10,ubuntu,amazon-s3,s3fs,Ubuntu,Amazon S3,S3fs,我安装了这里描述的s3fs 然后在中创建用户bucket\u user 然后将他的accessKeyId:secretAccessKey放入/etc/passwd-s3fs中 它们是S3,我创建了一个bucket super_bucket 并制定政策: { "Version": "2008-10-17", "Statement": [ { "Sid": &quo
{
"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-fuse):2.8.4
系统信息(uname-a):Linux Ubuntu-1110-oneiric-64-minimal 3.0.0-14-server#23 Ubuntu SMP周一11月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):空
所以我从头开始
在服务器上
nano~/.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超级桶/mnt/s3/
再接
s3fs:AWS消息:访问被拒绝更新 分析 显然,在您使用的最新稳定版本1.61之前(包括该版本)存在IAM支持方面的问题,请查看详细信息,具体如下: 显然有人打电话给[] 这是确定请求的bucket之前是否存在所需的 正在尝试安装 现在,ListAllMyBucket()是一个而不是一个或,它们是
资源
语句当前唯一的目标实体,因此使用ListAllMyBucket()实际上被当前策略拒绝
解决方案
如中所述,您必须添加一个额外的策略片段,以满足您的s3fs版本相应的此要求:
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
}
]
或者,您可以在应用中提供的补丁后从源代码构建s3fs版本1.61,这可能解决了这个问题(不过我自己还没有测试过补丁)。很明显,更高版本可能也会包含对此的修复,请参阅
祝你好运
考虑到预期的功能(即将bucket装载为本地文件系统读/写),可能还需要访问bucket本身,而不仅仅是其中包含的对象,这些对象是单独处理的-请尝试用以下语句替换
资源
语句:
"Resource": [
"arn:aws:s3:::super_bucket",
"arn:aws:s3:::super_bucket/*",
]
第一个资源以bucket为目标,而后者以bucket中包含的对象为目标。没有人说我需要在AWS IAM中设置用户策略我可以通过指定bucket本身的
Listbuck
权限和bucket内容的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/*"
]
}
]
}
在以这种方式定义它之前,我只对bucket拥有一系列权限,而不是它的内容。虽然我能够登录到我的FTP实例,但当我尝试put test.txt
时,我得到了一条553无法创建文件的消息。
消息
在失败的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]
如果我做这个`“Principal”:{“AWS”:“*”},`@fullpipe-yo,排除
Principal
,这样做确实是个好主意。你可能已经意识到了这一点?如果没有,您可能想签出,特别是关于${HOME}/.passwd-s3fs
上文件系统权限的明显要求。也许您有一些我可以尝试的测试桶mount@fullpipe:请参阅我的更新答案,以进一步分析您的问题以及由此产生的可能解决方案。