sla*_*fer 7 amazon-s3 bucket amazon-web-services amazon-iam
我看到了aws s3 ls和aws s3api list-buckets的不同行为
这是第一个:
$ aws s3 ls s3://demo.for.customers
Bucket: demo.for.customers
Prefix:
LastWriteTime Length Name
------------- ------ ----
PRE 5CE4D191-FD14-4C85-8146-9FB8C29B7A7B/
PRE FFBC4675-F864-40E9-8AB8-BDF7A0437010/
Run Code Online (Sandbox Code Playgroud)
所以,我能够列出demo.for.customers中的对象
现在,当我使用s3api运行相同的东西时,我被拒绝访问:
$ aws s3api list-objects --bucket demo.for.customers
A client error (AccessDenied) occurred: Access Denied
Run Code Online (Sandbox Code Playgroud)
问题:为什么我通过s3api拒绝列出对象的访问权限.
我提出这个问题的原因是,如果我使用AWS S3 Ruby SDK,我会遇到同样的问题.
但是,当我使用aws s3 ls时,事情很好.
因此AWS S3 Ruby SDK和aws s3api表现出相同的行为.所以,我在这里只粘贴了aws s3api CLI问题.
顺便说一句,这是已应用于运行以上所有命令的用户的IAM策略:
{
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::"
]
},
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::demo.for.customers"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"FFBC4675-F864-40E9-8AB8-BDF7A0437010/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::demo.for.customers/FFBC4675-F864-40E9-8AB8-BDF7A0437010/"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是ruby代码产生完全相同的错误;
#!/usr/bin/ruby
require 'aws-sdk'
require 'awesome_print'
AWS.config( :access_key_id => 'whatever',
:secret_access_key => 'again whatever',
:region => 'us-west-2')
s3 = AWS.s3
buckets = s3.client.list_objects(:bucket_name => "demo.for.customers")
ap buckets
Run Code Online (Sandbox Code Playgroud)
输出是:
# ruby s3policies.rb
/var/lib/gems/1.9.1/gems/aws-sdk-1.14.1/lib/aws/core/client.rb:366:in `return_or_raise': Access Denied (AWS::S3::Errors::AccessDenied)
Run Code Online (Sandbox Code Playgroud)
根据您定义的角色,对列表对象的调用需要前缀和分隔符。
以下命令将适合您:
aws s3api list-objects --bucket demo.for.customers --prefix "" --delimiter "/"
Run Code Online (Sandbox Code Playgroud)
如果您删除 ListBucket 策略中的 Delimiter 条件,那么这将适合您:
aws s3api list-objects --bucket demo.for.customers --prefix ""
Run Code Online (Sandbox Code Playgroud)
如果您还删除了前缀条件,那么这对您有用:
aws s3api list-objects --bucket demo.for.customers
Run Code Online (Sandbox Code Playgroud)
测试上述内容的一个好方法是复制您的角色策略并逐步删除条件,直到其按预期运行。
归档时间: |
|
查看次数: |
6330 次 |
最近记录: |