为Amazon S3编写IAM策略和CORS配置

我对这一切都很陌生,但已经能够在我的Rails应用程序中使用头像/图像上传器。 用户可以将新的化身上传到我的S3桶,并且化身显示在Web应用程序中。

为此,我不得不向用户授予“AmazonS3FullAccess”政策。 这看起来有点太多了,因为来自应用程序的用户只需要写入(上传他的头像)并阅读(在网页上显示头像)权限。

您是否同意编写自定义策略而不是使用AmazonS3FullAccess更好? 如果是这样,我已经尝试了下面的政策代码(从这里采用),但这不起作用(尝试上传头像图像时出现403 Forbidden错误)。 有任何建议如何更正此代码?

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::mybucket"] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::mybucket/*"] } ] } 

我已经长出白发试图弄清楚正确的配置。 这是一个适合我的方法:

 { "Statement": [ { "Sid": "AllowPublicRead", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::mybucket/*", "arn:aws:s3:::mybucket" ] } ] } 

此策略应附加到适当的实体(“附加实体选项卡”),该实体可以是专用用户。 如果您需要API /访问密钥,请前往该用户的“安全凭证”选项卡并生成一些。 这使您可以更好地控制使用该策略的人员。

您还可以通过在评论中指定@therealprashant建议的“Principal”:“*”来编辑此策略以允许匿名访问,请参阅更多信息的文档 。

但是您还需要设置CORS配置。 打开S3控制台 ,单击您的存储桶,显示其属性(右侧面板)并单击权限,您将能够编辑配置。

    http://*.example.com GET POST PUT 3000 *   http://example.com GET POST PUT 3000 *   

根据需要添加尽可能多的CORSRule,特别是如果您还需要https。

希望会有所帮助。

编辑

这是我现在实际使用的修改版本。

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::mybucket/*", "arn:aws:s3:::mybucket" ] } ] } 

注意:在附加到IAM用户,组或角色的IAM策略中,可以省略“principal”(就像我在这里所做的那样)。 在授权期间,“principal”被评估为策略所附加的实体。