0

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

确定每个用户的 S3 访问范围的一种常用方法是在策略中分配一个前缀来表示用户。

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

有没有一种方法可以构建某种模板来使用 IdentityId 构建前缀,或者我必须构建一个服务器并将其放在中间以确保安全?

4

1 回答 1

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}/"}}
      }
   ]
}
于 2014-11-11T21:52:35.740 回答