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
- 🖥️ Console
- MGC-CLI
- AWS-CLI
No momento não temos suporte para configuração de bucket cors em nosso console.
Para aplicar uma configuração CORS a um bucket, execute:
- 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
Para aplicar uma configuração CORS via AWS CLI:
- 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:
aws s3api put-bucket-cors --bucket NOME_DO_BUCKET --cors-configuration file://cors.json
Para visualizar a configuração atual:
aws s3api get-bucket-cors --bucket NOME_DO_BUCKET
Para remover as regras de CORS:
aws s3api delete-bucket-cors --bucket NOME_DO_BUCKET
Explicação dos Campos
Campo | Descrição |
---|---|
AllowedOrigins | Lista de domínios permitidos (ex: https://app.exemplo.com ) |
AllowedMethods | Métodos HTTP aceitos (GET , POST , PUT , etc.) |
AllowedHeaders | Cabeçalhos aceitos na requisição (pode ser * para todos) |
ExposeHeaders | Cabeçalhos que podem ser lidos pelo cliente (ex: ETag ) |
MaxAgeSeconds | Tempo 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.