OpenStack S3 Swift: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 271: Строка 271:
 
* 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.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.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

Версия 13:37, 26 марта 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_key XXX id который вывдится при создании пользователя
  • secret_key YYYYYYYYY секрет который вывдится при создании пользователя
  • host_base https://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

Назначение квот

Назначить квоту в 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"
        }
    ],
...

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.

Можно почитать на сайте Мирантиса

Ссылки