amazon-s3 - Amazon cognito 身份 ID(子)+ S3 存储桶名称
问题描述
我目前正在开发一个 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 名称不能包含“:”特殊字符...
是否有任何解决方法可以根据每个 cognito Identity ID 动态命名我的 s3 存储桶?
期待任何提示/建议:)
解决方案
正如@Rasikh 在他的评论中提到的那样,每个账户的 S3 存储桶数量是有限制的。默认情况下为 100,但您可以通过向 AWS 提交服务限制请求将其增加到最多 1,000。但是,该解决方案不能扩展到任何数量的用户。
sub
一种更常见的模式是只创建一个 s3 存储桶,并且仅授予每个经过身份验证的用户根据其认知身份的属性访问特定前缀(路径或文件夹)的权限。
以下策略(取自访问策略示例的示例 2)提供 cognito Web 身份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
每次都不同。
推荐阅读
- git - Git:总结子回购
- php - fopen 不允许创建文件名的变量
- c# - 为什么 ASP.NET 过滤器属性内部有逻辑?
- java - Java 服务器使用线程错误 RequestProcessor not found
- azure - 在以 Cosmos 为源的 Azure 数据工厂中获取时间戳的最后一个值
- javascript - 带有箭头和按钮的自动幻灯片
- python - 函数内部的 Python readline() 跳过文件中的第二行
- sql - 插入 SQL Server 中的外键列表
- r - r 中的 for 循环以创建矩阵
- c++ - c ++,在struct中找不到用户定义的文字运算符