Настройка групп на чтение, на запись в Amazon S3

Описание моего опыта работы с Amazon S3. Создание групп “на чтение”, “на запись”.

Предыстория

В конце 2013 года я принял решение уйти с Dropbox, заканичивалась акция от Samsung Galaxy S3, по которой получил 50 Гб лишних. Решил перейти на Amazon S3. Создал новую учетную запись, создал новую корзину, закинул туда бакапы с рабочего компьютера, домашнего компьютера, архив изображений различных лет, Dropbox. Позже в 2014-2015 годах туда добавил сканы книг на казахском языке. Ежемесячный счет выходил в районе 10 долларов США. Тогда было не напряжно. В данный момент, я пошел дальше и перевел свои бакапы на Amazon Glacier, последний счет был в районе 6 долларов США. Меня все устраивает.

Страшные истории

В интернете полно историй о людях, которые использовали в своих проектах главную, основную учетную запись, затем становились жертвой хакеров. Хакеры запускали дюжины дорогих серверов и вычисляли биткоин. Затем, пользователи разбирались с Amazon по поводу счетов.

Для решения этой проблемы есть инструмент Amazon IAM. Суть в кратце - создать ограниченные учетные записи для определенных целей. Например, для запуска EC2, для записи в корзину Amazon S3 и так далее. Меня Amazon пару раз предупредил, что не хорошо использовать основные учетные записи для записи бакапов в Amazon S3 и предложил почитать о Amazon IAM. Что я и сделал. Создал учетку для Amazon S3. Но была проблема - с этой учеткой можно было делать все в моих корзинах. Нужно было найти другое решение. Я нашел два решения - первое - мое, второе - от Amazon.

Пример №1 - отдельные корзины, отдельные пользователи

Мое решение:

  • Amazon S3 - Создаем корзину для каждого проекта;
  • Amazon IAM - Создаем группу “на чтение” и группу “на запись” для каждой корзины;
  • Amazon IAM - Группе “на чтение” прикрепляем inline-политику;
  • Amazon IAM - Группе “на запись” прикрепляем inline-политику;
  • Amazon IAM - Создаем пользователей, прикрепляем к различным группам;
  • Пользователи имеют ограниченный доступ к корзинам.

Inline-политика на чтение


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GetAccessToBucket",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::backup.test"
        },
        {
            "Sid": "ListAllBuckets",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "ReadOnlyAccessToBuckets",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::backup.test/*"
        }
    ]
}

Inline-политика на чтение-запись

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GetAccessToBucket",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::backup.test"
        },
        {
            "Sid": "ReadWriteAccessToBuckets",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::backup.test/*"
        },
        {
            "Sid": "ListAllBuckets",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Пример №2 - одна корзина, отдельные пользователи

Данная статья описывает как разграничить доступ различных пользователей внутри одной корзины. Чтобы было также как в SAMBE, при включенной опции homes, где у каждого пользователя будет своя папка внутри шары, куда не имеют доступ другие пользователи.

comments powered by Disqus