AWS генерирует динамические учетные данные для доступа на уровне папок S3? - PullRequest
0 голосов
/ 07 октября 2018

Я новичок в AWS и все еще выясняю, как это сделать.

Часть моего веб-приложения использует AWS S3 для хранения файлов, но я хочу, чтобы каждый пользователь имел доступ только к определенным папкам(для CRUD) в ведре.Бэкэнд-сервер будет отслеживать, к каким папкам сможет получить доступ пользователь.

Я знаю, что можно определить политики, которые разрешают доступ к определенным папкам (путем сопоставления префикса объектов), но могу ли я генерировать эти политики динамическии получить учетные данные с этими политиками (вероятно, с Cognito?).Чтобы эти учетные данные могли быть переданы на клиентскую сторону для обеспечения доступа к папкам S3.

Мне интересно, возможно ли это сделать и какие службы требуются для этого.

1 Ответ

0 голосов
/ 07 октября 2018

Вы должны изменить свое представление, каждый раз, когда вы хотите поделиться файлом с одним из ваших пользователей, вы должны проверить свою базу данных на предмет их разрешений (папки, к которым у них есть доступ), и если логические вещи на вашей стороне верны, сгенерируйте предопределенноеURL для доступа к этому объекту.

enter image description here

Как работает предопределенный URL.

При создании предварительно назначенногоURL-адрес для доступа к объекту, вы также можете установить ограничение по времени, это означает, что по истечении этого времени URL-адрес не работает и срок его действия истек.

Для получения дополнительной информации о назначенном URL-адресе прочитайте следующие документы на веб-сервисах Amazonвеб-сайт:

Создание URL-адреса предварительно подписанного объекта с помощью AWS SDK для Java

Создание URL-адреса предварительно подписанного объекта с использованием AWS SDK для .NET

Кроме того, если вы хотите создать пользователей и назначить правильную политику доступа к ним в их папке, вы можете выполнить следующие инструкции:

Вы можете использовать IAM API для создания пользователя длякаждого из ваших пользователей, и приложите правильную политику для каждого из них.Например, для создания нового пользователя вы должны использовать следующий API

/* The following create-user command creates an IAM user named Bob in the current account. */

 var params = {
  UserName: "Bob"
 };
 iam.createUser(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
   /*
   data = {
    User: {
     Arn: "arn:aws:iam::123456789012:user/Bob", 
     CreateDate: <Date Representation>, 
     Path: "/", 
     UserId: "AKIAIOSFODNN7EXAMPLE", 
     UserName: "Bob"
    }
   }
   */
 });

. Для получения дополнительной информации о API создания пользователя прочитайте следующее

https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html

После создания пользователя вы должны создать политику для каждого из них с помощью API CreatePolicy.

var params = {
  PolicyDocument: 'STRING_VALUE', /* required */
  PolicyName: 'STRING_VALUE', /* required */
  Description: 'STRING_VALUE',
  Path: 'STRING_VALUE'
};
iam.createPolicy(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Для получения дополнительной информации о политике создания прочтите следующий документ:

https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html

И, наконец, вы должны назначить политику, которую вы создали ранее, каждому пользователю с помощью API AttachUserPolicy.

/* The following command attaches the AWS managed policy named AdministratorAccess to the IAM user named Alice. */

     var params = {
      PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", 
      UserName: "Alice"
     };
     iam.attachUserPolicy(params, function(err, data) {
       if (err) console.log(err, err.stack); // an error occurred
       else     console.log(data);           // successful response
     });

Для получения дополнительной информации об API AttachUserPolicy прочтите следующую документацию:

https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachUserPolicy.html

Последняя часть о том, какую политику вы должны создать и назначить каждому из них;мы используем следующую политику для перечисления объектов в каждой папке:

{
  "Sid": "AllowListingOfUserFolder",
  "Action": ["s3:ListBucket"],
  "Effect": "Allow",
  "Resource": ["arn:aws:s3:::my-company"],
  "Condition":{"StringLike":{"s3:prefix":["home/David/*"]}}
}

и следующую политику для действий в каждой папке:

{
  "Sid": "AllowAllS3ActionsInUserFolder",
  "Effect": "Allow",
  "Action": ["s3:*"],
  "Resource": ["arn:aws:s3:::my-company/home/David/*"]
}

Для получения более подробной информации об этих политиках прочитайте следующеестатья Джим Шарф :

https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

...