我是否可以创建用户范围的S3策略以与未经身份验证的AWS Cognito一起使用

时间:2014-10-28 21:59:23

标签: amazon-web-services amazon-s3 amazon-cognito

AWS文档告诉您如何使用Cognito API GetID和GetOpenIdToken以及STS API AssumeRoleWithWebIdentity获取STS令牌。在此过程中,AWS确实为您提供了IdentityId。

对每个用户进行S3访问的范围的常用方法是在表示用户的策略中分配前缀。

现在,AssumeRoleWithWebIdentity API将允许您附加用户范围的策略 - 但在这种情况下,我们希望从移动客户端调用此API - 由于安全问题而无法使用。

有没有办法可以构建某种使用IdentityId构建前缀的模板,还是我必须构建一个服务器并将其置于中间以使其安全?

1 个答案:

答案 0 :(得分:0)

虽然AssumeRoleWithWebIdentity确实采用了政策,但这是一个范围缩小政策,位于您假设的角色的现有政策之上,并且可选。此策略无法扩展该角色的权限,仅限制。如果您未提供其他范围缩减策略,则将使用该角色的基本策略。

您可以使用以下访问政策来确保您的用户只能根据其Cognito ID上传(并列出)特定前缀:

{
  "Version": "2012-10-17",
  "Statement": [
      {
        "Effect":"Allow",
        "Action":["s3:PutObject","s3:GetObject","s3:DeleteObject"],
        "Resource":"arn:aws:s3:::BUCKET_NAME/${cognito-identity.amazonaws.com:sub}/*"
      },
      {
        "Effect":"Allow",
        "Action":"s3:ListBucket",
        "Resource":"arn:aws:s3:::BUCKET_NAME",
        "Condition":{"StringLike":{"s3:prefix":"${cognito-identity.amazonaws.com:sub}/"}}
      }
   ]
}