【发布时间】:2017-09-23 19:40:40
【问题描述】:
我正在评估在平台中使用 Cognito 开发人员身份验证身份和 S3 存储的选项。本质上,我想做的是为每个客户创建一个单独的 S3 存储桶和 Cognito 身份。此时,我们不需要为每个用户提供单独的 Cognito 身份,我们只使用身份来允许访问 S3 存储。在这种情况下,我们将需要支持数百个客户(因此需要数百个具有关联 Cognito 身份的存储桶)。
我发现了几个如何使用单个 S3 存储桶中的专用文件夹来执行此操作的示例(请参阅 Example 1 和 Example 2)。在我们的案例中,我不认为针对所有客户的单个存储桶将是可行的解决方案,原因有几个(其中一个原因是 S3 API 速率限制显然与唯一存储桶相关联)。
我已尝试在客户存储桶上创建访问策略以仅允许访问特定 Cognito 身份,即
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::CUSTOMER-BUCKET/*"
],
"Principal": {
"AWS": "my IAM role for Cognito"
},
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:sub": [
"us-east-1:customer's cognito identity"
]
}
}
}
]
}
但 S3 无法识别 cognito-identity.amazonaws.com:sub 条件。
如果我将类似的策略附加到用于 Cognito 身份池的 IAM 角色,即
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::CUSTOMER-BUCKET/*"
],
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:sub": [
"us-east-1:customer's cognito identity"
]
}
}
}
]
}
这似乎可行,但显然我必须为每个身份和存储桶组合添加一个策略,这会遇到可以添加到单个角色(总共 10240 个字符)的内联策略大小的限制。
在这一点上,我正在摸不着头脑,试图想出一种可行的方法。任何建议将不胜感激。
【问题讨论】: