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

سیاست CORS باکت

CORS مشخص می‌کند کدام مبدأهای مرورگر می‌توانند پاسخ باکت را از صفحهٔ وب بخوانند. این تنظیم روی bucket claim در namespace نوشته می‌شود — از کنسول یا با kubectl.

توجه

CORS دسترسی نمی‌دهد. درخواست هنوز باید با سیاست باکت یا Bucket access (کلید) مجاز باشد. اگر باکت خصوصی باشد، حتی با allowedOrigins: ["*"] چیزی برای عموم باز نمی‌شود.

نکته

قواعد به‌ترتیب ارزیابی می‌شوند و اولین تطبیق برنده است. ترتیب قواعد در کنسول مهم است.

تنظیم از کنسول​

تب CORS در کنسول

  1. وارد workspace شوید و یک namespace را باز کنید.
  2. در ناوبری namespace، از گروه Object Storage روی Bucket claims بزنید.
  3. claim موردنظر را باز کنید.
  4. تب CORS را انتخاب کنید.
  5. روی Add rule بزنید و فیلدها را پر کنید:
    • Allowed origins — مثلاً https://app.example.com (یک * داخل مبدأ، یا * برای همه)
    • Allowed methods — مثل GET، HEAD، PUT
    • Allowed headers (اختیاری) — هدرهایی که مرورگر در preflight می‌فرستد؛ * برای همه
    • Expose headers (اختیاری) — هدرهایی که اسکریپت صفحه می‌تواند بخواند؛ برای آپلود چندبخشی معمولاً ETag
    • Preflight cache / maxAge (اختیاری) — مثلاً 24h یا 30m (واحد d نیست)
  6. در صورت نیاز قواعد را با دکمه‌های بالا/پایین جابه‌جا کنید (Earlier rules win).
  7. روی Save CORS بزنید.

حذف CORS​

همهٔ قواعد را حذف کنید و دوباره Save CORS بزنید تا پیکربندی از باکت برداشته شود.

تنظیم با kubectl​

فیلد spec.corsPolicy را روی همان S3BucketClaim تنظیم کنید:

zsh
❯ kubectl -n <namespace> apply -f - <<EOF
❯ apiVersion: oss.tapsicloud.com/v1alpha1
❯ kind: S3BucketClaim
❯ metadata:
❯ name: app-data
❯ spec:
❯ corsPolicy:
❯ - name: web
❯ allowedOrigins: ["https://app.example.com"]
❯ allowedMethods: ["GET", "HEAD"]
❯ allowedHeaders: ["*"]
❯ exposeHeaders: ["ETag"]
❯ maxAge: 30m
❯ EOF

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

چند مبدأ یا آپلود از مرورگر​

!manifest.yaml×
tapsicloud › manifest.yaml
1apiVersion: oss.tapsicloud.com/v1alpha1
2kind: S3BucketClaim
3metadata:
4 name: app-data
5spec:
6 corsPolicy:
7 - name: web
8 allowedOrigins:
9 - "https://app.example.com"
10 - "https://staging.example.com"
11 allowedMethods: ["GET", "HEAD", "PUT", "POST"]
12 allowedHeaders: ["*"]
13 exposeHeaders: ["ETag"]
14 maxAge: 24h
✓ dry-runLn 14 · YAML

فیلدهای هر قاعده​

فیلدمعنی ساده
name (اختیاری)برچسب قاعده
allowedOriginsمبدأهای مجاز مرورگر
allowedMethodsGET، PUT، POST، DELETE، HEAD
allowedHeaders (اختیاری)هدرهای مجاز در preflight؛ * برای همه
exposeHeaders (اختیاری)هدرهایی که صفحه می‌تواند بخواند (مثلاً ETag)
maxAge (اختیاری)مدت کش preflight، مثل 24h یا 1h30m
نکته

برای کلاینت مرورگری که با امضا (SigV4) کار می‌کند، معمولاً allowedHeaders: ["*"] لازم است. اگر آپلود چندبخشی دارید، ETag را در exposeHeaders بگذارید.

پاک کردن CORS​

zsh
❯ kubectl -n <namespace> patch s3bucketclaim app-data --type=merge -p '{"spec":{"corsPolicy":null}}'