# Como criar e modificar um bucket do Object Storage

import DocButton from '~/components/webkit/DocButton.vue';
import Tabs from '~/components/tabs/Tabs'

O **Object Storage** da Azion permite que você crie buckets e integre seu armazenamento de objetos com sua infraestrutura no edge. Este guia abrange como criar, alterar e remover um bucket de armazenamento usando a [API da Azion](https://api.azion.com).

Ao criar um bucket nativo na Azion, você garante que seus dados residam na mesma infraestrutura de rede global que processa suas requisições, eliminando a latência de busca em provedores externos e garantindo **custo zero de Data Transfer Out (DTO)**.

<DocButton href="/pt-br/documentacao/produtos/store/object-storage/" label="saiba mais sobre Object Storage" kind="secondary" size="medium" />

Consulte o guia [Como fazer upload e download de objetos de um bucket](/pt-br/documentacao/produtos/guias/upload-e-download-de-objetos-do-bucket/) para realizar operações com objetos.

---

<Tabs client:visible>
    <Fragment slot="tab.api">API</Fragment>
    <Fragment slot="tab.console">Console</Fragment>

<Fragment slot="panel.api">

## Crie um bucket somente leitura

Execute a seguinte requisição `POST` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e o valor de `name` pelo nome do bucket para criar um novo bucket de leitura:

```bash
curl --location 'https://api.azion.com/v4/storage/buckets' \
--header 'Accept: application/json; version=3' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
    "name": "my-bucket-ro",
    "edge_access": "read_only"
}'
```

Você deverá receber a seguinte resposta:

```json
{
  "state": "executed",
  "data": {
    "name": "my-bucket-ro",
    "edge_access": "read_only"
  }
}
```

Agora, você pode utilizar o bucket para [fazer o upload e download de objetos](/pt-br/documentacao/produtos/guias/upload-e-download-de-objetos-do-bucket/).

---

## Atribua permissão de leitura-escrita para bucket

Execute a seguinte requisição `PATCH` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e `bucket_name` pelo nome do bucket para atribuir a permissão de leitura e escrita:

```bash
curl --location 'https://api.azion.com/v4/storage/buckets/<bucket_name>' \
--header 'Accept: application/json; version=3' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
    "edge_access": "read_write"
}'
```

Você deverá receber a seguinte resposta:

```json
{
  "state": "executed",
  "data": {
    "name": "my-bucket-ro",
    "edge_access": "read_write"
  }
}
```

</Fragment>

<Fragment slot="panel.console">

Para criar seu primeiro bucket via [Azion Console](https://console.azion.com):

1. No menu superior esquerdo, selecione **Object Storage**.
2. Clique no botão **+ Bucket**.
3. **Bucket Name:** Defina um nome exclusivo (entre 6 e 63 caracteres).
    * *Dica: Use nomes que identifiquem a função, como `media-assets-prod`.*
4. **Workloads Access:** Escolha como a plataforma Azion interagirá com seus dados:
    * **Read Only:** Recomendado para servir conteúdo estático (HTML, imagens). O Edge pode ler, mas não modificar.
    * **Read-Write:** Permite que aplicações no Edge (Functions) leiam e gravem arquivos no bucket.
    * **Restricted:** Bloqueia o acesso direto da Azion Web Platform; o acesso será permitido apenas via API ou Protocolo S3.
5. Clique em **Save**.

</Fragment>
</Tabs>

:::caution[Atenção]
Quando um bucket é configurado com **permissões de read-write**, qualquer usuário pode acessar e modificar seu conteúdo (por exemplo, enviando uma requisição PUT para sobrescrever arquivos). Se o bucket for usado como origem para uma application, essa configuração pode expor o conteúdo a modificações não autorizadas. No entanto, se o bucket for acessado através de uma function, o risco é gerenciado pela lógica implementada no código da função, permitindo que os desenvolvedores imponham controles mais rigorosos sobre quem pode acessar ou modificar os dados. Para mitigar riscos, sempre verifique as permissões necessárias para cada caso de uso e implemente controles de acesso adequados. Saiba mais sobre [Autenticação e permissões](/pt-br/documentacao/produtos/gestao-de-contas/teams-permissions/). 
:::

---

## Remova um bucket

Execute a seguinte requisição `DELETE` em seu terminal, substituindo `[TOKEN VALUE]` por seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e `bucket_name` pelo nome do bucket que você deseja remover:


<Tabs client:visible>
    <Fragment slot="tab.api">API</Fragment>
    <Fragment slot="tab.console">Console</Fragment>

<Fragment slot="panel.api">

```bash
curl --location --request DELETE 'https://api.azion.com/v4/storage/buckets/<bucket_name>' \
--header 'Accept: application/json' \
--header 'Authorization: Token [TOKEN VALUE]'
```

</Fragment>

<Fragment slot="panel.console">
Você pode ajustar as permissões ou remover buckets conforme a evolução da sua aplicação.

### Alterar Permissões
1. Na lista de buckets, clique no nome do bucket desejado.
2. Altere o nível de **Acesso**.
3. Clique em **Save**.

### Deletar um Bucket
:::caution[Atenção]
Para deletar um bucket, ele deve estar completamente vazio. Se você removeu o último objeto recentemente, aguarde o período de **24 horas** para que a exclusão do bucket seja processada pelo sistema.
:::

1. Certifique-se de que não há objetos no bucket.
2. Na lista de buckets, clique no ícone de lixeira (trash) ou selecione o bucket e clique em **Delete**.

</Fragment>
</Tabs>

:::note
Essa operação só poderá ser executada se o bucket estiver vazio.
:::