[Эксперимент AWS] 6 — S3 Deep Dive: Точка доступа

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

1. Что такое точка доступа?

Согласно официальному документу AWS, точка доступа — это ….

«По мере роста набора приложений, политика ведра становится более сложной, требует много времени для управления и нуждается в аудите, чтобы убедиться, что изменения не окажут неожиданного влияния на другое приложение» (Amazon Web Services).

«Amazon S3 Access Points, функция S3, упрощает доступ к данным для любой службы AWS или клиентского приложения, хранящего данные в S3. С помощью S3 Access Points клиенты могут создавать уникальные политики контроля доступа для каждой точки доступа, чтобы легко контролировать доступ к общим наборам данных.»(Amazon Web Services)

Точки доступа полезны, когда вы хотите организовать доступ на уровне многих пользователей. Если вы в основном имеете дело с доступом на уровне ведра, а ограничения довольно незначительны, то лучшим вариантом будет использование политики Bucket Policy. Выбор полностью зависит от разработчиков. Я лично считаю, что небольшим проектам не нужно управлять доступностью S3 с помощью точки доступа.

Но все же для будущих больших проектов знание того, как работать с Access Point, очень важно на случай, если ваша Bucket Policy станет очень большой, поскольку Access Point Policy позволяет разбить политики на части и упорядочить их.

2. Как использовать Access Point?

Схема работы проста. Во-первых, предоставьте пользователям IAM ограниченные разрешения S3 с помощью специальных тегов, таких как s3:DataAccessPointArn, s3:DataAccessPointAccount и s3:AccessPointNetworkOrigin Во-вторых, настройте политику Bucket и политику Access Point так, чтобы предоставлять пользователям разрешения S3 только через Access Point.

3. Простой эксперимент с политикой IAM

Схема проведения эксперимента

  1. Предоставьте пользователю IAM ограниченное разрешение s3.
  2. Создайте точку доступа для ведра и сделайте его доступным для пользователя IAM.

Ожидаемое поведение

  1. Когда пользователь IAM получит прямой доступ к ведру и выполнит s3:GetObject, вместо объекта он получит ошибку Access Denied.

  2. Когда пользователь IAM получит доступ к ведру через созданную точку доступа и выполнит s3:GetObject, пользователь получит объект.

Создайте IAM-пользователя с полными правами s3, кроме s3:GetObject и s3:PutObject. Запретите эти действия, если запросы НЕ приходят из точки доступа demo-access-point. Я использовал свойство s3:DataAccessPointArn.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::*",
                "arn:aws:s3:*:<ACCOUNT_ID>:accesspoint/demo-access-point",
                "arn:aws:s3:*:<ACCOUNT_ID>:accesspoint/demo-access-point/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "s3:DataAccessPointArn": "arn:aws:s3:*:<ACCOUNT_ID>:accesspoint/*"
                }
            }
        }
    ]
}
Вход в полноэкранный режим Выход из полноэкранного режима

Мы не создали точку доступа, поэтому давайте перейдем к ее созданию.

Создайте ведро с уникальным именем. Я использовал demo-for-access-point-tutorial.

Загрузите любые файлы и создайте точку доступа с именем demo-access-point. Для политики точки доступа разрешите пользователю IAM выполнять s3:GetObject и s3:PutObject.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GetObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<ACCOUNT_ID>:user/DemoAccessPointUser"
            },
            "Action": ["s3:GetObject","s3:PutObject"],
            "Resource": "arn:aws:s3:<REGION><ACCOUNT_ID>:accesspoint/demo-access-point/object/*"
        }
    ]
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Поздравляем! Вы только что ограничили разрешение s3 GetObject и PutObject пользователя с помощью политики точки доступа и политики IAM!

Давайте проверим результаты

Случай #1: Попытка доступа к объекту через ведро



Пример №2: попытка доступа к объекту через точку доступа



4. Заключение

Точка доступа может быть полезна, когда есть много пользователей и групп IAM, которым нужно ограничить доступ к определенным ведрам, потому что политика ведра может быть слишком большой и в итоге ею трудно управлять.

Оцените статью
Procodings.ru
Добавить комментарий