OpenStack S3 Swift
Материал из noname.com.ua
Openstack S3 Swift
Задача
- создать 2 бакета
- создать 2 пользователя
- настроить права что бы первый пользователь мог работать с 2 бакетами а второй только с одним
Задачу можно решать 2 способами - с использованием пользователей keystone и с использованием пользователей rados
rados
Создать пользователей
radosgw-admin user create --uid user-prod --display-name user-prod
{
"user_id": "user-prod",
"display_name": "user-prod",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "user-prod",
"access_key": "XXX",
"secret_key": "YYYYYYYYY"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
Аналогично
radosgw-admin user create --uid user-dqs --display-name user-dqs
Получить из OpenStack endpoint
Получить название региона
openstack region list
+-----------------+---------------+-------------+ | Region | Parent Region | Description | +-----------------+---------------+-------------+ | staging-region | None | | +-----------------+---------------+-------------+
Получить endpoint с учетом региона
openstack \ versions show \ --service object-store \ --status CURRENT \ --interface public \ --region staging-region \ -c Endpoint -f value | sed 's/\/swift\/.*$//' https://staging.domain.tld
Конфигурационные файлы для s3cmd
Для каждого пользователя свой конфигурационный файл соответвенно
s3cfg-user-prod.cfg
[default] access_key = XXX secret_key = YYYYYYYYY host_base = https://staging.domain.tld host_bucket =
access_keyXXX id который вывдится при создании пользователяsecret_keyYYYYYYYYY секрет который вывдится при создании пользователяhost_basehttps://staging.domain.tld - endpoint полученный из OpenStack
s3cfg-user-dqs.cfg
аналогично, за искючением секретов
Создание bucket
/usr/local/bin/s3cmd -c s3cfg-user-prod.cfg mb s3://prod Bucket 's3://prod/' created
/usr/local/bin/s3cmd -c s3cfg-user-dqs.cfg mb s3://dqs Bucket 's3://dqs/' created
Проверка доступности
Каждый пользователь видит только свой бакет
/usr/local/bin/s3cmd -c s3cfg-user-dqs.cfg ls 2025-03-21 13:02 s3://dqs
/usr/local/bin/s3cmd -c s3cfg-user-prod.cfg ls 2025-03-21 12:46 s3://prod
Policy
Создание политик
Политики похожи но отличаются в части Principal
bucket prod
{
"Version": "2012-10-17",
"Id": "S3Policy1",
"Statement": [
{
"Sid": "BucketAllow",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam:::user/user-prod"
]
},
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::prod",
"arn:aws:s3:::prod/*"
]
}
]
}
bucket dqs
{
"Version": "2012-10-17",
"Id": "S3Policy1",
"Statement": [
{
"Sid": "BucketAllow",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam:::user/user-prod",
"arn:aws:iam:::user/user-dqs"
]
},
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::dqs",
"arn:aws:s3:::dqs/*"
]
}
]
}
Применение политик
Из-под каждого пользователя применить политику
/usr/local/bin/s3cmd -c s3cfg-user-dqs.cfg setpolicy s3policy-dqs.json s3://dqs s3://dqs/: Policy updated
/usr/local/bin/s3cmd -c s3cfg-user-prod.cfg setpolicy s3policy-prod.json s3://prod s3://prod/: Policy updated
Просмотреть можно командой
/usr/local/bin/s3cmd -c s3cfg-user-prod.cfg info s3://prod