【问题标题】:Restrict S3 Object Access to Specific Cognito Users将 S3 对象访问限制为特定 Cognito 用户
【发布时间】:2017-12-22 16:07:30
【问题描述】:

我正在开发一个应用程序,该应用程序将管理对存储在 S3 中的已购买文件的访问。我在 S3 中有按产品组织的文件,例如:

my-bucket
  ├── product-a
  │     ├── file-1
  │     ├── file-2
  │     └── file-3
  ├── product-b
  │     ├── file-1
  │     ├── file-2
  │     └── file-3
  └── etc...

我还使用 Cognito 来管理用户身份和身份验证。我想创建一个所有用户都将承担的 IAM 角色,该角色将授予他们仅访问他们购买的产品文件的权限。这样做的正确方法是什么?我已经阅读了Cognito's documentation,我觉得我只是没有把这些点联系起来。

我从this 示例中看到,我可以为每个用户提供对存储桶中他们自己文件夹的访问权限,但是我必须将文件复制到每个用户的文件夹中,这似乎既低效又容易出错。

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

但我希望创建一个策略,当且仅当用户购买了该产品时才授予用户访问 product-a 文件夹的权限,例如使用该用户的 Cognito Sync 数据中包含的某些标志。

这可能吗?我只是没有使用正确的工具吗?我认为这一定是一个常见的用例。

【问题讨论】:

  • 您的用户群的身份提供商是什么,Cognito 用户池/Facebook/Google 其他?它有某些要求吗?
  • 我正在使用用户池。所以,是的,我得到了带有声明的令牌。这对我有帮助吗?
  • @sethro 你找到解决方案了吗 - 我正在尝试构建一个类似的系统。谢谢。
  • @NickAger,我没有。我最终采用的方法是,当用户请求访问服务器确定他们可以访问的文件时,让服务器生成临时预签名 URL。仍然不确定这不能用 Cognito 完成,但我放弃了。
  • @sethro 或其他任何人都乐于找到解决方案?

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


【解决方案1】:

在我的用例中,这是可能的,原因如下:

  1. 我将文件上传到 s3
  2. 我有一个监听 S3 事件的 lambda,它解释创建的这个文件并在 DynamoDB(我们的应用程序的数据库引擎)中创建一个条目。但是,此条目包含访问此文件的 url,它不是 s3 url。相反,它是一个 API 网关 URL,它代理请求并在其上具有自定义 lambda 授权器。然后,这个 lambda 授权者通过查看 cognito 令牌来验证用户访问权限,并让我为其他用户添加完全细粒度的访问权限,同时仍然让核心用户/所有者直接使用 S3 sdk 客户端并附加正确的 cognito Identity 角色来管理文件到存储桶权限。
  3. 然后用户在请求中使用 Authorization cognito 令牌头请求此图像,由 API 网关处理并返回相关响应。

【讨论】:

    【解决方案2】:

    可能的解决方案是 Aws 预签名 URL Read more here。这个想法是您请求一个临时 url,以便访问具有过期时间的特定 s3 对象。

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 2018-09-21
      • 1970-01-01
      • 2021-08-15
      • 2018-11-10
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多