Мы скромный стартап, который добывает данные из всего Интернета и помещает их в корзину Amazon S3, чтобы поделиться с миром. На данный момент у нас есть 2 ТБ данных, и вскоре мы можем достичь отметки 20 ТБ .
Наши подписчики смогут загружать все данные из имеющегося у нас хранилища Amazon S3. Мы должны выбрать запрашивающая сторона платит за полосу пропускания, очевидно, если мы не хотим получить какие-то душераздирающие счета S3.
Предварительно подписанный URL-адрес недоступен, поскольку он не проверяет использование полосы пропускания в реальном времени , поэтому уязвим для злоупотреблений при загрузке.
После некоторого исследования этот , по-видимому, является способом предоставления различным учетным записям AWS необходимых разрешений для доступа к нашей корзине:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Permissions to foreign account 1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ForeignAccount-ID-1:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::ourbucket"
]
},
{
"Sid": "Permissions to foreign account 2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ForeignAccount-ID-2:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::ourbucket"
]
},
{
"Sid": "Permissions to foreign account 3",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ForeignAccount-ID-3:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::ourbucket"
]
},
......
]
}
Где ForeignAccount-ID-x
- идентификатор учетной записи, например, 2222-2222-2222.
Однако проблема в том, что у нас может быть десятки тысяч или даже больше подписчиков на это ведро.
Это правильный и эффективный способ добавить разрешения для доступа к этому сегменту?
Не создаст ли это проблемы с производительностью для этого сегмента, учитывая, что каждый запрос будет проходить через эту политику горного сегмента?
Есть ли лучшие решения для этой проблемы?