【发布时间】: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