2017-01-22 1 views
0

Возможно ли динамическое создание ключей доступа/секретности для каждого пользователя в моей системе, что позволит им читать/записывать/записывать содержимое в ведро с помощью конкретный префикс.S3 - предоставить каждому пользователю доступ/секретные ключи для каталога данных пользователя

например: мое ведро является пользователемDataBucket. пользователь с идентификатором 77 авторизован Я хотел бы послать его на доступ клиента/секрет, чтобы он мог работать с этим каталогом:.

s3://userDataBucket/users/77/ 

он должен работать только с этим каталогом и не имеет доступа к какому-либо другой каталог.

такое возможно?

+0

Я думаю, что вам нужно, это IAM ролей и политик ковшей для каждого сегмента. Вы можете сделать политику ведра очень строгой, чтобы там, где роль и пользователь лишены, даже если у них есть полный «s3:« Не предоставляйте доступ/секрет кому-либо, роли и политики IAM достаточно. См. Это [статья] (https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/) – zer00ne

+0

Проходят ли ваши пользователи читать/записывать в этот ведро S3 напрямую с помощью клиентов AWS SDK или S3? Или они собираются писать в это пространство имен s3 через ваше приложение? –

+0

@DaveMaple непосредственно через клиентские SDK (js, android, ios) –

ответ

0

примечание: вы должны просмотреть 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()

+0

может ли эта политика создаваться динамически для каждого пользователя? –

+0

@MosheShaham: по запросу я добавил несколько примеров из Java SDK для создания политики и привязки ее к пользователю или группе. Те же методы доступны и на многих языках SDK. –