Политика S3 при использовании корневого ключа доступа и секретного ключа

#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. Вместо этого создайте пользователя с правами администратора и используйте учетные данные администратора.