#java #amazon-web-services #amazon-s3 #aws-sdk
Вопрос:
Итак, недавно я создал новую учетную запись AWS для использования хранилища S3. В настоящее время у меня есть только моя учетная запись пользователя root. Я использую java aws-sdk для загрузки файлов. Объект S3Client настраивается с помощью секретного ключа моей учетной записи root и ключа доступа. Кроме того, просто используйте встроенный в aws-sdk метод putObject() для загрузки. Здесь нет ничего необычного.
Теперь я попытался прикрепить политику к своему ведру, чтобы ограничить функцию загрузки и выгрузки в ведре. Во-первых, я предоставил все разрешения S3object своему ведру и мог успешно загружать код. Затем я попытался включить в свою политику только GetObject, putObject, getObjectAcl, putObjectAcl и снова смог успешно загрузить.
После этого я удалил putObject и putObjectAcl, у которых были только разрешения GetObject, но, на удивление, я все еще мог загружать файлы, используя свой код. Я считаю, что удаление разрешений на загрузку даст мне 403 Отказа в доступе. Это потому, что я использую свой ключ доступа корневого пользователя и секретный ключ, который дает некоторые дополнительные права? Или есть что-то фундаментальное, чего мне здесь не хватает?
Моя политика без разрешения на загрузку:
{
"Id": "PolicyXXXXXXX",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StmtXXXXXX",
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket-name/*",
"Principal": {
"AWS": [
"arn:aws:iam::11111111111:root"
]
}
}
]
}
Комментарии:
1. Пользователь root может делать все, что угодно, не ограниченное политиками. Используете ли вы пользователя root или пользователя IAM при выполнении этих экспериментов?
2. Я использую пользователя root для этих операций. Поэтому я считаю, что причина здесь в этом.
3. Если вы единственный человек, использующий учетную запись AWS, то использование учетных данных root подходит. Но, как только у вас будет несколько пользователей, лучше избегать использования учетной записи root. Вместо этого создайте себе пользователя IAM с правами администратора.
Ответ №1:
Пользователь, чей ключ доступа и секретный ключ вы используете, должен был получить разрешения putObject.
Если к запросу применяются политики на основе ресурсов и политики на основе идентификации, AWS проверяет все политики по крайней мере на одну Allow
. Пожалуйста, ознакомьтесь здесь с логикой оценки политики.
Если действие разрешено политикой на основе идентификации, политикой на основе ресурсов или и тем, и другим, AWS разрешает это действие.
Комментарии:
1. Итак, поскольку я использую ключи пользователя root для этих операций, я полагаю, что пользователь root имеет неограниченные права доступа, и, следовательно, я могу загружать?
2. Да, ты все понял. Кроме того, избегайте использования учетных данных пользователя root. Вместо этого создайте пользователя с правами администратора и используйте учетные данные администратора.