【问题标题】:Amazon cognito Identity ID (sub) + S3 bucket nameAmazon cognito 身份 ID(子)+ S3 存储桶名称
【发布时间】:2020-09-23 08:08:19
【问题描述】:

我目前正在开发一个 webApp,让经过身份验证的用户(通过 Cognito 用户池)处理他们自己的 s3 存储桶。这样,我想使用以下变量 ${cognito-identity.amazonaws.com:sub} 来动态命名我的 s3 存储桶。 这就是我对我的 s3 角色的期望,该角色与我的 Cognito 联合身份中的经过身份验证的用户相关联:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::${cognito-identity.amazonaws.com:sub}/*"
            ]
        }
    ]
}

${cognito-identity.amazonaws.com:sub} 的值看起来像“eu-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx”,但我知道 S3 名称不能包含“:”特殊字符...

是否有任何解决方法可以根据每个认知身份 ID 动态命名我的 s3 存储桶?

期待任何提示/建议:)

【问题讨论】:

  • 您是否知道您可以在您的账户中创建多少个 s3 存储桶?
  • 是的@RasikhMashhadi,我知道 s3 存储桶的限制,但想知道是否有任何解决方案。谢谢!

标签: amazon-s3 amazon-cognito


【解决方案1】:

正如@Rasikh 在他的评论中提到的那样,每个账户的 S3 存储桶数量是有限制的。默认情况下为 100,但您可以通过向 AWS 提交服务限制请求将其增加到最多 1,000。但是,该解决方案无法扩展到任意数量的用户。

一种更常见的模式是只创建一个 s3 存储桶,并且仅授予每个经过身份验证的用户根据其认知身份的 sub 属性访问特定前缀(路径或文件夹)的权限。

以下策略 (taken from Example 2 of the Access Policy Examples) 授予认知网络身份 s3:ListBucket 权限,但仅限于其特定前缀,以及获取和放置对象的能力,但同样仅限于其前缀内。

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

值得注意的是,这仅适用于经过身份验证的用户,因为未经身份验证的用户每次都会获得不同的认知身份,因此每次都会获得不同的sub

【讨论】:

  • 感谢您的反馈@lemming!将遵循该设计,只管理一个 s3 存储桶会比管理更多存储桶更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多