OpenStack S3 Swift: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
| Строка 299: | Строка 299: | ||
... |
... |
||
</PRE> |
</PRE> |
||
| + | |||
| + | ==Просмотр существующих бакетов== |
||
| + | Информация о бакете |
||
| + | <PRE> |
||
| + | radosgw-admin bucket stats --bucket tfe-data-ng |
||
| + | </PRE> |
||
| + | |||
| + | |||
=<code>keystone</code>= |
=<code>keystone</code>= |
||
Версия 14:57, 12 мая 2025
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
Проверка кому принадлежит бакет
В примере имя бакета tf-data а принадлежит он "owner": "tfuser"
radosgw-admin bucket stats --bucket tf-data
{
"bucket": "tf-data",
"num_shards": 11,
"tenant": "",
"zonegroup": "6824bc11-eca9-4431-ae8c-d2480e1bbd57",
"placement_rule": "default-placement",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
},
"id": "ca82dea1-f8c6-4f23-9afa-c82f08f1d8c1.31654776.1",
"marker": "ca82dea1-f8c6-4f23-9afa-c82f08f1d8c1.31654776.1",
"index_type": "Normal",
"versioned": false,
"versioning_enabled": false,
"object_lock_enabled": false,
"mfa_enabled": false,
"owner": "tfuser",
"ver": "0#1,1#1,2#1,3#1,4#1,5#1,6#1,7#1,8#1,9#1,10#1",
"master_ver": "0#0,1#0,2#0,3#0,4#0,5#0,6#0,7#0,8#0,9#0,10#0",
"mtime": "2025-05-12T11:43:13.540766Z",
"creation_time": "2025-05-12T11:43:13.503812Z",
"max_marker": "0#,1#,2#,3#,4#,5#,6#,7#,8#,9#,10#",
"usage": {},
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
}
}
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
Назначение квот
Назначить квоту в 10 гиг
radosgw-admin quota set --quota-scope=bucket --uid=user-dqs --max-size=10737418240B radosgw-admin quota set --quota-scope=bucket --uid=user-prod --max-size=10737418240B
radosgw-admin quota enable --quota-scope=bucket --uid=user-dqs radosgw-admin quota enable --quota-scope=bucket --uid=user-prod
Смена ключей
добавить новый ключ
radosgw-admin key create --uid=user-dqs --key-type=s3 --secret-key barSecret --access-key fooAccess
{
"user_id": "user-dqs",
"display_name": "user-dqs",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "user-dqs",
"access_key": "S7P0CL6BSFQ3ZJNOQZJ0",
"secret_key": "rDaBkRdkZNWgzUUXCeouKu4uabsSyb7XFPWzPOno"
},
{
"user": "user-dqs",
"access_key": "fooAccess",
"secret_key": "barSecret"
}
],
...
Удалить старый ключ
radosgw-admin key rm --uid=user-dqs --access-key S7P0CL6BSFQ3ZJNOQZJ0
{
"user_id": "user-dqs",
"display_name": "user-dqs",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "user-dqs",
"access_key": "fooAccess",
"secret_key": "barSecret"
}
],
...
Просмотр существующих бакетов
Информация о бакете
radosgw-admin bucket stats --bucket tfe-data-ng
keystone
решил не использовать так как
- требует перенастройки - добавления параметра
rgw keystone implicit tenants: "swift" - ограничение
Ceph integration does not allow providing permissions for OpenStack users directly. Therefore, you need to set permissions for the project that corresponds to the user.
Можно почитать на сайте Мирантиса
Ссылки
- https://docs.redhat.com/en/documentation/red_hat_openstack_platform/13/html/users_and_identity_management_guide/quota_management#set_object_storage_quotas_for_a_user
- https://docs.mirantis.com/mosk/latest/ops/ceph-operations/s3-bucket-policy/openstack-bucket-policy.html#ceph-object-storage-bucket-policy-examples
- https://docs.ceph.com/en/reef/radosgw/s3/bucketops/
- https://docs.ceph.com/en/latest/radosgw/admin/
- https://www.ibm.com/docs/en/storage-ceph/7?topic=management-add-remove-access-keys