ruby-on-rails – 为Amazon S3编写IAM策略和CORS配置
我对这一切都很陌生但是能够在我的Rails应用程序中使用头像/图像上传器.用户可以将新的头像上传到我的S3存储桶,并且在web应用程序中显示头像.
为此,我不得不向用户授予“AmazonS3FullAccess”政策.这看起来有点太多了,因为来自应用程序的用户只需要写入(上传他的头像)并阅读(在网页上显示头像)权限. 您是否同意编写自定义策略而不是使用AmazonS3FullAccess更好? { "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:PutObject","s3:PutObjectAcl","s3:DeleteObject" ],"Effect": "Allow","Resource": [ "arn:aws:s3:::mybucket/*","arn:aws:s3:::mybucket" ] } ] } 此策略应附加到适当的实体(“附加实体选项卡”),该实体可以是专用用户.如果您需要API / Access密钥,请前往该用户的“Security Credentials”选项卡并生成一些.这使您可以更好地控制使用该策略的人员. 您还可以编辑此策略以通过在评论中指定@therealprashant建议的“Principal”:“*”来允许匿名访问,有关更多信息,请参阅the docs. 但是您还需要设置CORS配置. <?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>http://*.example.com</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>*</AllowedHeader> </CORSRule> <CORSRule> <AllowedOrigin>http://example.com</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration> 根据需要添加尽可能多的CORSRule,特别是如果您还需要https. 希望有所帮助. 编辑 这是我现在实际使用的修改版本. { "Version": "2012-10-17","Statement": [ { "Effect": "Allow","Action": [ "s3:AbortMultipartUpload","s3:ListBucket","s3:DeleteObject","s3:GetObjectVersion" ],"arn:aws:s3:::mybucket" ] } ] } 注意:在附加到IAM用户,组或角色的IAM策略中,可以省略“principal”(就像我在这里所做的那样).在授权期间,“principal”被评估为策略所附加的实体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |