Доступ к бакету другого пользователя

Доступ к бакету другого пользователя

Инструкция описывает пример, как предоставить одному пользователю доступ к бакету другого пользователя в S3-совместимом объектном хранилище внутри одного аккаунта (тенанта).

Важно: доступ через Панель управления

Если доступ нужен внутри панели управления, используйте встроенные механизмы:

  • Проекты
  • Роли пользователей

Чтобы пользователь видел или изменял бакеты:

  • его нужно добавить в проект владельца бакета
  • назначить соответствующую роль (редактирование или только просмотр)

Использование bucket policy требуется только если:

  • доступ нужен на уровне API / CLI
  • или между пользователями, не связанными через проект

Ограничения

  • Оба пользователя должны быть в одном тенанте
  • Политику может задать только владелец бакета
  • Используется Bucket Policy, не ACL

Исходные данные

Есть два пользователя:

  • User A — владелец бакета
  • User B — пользователь, которому нужен доступ

У каждого есть сгенерированные ранее в панели управления ключи доступа (создание ключей доступа):

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

Endpoint объектного хранилища:

https://storage.pro-data.tech (пример url в зоне доступности UZ-5)

🪪 Шаг 1. Определить tenant и user ID

Выполнить (для каждого пользователя отдельно):

aws --endpoint-url https://storage.pro-data.tech s3api list-buckets

В ответе:

"Owner": {
"DisplayName": "...",
"ID": "company$USR123456"
}

Расшифровка:

company$USR123456
│ │
│ └── user_id
└────────── tenant

✅ Проверка

Если tenant совпадает — можно продолжать.
Если нет — доступ выдать нельзя.


📦 Шаг 2. Проверить бакет и текущие права

ACL (от имени владельца):

  1. aws --endpoint-url https://storage.pro-data.tech s3api get-bucket-acl \
  2. --bucket <bucket-name>

Обычно:

  • только владелец имеет FULL_CONTROL
  • бакет приватный

Проверка доступа у User B:

  1. aws --endpoint-url https://storage.pro-data.tech s3api list-objects \
  2. --bucket <bucket-name>

Ожидаемо:

403 Forbidden

🔑 Шаг 3. Выдать доступ через Bucket Policy

Действие выполняет владелец бакета (User A)


🧠 Где взять корректный ARN пользователя

Для указания пользователя в policy нужен корректный ARN.

📍 Его можно получить в панели управления:

  • Настройки → Управление пользователями
  • выбрать пользователя
  • нажать иконку 

👉 Используйте именно этот ARN, чтобы избежать ошибок.


🟢 Вариант 1: Только чтение

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Sid": "AllowRead",
  6. "Effect": "Allow",
  7. "Principal": {
  8. "AWS": "arn:aws:iam::<tenant>:user/<user_id>"
  9. },
  10. "Action": [
  11. "s3:ListBucket",
  12. "s3:GetObject"
  13. ],
  14. "Resource": [
  15. "arn:aws:s3:::<bucket>",
  16. "arn:aws:s3:::<bucket>/*"
  17. ]
  18. }
  19. ]
  20. }

🟡 Вариант 2: Чтение + запись

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Sid": "AllowReadWrite",
  6. "Effect": "Allow",
  7. "Principal": {
  8. "AWS": "arn:aws:iam::<tenant>:user/<user_id>"
  9. },
  10. "Action": [
  11. "s3:ListBucket",
  12. "s3:GetObject",
  13. "s3:PutObject",
  14. "s3:DeleteObject"
  15. ],
  16. "Resource": [
  17. "arn:aws:s3:::<bucket>",
  18. "arn:aws:s3:::<bucket>/*"
  19. ]
  20. }
  21. ]
  22. }

📌 Применение policy

  1. aws --endpoint-url https://storage.pro-data.tech s3api put-bucket-policy \
  2. --bucket <bucket-name> \
  3. --policy '<JSON>'

📍 Формирование Resource

Обязательно указать оба:

arn:aws:s3:::bucket-name
arn:aws:s3:::bucket-name/*

🧪 Шаг 4. Проверка доступа

Проверка policy:

  1. aws --endpoint-url https://storage.pro-data.tech s3api get-bucket-policy \
  2. --bucket <bucket-name>

Проверка от User B:

  1. aws --endpoint-url https://storage.pro-data.tech s3api list-objects \
  2. --bucket <bucket-name>

Ожидаемо:

{
"Contents": [...]
}

❌ Шаг 5. Отзыв доступа

  1. aws --endpoint-url https://storage.pro-data.tech s3api delete-bucket-policy \
  2. --bucket <bucket-name>

🚨 Типичные ошибки

❌ Пользователи в разных tenant'ах

→ доступ не работает


❌ Неверный ARN

→ policy не применяется
👉 всегда лучше брать из панели


❌ Указан только один Resource

→ часть операций даёт 403


❌ Попытка использовать ACL

→ не подходит для межпользовательского доступа


🧾 Результат

После выполнения:

  • User B получает доступ к бакету User A
  • уровень доступа соответствует policy

⚡ Кратко

ДействиеКто выполняет
Узнать user ID         любой пользователь
Проверить ACL         владелец
Выдать доступ         владелец
Проверить доступ         пользователь B
Отозвать доступ         владелец

    • Related Articles

    • Установка AWS CLI и подключение к хранилищу

      Для подключения к объектному хранилищу через AWS CLI необходимо установить инструмент и задать параметры доступа, полученные в панели управления. Установка AWS CLI Linux: Откройте терминал и выполните команды: curl ...
    • Работа через панель управления

      При работе с объектным хранилищем через панель действуют все правила платформы: принадлежность бакета к проекту, роли пользователей в проекте, ограничения, связанные с распределением ресурсов. Доступ к бакетам и операциям с ними определяется ролью ...
    • Модель доступа к объектному хранилищу

      Работа с объектным хранилищем в Pro-Data Cloud может выполняться двумя способами: через панель управления или через S3-совместимый API (CLI или SDK). Работа через S3 API (CLI или SDK) Работа через панель управления
    • Установка S3CMD и подключение к хранилищу

      S3cmd — это CLI-инструмент для работы с сервисами, совместимыми с Amazon S3 API. Подходит для управления объектным хранилищем через терминал. Установка S3cmd Вариант 1: через Homebrew (macOS): brew install s3cmd Вариант 2: через RPM-пакет (Linux): ...
    • Работа через S3 API (CLI или SDK)

      При работе через S3-совместимый API используются специально созданные ключи доступа. В этом режиме: доступ к бакетам регулируется AWS-совместимой политикой, правила проектов и ролей панели напрямую не применяются, Пример