我正在开发一个应用程序,用于管理对存储在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数据中包含的某个标志。
这可能吗?我只是没有使用正确的工具?我认为这必须是一个常见的用例。
答案 0 :(得分:0)
在我的用例中,由于以下原因,这是可能的: