# Como criar um bucket do Object Storage

import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

Este guia mostra como usar o serviço **Object Storage** da Azion para criar um bucket somente leitura e atribuir permissões de leitura e escrita usando o Console e a API da Azion.

## Criando um bucket

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


<Fragment slot="panel.console">

Acesse o [Console da Azion](https://console.azion.com/object-storage) e siga os passos abaixo:

1. No menu lateral, clique em **Object Storage**.
2. Clique no botão **+ Buckets**.
3. Preencha o nome do bucket com um nome único e descritivo para identificá-lo. 
4. Em seguida, selecione o tipo de acesso (Read & Write, Read Only ou Restricted).
5. Clique em **Save**.

![Criar novo bucket](/assets/docs/images/uploads/stoage-create-bucket-console.png)

</Fragment>

<Fragment slot="panel.cli">

## Requisitos 

- [Azion CLI instalada](/pt-br/documentacao/produtos/azion-cli/visao-geral/#instalar-a-azion-cli). 
- [Um personal token configurado](/pt-br/documentacao/devtools/cli/globals/#token).

Para criar um bucket:

```bash 
azion create edge-storage bucket
```

A Azion CLI vai apresentar uma série de interações para que o bucket possa ser criado. Execute `azion update edge-storage bucket -h` para obter mais informações.

:::note
Ao criar um nome para seu bucket, tenha em mente que o nome deve ser único entre todos os buckets existentes.
:::

</Fragment>

<Fragment slot="panel.api">

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

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

Você deve receber a seguinte resposta:

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

</Fragment>

</Tabs>

---

## Atribuindo permissões de leitura e escrita para um bucket:

<Tabs client:visible>
    <Fragment slot="tab.cli">Azion CLI</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.cli">

## Requisitos 

- [Azion CLI instalada](/pt-br/documentacao/produtos/azion-cli/visao-geral/#instalar-a-azion-cli). 
- [Um personal token configurado](/pt-br/documentacao/devtools/cli/globals/#token).

Para atualizar um bucket:

```bash 
azion update edge-storage bucket
```

A Azion CLI vai apresentar uma série de interações para que o bucket possa ser atualizado. Execute `azion update edge-storage bucket -h` para obter mais informações.

</Fragment>

<Fragment slot="panel.api">


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

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

Você deve receber a seguinte resposta:

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

</Tabs>

Agora, você criou com sucesso um bucket e atribuiu permissões de leitura e escrita a ele. Você pode começar a armazenar e acessar objetos deste bucket.

:::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/). 
:::