سیاست CORS باکت
CORS مشخص میکند کدام مبدأهای مرورگر میتوانند پاسخ باکت را از صفحهٔ وب بخوانند. این تنظیم روی bucket claim در namespace نوشته میشود — از کنسول یا با kubectl.
CORS دسترسی نمیدهد. درخواست هنوز باید با سیاست باکت یا Bucket access (کلید) مجاز باشد. اگر باکت خصوصی باشد، حتی با allowedOrigins: ["*"] چیزی برای عموم باز نمیشود.
قواعد بهترتیب ارزیابی میشوند و اولین تطبیق برنده است. ترتیب قواعد در کنسول مهم است.
تنظیم از کنسول

- وارد workspace شوید و یک namespace را باز کنید.
- در ناوبری namespace، از گروه Object Storage روی Bucket claims بزنید.
- claim موردنظر را باز کنید.
- تب CORS را انتخاب کنید.
- روی 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نیست)
- Allowed origins — مثلاً
- در صورت نیاز قواعد را با دکمههای بالا/پایین جابهجا کنید (Earlier rules win).
- روی Save CORS بزنید.
حذف CORS
همهٔ قواعد را حذف کنید و دوباره Save CORS بزنید تا پیکربندی از باکت برداشته شود.
تنظیم با kubectl
فیلد spec.corsPolicy را روی همان S3BucketClaim تنظیم کنید:
❯ 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 شما از قبل تنظیم شده است.
چند مبدأ یا آپلود از مرورگر
1apiVersion: oss.tapsicloud.com/v1alpha12kind: S3BucketClaim3metadata:4 name: app-data5spec:6 corsPolicy:7 - name: web8 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
فیلدهای هر قاعده
| فیلد | معنی ساده |
|---|---|
name (اختیاری) | برچسب قاعده |
allowedOrigins | مبدأهای مجاز مرورگر |
allowedMethods | GET، PUT، POST، DELETE، HEAD |
allowedHeaders (اختیاری) | هدرهای مجاز در preflight؛ * برای همه |
exposeHeaders (اختیاری) | هدرهایی که صفحه میتواند بخواند (مثلاً ETag) |
maxAge (اختیاری) | مدت کش preflight، مثل 24h یا 1h30m |
برای کلاینت مرورگری که با امضا (SigV4) کار میکند، معمولاً allowedHeaders: ["*"] لازم است. اگر آپلود چندبخشی دارید، ETag را در exposeHeaders بگذارید.
پاک کردن CORS
❯ kubectl -n <namespace> patch s3bucketclaim app-data --type=merge -p '{"spec":{"corsPolicy":null}}'