Skip to main content

Bucket CORS

O CORS (Cross-Origin Resource Sharing) permite que aplicações hospedadas em domínios diferentes possam acessar recursos do seu bucket, como arquivos estáticos consumidos por aplicações web frontend.

CORS não substitui as políticas de acesso. Para que o CORS funcione corretamente, os objetos ainda precisam ter permissões apropriadas via Policy ou ACL. Saiba mais em: Controle de Acessos

Configurar Bucket CORS

Para aplicar uma configuração CORS a um bucket, execute:

  1. Crie um arquivo cors.json com as regras:
[
{
"AllowedOrigins": ["https://meusite.com"],
"AllowedMethods": ["GET", "PUT"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]

E aplique utilizando o seguinte comando:

mgc object-storage buckets cors set NOME_DO_BUCKET @./cors.json

ou inline

mgc object-storage buckets cors set NOME_DO_BUCKET '{"CORSRules":[{"AllowedOrigins":["*"],"AllowedMethods":["GET"]}]}'

Para visualizar a configuração atual:

mgc object-storage buckets cors get NOME_DO_BUCKET

Para remover as regras de CORS:

mgc object-storage buckets cors delete NOME_DO_BUCKET

Explicação dos Campos

CampoDescrição
AllowedOriginsLista de domínios permitidos (ex: https://app.exemplo.com)
AllowedMethodsMétodos HTTP aceitos (GET, POST, PUT, etc.)
AllowedHeadersCabeçalhos aceitos na requisição (pode ser * para todos)
ExposeHeadersCabeçalhos que podem ser lidos pelo cliente (ex: ETag)
MaxAgeSecondsTempo que o navegador pode cachear a resposta da requisição preflight

Considerações

  • Uma configuração incorreta de CORS pode impedir o funcionamento de aplicações frontend.
  • Lembre-se de combinar CORS com a política de acesso do bucket (Bucket Policy ou ACL).

Exemplos de Configurações de CORS

A seguir, apresentamos exemplos práticos de uso de CORS no seu bucket.

Permitir leitura pública para um site específico

Permite que qualquer frontend hospedado em https://meusite.com.br possa fazer requisições GET para visualizar objetos (como imagens, vídeos, PDFs etc.):

[
{
"AllowedOrigins": ["https://meusite.com.br"],
"AllowedMethods": ["GET"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3000
}
]

Uso típico:

Servir arquivos públicos como imagens, PDFs, vídeos, CSS/JS para usuários finais.


Permitir uploads via JavaScript (PUT) com controle de origem

Permite que um sistema web (por exemplo, um painel administrativo) envie arquivos ao bucket usando requisições PUT:

[
{
"AllowedOrigins": ["https://admin.sistema.com"],
"AllowedMethods": ["PUT"],
"AllowedHeaders": ["Authorization", "Content-Type"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 600
}
]

Uso típico:

Formulários web para upload de arquivos com autenticação via Authorization.


Permitir acesso de múltiplos domínios e métodos

Útil para APIs que servem múltiplos frontends (ex: dashboard + mobile):

[
{
"AllowedOrigins": [
"https://dashboard.empresa.com",
"https://app.mobile.com"
],
"AllowedMethods": ["GET", "POST", "OPTIONS"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["Content-Length", "ETag"],
"MaxAgeSeconds": 3600
}
]

Uso típico:

Aplicações SPA, PWA ou mobile apps que acessam buckets para leitura e submissão de arquivos.


Permitir qualquer origem (desenvolvimento/testes)

Essa configuração permite qualquer origem (*). Use apenas em ambientes de desenvolvimento ou públicos!

[
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 1800
}
]

Uso típico:

Testes locais, ambientes de staging, ou buckets públicos.


Permitir métodos múltiplos com controle de cache

Exemplo mais completo com GET, PUT e POST, com cache de preflight por 1 hora:

[
{
"AllowedOrigins": ["https://painel.cliente.com"],
"AllowedMethods": ["GET", "PUT", "POST"],
"AllowedHeaders": ["Authorization", "Content-Type", "X-Custom-Header"],
"ExposeHeaders": ["ETag", "x-amz-request-id"],
"MaxAgeSeconds": 3600
}
]

Uso típico:

Plataformas que combinam leitura e escrita no bucket, com headers customizados e integração direta com APIs.