我有一个NAS,它支持文件备份到AWS S3。我在AWS控制台中的IAM下创建了一个用户,并且尝试生成一个策略,该策略只允许此用户访问具有读/写入权限的特定S3存储桶。以下是我生成的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1465916250000",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::atlas-nas-backups"
]
}
]
}
但是,当我通过对S3的所有操作进行策略模拟器运行此操作时,每个操作都会失败。我错过了这个用户无法将对象写入水桶的内容?我不希望此用户可以访问其他AWS资源,而不是将文件备份到特定存储桶外。
有带有存储桶权限的怪癖,您需要使用/*
通配符规范分别指定存储桶本身和其键。此外,即使对于写操作,也可能需要列表操作。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1465916250000",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::atlas-nas-backups",
"arn:aws:s3:::atlas-nas-backups/*"
]
}
]
}
我还添加了" S3:GetBucketLocation"one_answers" S3:ListBucket"动作。如前所述,即使您仅编写对象,该服务也可能需要列出该项目并获取存储桶的位置(区域)。您可能不需要最后两个,而只是想向您展示,以防万一。
备份的最小策略仅需要PutObject
和ListBucket
。
为什么listbucket?仅添加PutObject
AWS会抱怨它缺少ListObjects的许可。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::atlas-nas-backups/*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::atlas-nas-backups"
}
]
}