2014-10-29 83 views
8

我在Amazon Cognito标识池下设置了未经认证的角色。我的目标是,我的移动应用程序的访客用户将能够将调试日志(小文本文件)上传到我的S3存储桶,以便解决问题。我注意到如果我不修改我的S3存储桶权限,我会从S3中获得“拒绝访问”。如果我添加允许“每个人”具有“上传/删除”权限,则文件上传成功。我担心的是有人能够将大文件上传到我的存储桶并导致安全问题。上面我的需求是什么建议配置?我是S3和Cognito的新手。未授权认证角色的Amazon S3存储桶权限用户

我正在使用适用于iOS的Amazon AWS SDK,但我想这个问题是平台中立的。

编辑: 我的原则如下:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "iam:GetUser", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListAllMyBuckets" 
     ], 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:CreateBucket", 
     "s3:DeleteBucket", 
     "s3:DeleteObject", 
     "s3:GetBucketLocation", 
     "s3:GetObject", 
     "s3:ListBucket", 
     "s3:PutObject" 
     ], 
     "Resource": ["arn:aws:s3:::import-to-ec2-*", "arn:aws:s3:::<my bucket name>/*"] 
    } 
    ] 
} 

回答

3

你并不需要修改S3存储权限,而是以您的身份池关联的IAM角色。请尝试以下操作:

  1. 访问IAM console
  2. 找到与您的身份池关联的角色。
  3. 安装类似于以下您的角色的政策: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::MYBUCKET/*"] } ] }
  4. 与你斗的名字
  5. 访问你的水桶从您的应用程序使用iOS SDK和Cognito

您可以在正常更换MYBUCKET想要进一步考虑限制权限,包括${cognito-identity.amazonaws.com:sub}来分区您的用户,但上述政策将帮助您入门。

+0

{ “版本”: “2012年10月17日”, “声明”: [ { “效果”: “允许”, “行动”: “IAM:的getUser”, “资源”: “*” },{ “效果”: “允许”, “操作”:[ “S3:ListAllMyBuckets” ], “资源”: “*” }, { “效果”: “允许”, “操作”: [ “S3:CreateBucket”, “S3:DeleteBucket”, “S3:DeleteObject的”, “S3:GetBucketLocation”, “S3:GetObject的”, “S3:ListBucket”, “S3:PutObject” ], “Resource”:[“arn:aws:s3 ::: import-to-ec2- *”,“arn:aws:s3 ::: /*”] } ] } – 2014-10-31 03:58:56

+0

以上是我的政策,但文件上传仍然失败。 – 2014-10-31 04:01:44

+0

如果您使用AWSCognitoCredentialsProvider,它将缓存使用的凭证。您可以强制刷新以确保您的凭据反映新政策。如果您仍然遇到问题,请包括代码以及您收到的特定错误,以便我们可以更好地帮助诊断问题。 – 2014-10-31 15:47:59

0

上面的答案在2015年不完整,您需要同时授权角色和S3中的存储桶策略以授权该角色写入存储桶。在两种情况下都使用s3:PutObject。控制台有这两种情况下的向导

+0

作为2017年的状态,我根本不需要改变桶策略。通过IAM角色设置S3权限就足够了。 – 2017-10-13 06:31:42

+0

@VolkerRose在Verizon破解后,AWS更改了他们的S3存储桶策略逻辑。您应该收到关于此的通知。你是对的。 – einarc 2017-10-18 01:10:33

1

正如@einarc说的(现在还不能评论),为了使它工作,我不得不编辑角色和桶策略。这是不够好,来进行测试:

桶政策:

{ 
    "Id": "Policy1500742753994", 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "Stmt1500742752148", 
     "Action": "s3:*", 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::admin1.user1", 
     "Principal": "*" 
    } 
    ] 
} 

通过身份验证的作用的政策:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::*" 
      ] 
     } 
    ] 
}