پرش به مطلب اصلی

دسترسی به باکت (Bucket access)

Bucket access راه گرفتن کلید و هویت برای یک یا چند bucket claim در همین namespace است. هر access یک هویت و یک Secret می‌سازد — حتی اگر چند باکت را پوشش دهد — تا اپلیکیشن با یک جفت کلید به همهٔ آن‌ها وصل شود.

توجه

فقط claimهای همین namespace را می‌توانید انتخاب کنید. برای دسترسی عمومی یا دسترسی از namespace دیگر، از سیاست باکت روی خود claim استفاده کنید.

توجه

قبل از ساخت access، حداقل یک bucket claim در همان namespace داشته باشید. بدون claim، فرم ساخت خالی می‌ماند.

سطوح دسترسی​

در کنسولدر YAML (accessMode)معنی ساده
Read onlyReadOnlyفهرست باکت و خواندن آبجکت‌ها
Read / writeReadWriteخواندن، نوشتن و حذف آبجکت‌ها
Read / write + publish objectsReadWritePublishمثل ReadWrite، به‌علاوه امکان عمومی کردن تک‌آبجکت‌ها با ACL
نکته

هیچ‌کدام از این سطوح مدیریت باکت نمی‌دهند: حذف باکت، تغییر سیاست، versioning، lifecycle یا سهمیه هرگز از طریق access داده نمی‌شود.

توجه

ReadWritePublish می‌تواند آبجکت را برای خوانندهٔ ناشناس باز کند. اگر فقط آپلود/دانلود اپ لازم است، از ReadWrite استفاده کنید.

ایجاد از کنسول​

فرم New access در کنسول

  1. وارد workspace شوید و یک namespace را باز کنید.
  2. در ناوبری namespace، از گروه Object Storage روی Bucket access بزنید.
  3. روی New access بزنید.
  4. در پنل بازشده (تب Form):
    • Name را پر کنید (مثلاً reporting-svc) — بعداً قابل تغییر نیست.
    • در Buckets، claimهای موردنظر را تیک بزنید و برای هر کدام سطح دسترسی را انتخاب کنید.
  5. روی Create بزنید.
  6. صبر کنید تا وضعیت access برابر Ready شود.
  7. در ستون Credentials روی Reveal بزنید تا AWS_ACCESS_KEY_ID، AWS_SECRET_ACCESS_KEY و AWS_ENDPOINT_URL را ببینید.
نکته

برای ساخت از YAML در همان پنل، تب From YAML را باز کنید.

ایجاد با kubectl​

در همان namespace یک S3BucketAccess اعمال کنید:

zsh
❯ kubectl -n <namespace> apply -f - <<EOF
❯ apiVersion: oss.tapsicloud.com/v1alpha1
❯ kind: S3BucketAccess
❯ metadata:
❯ name: reporting-svc
❯ spec:
❯ buckets:
❯ - bucketClaimName: app-data
❯ accessMode: ReadOnly
❯ - bucketClaimName: logs
❯ accessMode: ReadWrite
# secretName: reporting-svc-credentials # اختیاری؛ پیش‌فرض: <name>-credentials
❯ EOF

<namespace> را با namespace خود جایگزین کنید. فرض بر این است که kubeconfig و context مربوط به workspace شما از قبل تنظیم شده است. هر bucketClaimName باید نام یک claim در همین namespace باشد.

وضعیت را بررسی کنید:

zsh
❯ kubectl -n <namespace> get s3bucketaccesses reporting-svc

وقتی Phase برابر Ready شد، کلیدها در Secret هستند:

zsh
❯ kubectl -n <namespace> \
get secret reporting-svc-credentials -o jsonpath='{.data}'

کلیدهای معمول Secret: AWS_ACCESS_KEY_ID، AWS_SECRET_ACCESS_KEY، AWS_ENDPOINT_URL (مقادیر base64).

مدیریت بعد از ایجاد​

کاردر کنسولمعنی
دیدن کلیدهاReveal / Hideخواندن Secret؛ نیاز به دسترسی get روی secrets
چرخش کلیدRotateکلید جدید ساخته می‌شود؛ کلید قبلی فوری از کار می‌افتد
تغییر باکت‌هاEdit روی ستون Bucketsافزودن/حذف claim یا تغییر سطح — بدون تعویض کلید
حذفحذف ردیفهویت و کلید حذف می‌شوند؛ هر کلاینتی که از آن استفاده می‌کند قطع می‌شود

چرخش کلید با kubectl:

zsh
❯ kubectl -n <namespace> \
annotate s3bucketaccess reporting-svc \
oss.tapsicloud.com/rotate-keys="$(date -u +%FT%TZ)" --overwrite
توجه

تا وقتی یک access هنوز به claim اشاره می‌کند، حذف آن claim رد می‌شود. اول access را ویرایش یا حذف کنید، بعد claim را.

نکته

لیست باکت‌های یک access قابل تغییر است و کلید را عوض نمی‌کند. فقط Rotate یا Delete کلید فعلی را بی‌اعتبار می‌کند.