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

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 194: Строка 194:
 
<pre>
 
<pre>
 
/usr/local/bin/s3cmd -c s3cfg-user-prod.cfg info s3://prod
 
/usr/local/bin/s3cmd -c s3cfg-user-prod.cfg info s3://prod
  +
</PRE>
  +
  +
==Назначение квот==
  +
Назначить квоту в 10 гиг
  +
<PRE>
  +
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
  +
</PRE>
  +
  +
<PRE>
  +
radosgw-admin quota enable --quota-scope=bucket --uid=user-dqs
  +
radosgw-admin quota enable --quota-scope=bucket --uid=user-prod
 
</PRE>
 
</PRE>
   

Версия 19:24, 21 марта 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

keystone

Ссылки

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