Вы должны изменить свое представление, каждый раз, когда вы хотите поделиться файлом с одним из ваших пользователей, вы должны проверить свою базу данных на предмет их разрешений (папки, к которым у них есть доступ), и если логические вещи на вашей стороне верны, сгенерируйте предопределенноеURL для доступа к этому объекту.
Как работает предопределенный 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/