我得到:
在调用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 ?
如果需要复制所有s3桶对象,请使用“aws s3 cp s3://bucket-name/data/all-data/”命令。正如你提到的,这里有一个安全且最小的策略来做到这一点:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name"
],
"Condition": {
"StringLike": {
"s3:prefix": "data/all-data/*"
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucket-name/data/all-data/*"
]
}
]
}
此策略中的第一个语句允许列出特定桶的子目录中的对象。该资源需要是S3存储桶的arn,为了将列表限制为该存储桶中的子目录,您可以编辑“S3:prefix”值。
此策略中的第二条语句允许在特定子目录的桶中获取对象。这意味着“s3://bucket-name/data/all-data/”路径中的任何内容都可以复制。请注意,这不允许你从父路径复制,如“s3://bucket-name/data/”。
此解决方案专门用于限制AWS CLI命令的使用;如果您需要通过AWS控制台或API限制S3访问,则需要更多策略。我建议大家去https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/看看。
类似的问题可以在这里找到,这让我想到了我给出的解决方案。
https://github.com/aws/aws-cli/issues/2408
希望这能有所帮助!
我也有同样的问题。我必须提供正确的资源和行动,资源是你的桶的arn和行动在你想要的权限。另外,请确保您有正确的用户arn。以下是我的解决方案。
{
"Version": "2012-10-17",
"Id": "Policy1546414123454",
"Statement": [
{
"Sid": "Stmt1546414471931",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789101:root"
},
"Action": ["s3:ListBucket", "s3:ListBucketVersions"],
"Resource": "arn:aws:s3:::bucket-name"
}
]
}
您已经授予了对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/*"
]
}
]
}