примечание: вы должны просмотреть iam limits on users and policies. Существуют ограничения на масштабирование с конечными пользователями/политиками, например, вы можете иметь только 5000 пользователей IAM, 250 ролей и 100 групп. Рассмотрите возможность использования temporary credentials, если вам требуется масштабируемое решение.
Вот политика IAM, позволяющая получить доступ к каталогу /users/${username}
в ведре userDataBucket
. Политика использует переменную, чтобы любой пользователь был аутентифицирован, имел бы доступ к каталогу, соответствующему их имени пользователя. Вы можете применить это к ведро и использовать его в качестве глобальной стратегии, если в плане должны использоваться пользователи IAM.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowListingWithinUserDirectory",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::userDataBucket"],
"Condition":{"StringLike":{"s3:prefix":["users/${aws:username}/*"]}}
},
{
"Sid": "AllowAllActionsWithinUserDirectory",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::userDataBucket/users/${aws:username}/*"]
}
]
}
Если вы хотите явным образом идентифицировать каждый пользователь по автоинкрементному ид явной политика будет выглядеть следующим образом:
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowListingWithinUserDirectory",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::userDataBucket"],
"Condition":{"StringLike":{"s3:prefix":["users/77/*"]}}
},
{
"Sid": "AllowAllActionsWithinUserDirectory",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::userDataBucket/users/77/*"]
}
]
}
В SDKs AWS предлагает методы для автоматизации создания программных документов и возможность прикреплять их к пользователям и группам. Некоторые методы, например, из Java SDK:
AmazonIdentityManagementClient.createPolicy() AmazonIdentityManagementClient.attachUserPolicy() AmazonIdentityManagementClient.attachGroupPolicy()
Я думаю, что вам нужно, это IAM ролей и политик ковшей для каждого сегмента. Вы можете сделать политику ведра очень строгой, чтобы там, где роль и пользователь лишены, даже если у них есть полный «s3:« Не предоставляйте доступ/секрет кому-либо, роли и политики IAM достаточно. См. Это [статья] (https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/) – zer00ne
Проходят ли ваши пользователи читать/записывать в этот ведро S3 напрямую с помощью клиентов AWS SDK или S3? Или они собираются писать в это пространство имен s3 через ваше приложение? –
@DaveMaple непосредственно через клиентские SDK (js, android, ios) –