我正在开发一个应用程序,用于管理存储在S3中的已购买文件的访问。我按产品将文件组织在S3中,例如:
my-bucket
├── product-a
│ ├── file-1
│ ├── file-2
│ └── file-3
├── product-b
│ ├── file-1
│ ├── file-2
│ └── file-3
└── etc...
我还在使用Cognito来管理用户身份和认证。我想创建一个IAM角色,所有用户都将扮演这个角色,该角色将仅授予他们访问已购买产品文件的权限。应该如何正确实现?我已经阅读了Cognito的文档,但感觉自己还没有完全理解。
从这个示例中,我看到我可以为每个用户提供对其自己的存储桶中文件的访问权限,但那样我就必须将文件复制到每个用户的文件夹中,这似乎既低效又容易出错。
{
"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 同步数据中包含某个标志时,才能授予用户访问该文件夹的权限。
这种情况是否可行?或者我没有使用正确的工具?我认为这应该是一个常见的用例。