Инструкция описывает пример, как предоставить одному пользователю доступ к бакету другого пользователя в S3-совместимом объектном хранилище внутри одного аккаунта (тенанта).
Если доступ нужен внутри панели управления, используйте встроенные механизмы:
Чтобы пользователь видел или изменял бакеты:
Использование bucket policy требуется только если:
Есть два пользователя:
У каждого есть сгенерированные ранее в панели управления ключи доступа (создание ключей доступа):
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
Endpoint объектного хранилища:
https://storage.pro-data.tech (пример url в зоне доступности UZ-5)
Выполнить (для каждого пользователя отдельно):
aws --endpoint-url https://storage.pro-data.tech s3api list-buckets
"Owner": {
"DisplayName": "...",
"ID": "company$USR123456"
}
company$USR123456
│ │
│ └── user_id
└────────── tenant
Если tenant совпадает — можно продолжать.
Если нет — доступ выдать нельзя.
- aws --endpoint-url https://storage.pro-data.tech s3api get-bucket-acl \
- --bucket <bucket-name>
Обычно:
FULL_CONTROL
- aws --endpoint-url https://storage.pro-data.tech s3api list-objects \
- --bucket <bucket-name>
Ожидаемо:
403 Forbidden
Действие выполняет владелец бакета (User A)
Для указания пользователя в policy нужен корректный ARN.
📍 Его можно получить в панели управления:
👉 Используйте именно этот ARN, чтобы избежать ошибок.
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Sid": "AllowRead",
- "Effect": "Allow",
- "Principal": {
- "AWS": "arn:aws:iam::<tenant>:user/<user_id>"
- },
- "Action": [
- "s3:ListBucket",
- "s3:GetObject"
- ],
- "Resource": [
- "arn:aws:s3:::<bucket>",
- "arn:aws:s3:::<bucket>/*"
- ]
- }
- ]
- }
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Sid": "AllowReadWrite",
- "Effect": "Allow",
- "Principal": {
- "AWS": "arn:aws:iam::<tenant>:user/<user_id>"
- },
- "Action": [
- "s3:ListBucket",
- "s3:GetObject",
- "s3:PutObject",
- "s3:DeleteObject"
- ],
- "Resource": [
- "arn:aws:s3:::<bucket>",
- "arn:aws:s3:::<bucket>/*"
- ]
- }
- ]
- }
- aws --endpoint-url https://storage.pro-data.tech s3api put-bucket-policy \
- --bucket <bucket-name> \
- --policy '<JSON>'
Обязательно указать оба:
arn:aws:s3:::bucket-name
arn:aws:s3:::bucket-name/*
- aws --endpoint-url https://storage.pro-data.tech s3api get-bucket-policy \
- --bucket <bucket-name>
- aws --endpoint-url https://storage.pro-data.tech s3api list-objects \
- --bucket <bucket-name>
Ожидаемо:
{
"Contents": [...]
}
- aws --endpoint-url https://storage.pro-data.tech s3api delete-bucket-policy \
- --bucket <bucket-name>
→ доступ не работает
→ policy не применяется
👉 всегда лучше брать из панели
→ часть операций даёт 403
→ не подходит для межпользовательского доступа
После выполнения:
| Действие | Кто выполняет |
|---|---|
| Узнать user ID | любой пользователь |
| Проверить ACL | владелец |
| Выдать доступ | владелец |
| Проверить доступ | пользователь B |
| Отозвать доступ | владелец |