我得到:
在调用ListObjects操作时发生错误(AccessDenied): AccessDenied
当我试图从S3存储桶中获取文件夹时。
使用该命令:
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
桶的IAM权限如下所示:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
我需要改变什么才能成功复制和ls ?
我有这个问题
我的要求,我想让用户写入特定的路径
{
"Sid": "raspiiotallowspecificBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<bucketname>/scripts",
"arn:aws:s3:::<bucketname>/scripts/*"
]
},
这个改变解决了问题
{
"Sid": "raspiiotallowspecificBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<bucketname>",
"arn:aws:s3:::<bucketname>/*"
]
},
我添加了一个与公认答案方向相同的答案,但有小的(重要的)差异,并添加了更多的细节。
考虑下面的配置:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
该策略授予编程式写-删除访问权,并分为两部分:
ListBucket操作提供了桶级别的权限,而其他PutObject/DeleteObject操作需要桶内对象的权限。
第一个Resource元素为ListBucket操作指定arn:aws:s3:::< bucket - name >,以便应用程序可以列出桶中的所有对象。
第二个Resource元素为PutObject指定arn:aws:s3:::< bucket - name >/*和DeletObject操作,以便应用程序可以写入或删除桶中的任何对象。
从安全角度考虑,为了指定桶级和对象级细粒度权限,将它们分离为两个不同的“arn”非常重要。
注意,如果我只在第二个块中指定GetObject,那么在编程访问的情况下,我将收到类似这样的错误:
Upload failed: <file-name> to <bucket-name>:<path-in-bucket>调用PutObject操作时发生错误(AccessDenied): AccessDenied。
您已经授予了对S3桶内的对象执行命令的权限,但没有授予对桶本身执行任何操作的权限。
稍微修改一下你的策略会是这样的:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname",
"arn:aws:s3:::bucketname/*"
]
}
]
}
然而,这可能会给予超出所需的许可。遵循AWS IAM授予最小特权的最佳实践将看起来像这样:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucketname"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
]
}
我也面临着同样的问题。我刚刚添加了凭据配置:
aws_access_key_id = your_aws_access_key_id
aws_secret_access_key = your_aws_secret_access_key
进入“~ /。Aws /凭据”+重启终端默认配置文件。
在多配置文件的情况下——profile arg需要添加:
aws s3 sync ./localDir s3://bucketName --profile=${PROFILE_NAME}
PROFILE_NAME:
.bash_profile ( or .bashrc) -> export PROFILE_NAME="yourProfileName"
关于如何配置凭证和多配置文件的更多信息可以在这里找到