我正在使用 PHP 对象上传到 S3。我想只接受 PDF 文件并拒绝其他扩展名的文件。
因此我写了这个存储桶策略:
{
"Version": "2012-10-17",
"Id": "Policy1464968545158",
"Statement": [
{
"Sid": "Stmt1464968483619",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::MYBUCKET/*.pdf"
}
]
}
但它不起作用,我的存储桶仍然接受具有任何扩展名的文件。
我做错了什么 ?
谢谢
答案1
您的策略允许在匹配的文件上使用 putObject *.pdf
。但是,它不会对 putObject 施加任何限制。如果您通过其他方式获得该权限,您仍然可以上传其他文件。例如,AWS 托管策略arn:aws:iam::aws:policy/AmazonS3FullAccess
当前如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
如果您将其附加到您的 AWS IAM 用户或 IAM 角色,您将能够将所有对象放入具有该策略的存储桶中。
元素NotResource
可能在这里有用,请参阅这里一个有效的政策可能看起来像这样:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "s3:putObject",
"NotResource": [
"arn:aws:s3:::MYBUCKET/*.pdf"
]
}
}
如果不满足条件,则将拒绝任何人的 putObjects *.pdf
。