> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Permissões de segredos

> Em cada ação do IAM, o serviço de segredos verifica qual chamada precisa dela e como conceder a leitura de um valor separadamente de tudo o mais.

Cada endpoint de segredos verifica uma ação do IAM antes de fazer qualquer coisa. Esta é a lista completa — não há outros, e nenhum endpoint ignora a verificação.

<Info>
  A referência da API mostra a ação na própria página de cada ponto de extremidade, para que você não precise voltar aqui para procurar uma. Ambos vêm do mesmo lugar: a chamada de autorização no serviço, lida no momento da compilação.
</Info>

<a id="the-actions" />

## As ações

Operações em um segredo específico são autorizadas contra **CRN desse segredo**, com as tags do segredo disponíveis como contexto de condição. Apenas as duas operações de nível de coleção não são.

| Ação e aventura | Chamada de telefone | Âmbito de aplicação |
| - | - | - |
| `secrets:ListSecrets` | `GET /v1/secrets` | coleção |
| `secrets:CreateSecret` | `POST /v1/secrets` | coleção |
| `secrets:DescribeSecret` | `GET /v1/secrets/{secret_id}` | CRN secreto |
| `secrets:UpdateSecret` | `PATCH /v1/secrets/{secret_id}` | CRN secreto |
| `secrets:DeleteSecret` | `DELETE /v1/secrets/{secret_id}` | CRN secreto |
| `secrets:RestoreSecret` | `POST /v1/secrets/{secret_id}/restore` | CRN secreto |
| `secrets:GetSecretValue` | `GET /v1/secrets/{secret_id}/value` | CRN secreto |
| `secrets:PutSecretValue` | `PUT /v1/secrets/{secret_id}/value` | CRN secreto |
| `secrets:ListVersions` | `GET /v1/secrets/{secret_id}/versions` | CRN secreto |

<a id="describing-a-secret-does-not-read-it" />

### Descrever um segredo não o lê

`secrets:GetSecretValue` é uma ação diferente de `secrets:DescribeSecret`, e a divisão é executada por toda a API: a resposta describe não tem nenhum campo de valor, então não há forma em que metadados e texto simples viajam juntos. Conceda a ação de leitura por conta própria, aos poucos principais que precisam dela, nos poucos segredos que precisam.

A mesma divisão aparece em [KMS](/pt/kms/permissions) com `kms:Decrypt` e em [certificates](/pt/certificates/permissions) com `certificate:GetCertificateMaterial`.

<a id="writing-does-not-imply-reading" />

### Escrever não implica ler

`secrets:PutSecretValue` adiciona uma versão sem retornar nada da antiga, então um trabalho de rotação pode mantê-la sozinha. Isso vale a pena: um componente que só escreve material novo não tem razão para ser capaz de ler o que já está lá.

<a id="listing-cannot-be-narrowed" />

### A listagem não pode ser restringida

`secrets:ListSecrets` é autorizado contra a coleção em vez de contra segredos individuais, então restringi-lo por CRN ou tag não tem efeito. Escopo `secrets:GetSecretValue` — esse é o conceito que importa.

<a id="resources" />

## Recursos

As ações de segredos são verificadas em relação a uma forma de recurso:

```
crn:secrets:<region>:<account>:secret/<name>
```

O slot de região é preenchido: um segredo vive em uma região e é lido a partir daí.

O nome de um segredo pode conter `/`, e é isso que faz o CRN valer a pena ser analisado. Nomear segredos como `prod/payments/stripe-key` em vez de `prod-payments-stripe-key` permite que uma declaração cubra os segredos de um serviço inteiro e nada mais. Os nomes correspondem a `^[a-zA-Z0-9][a-zA-Z0-9._/-]{0,255}$`.

<a id="conditions" />

## Condições

Create carrega as tags da solicitação; cada ação com escopo secreto carrega as tags já no secreto:

* `basalt:RequestTag/<key>` — o que um chamador pode rotular um segredo **como**, em create.
* `basalt:ResourceTag/<key>` — quais segredos existentes uma ação pode tocar.

<a id="writing-a-policy" />

## Escrever uma política

Um serviço lendo exatamente os segredos sob seu próprio prefixo de caminho:

```json theme={null}
{
  "version": "2024-01-01",
  "statements": [
    {
      "sid": "PaymentsReadsItsOwnSecrets",
      "effect": "allow",
      "actions": ["secrets:DescribeSecret", "secrets:GetSecretValue"],
      "resources": ["crn:secrets:sa-saopaulo-1:my-account:secret/prod/payments/*"]
    }
  ]
}
```

Um trabalho de rotação que pode escrever mas nunca ler:

```json theme={null}
{
  "version": "2024-01-01",
  "statements": [
    {
      "sid": "RotateOnly",
      "effect": "allow",
      "actions": ["secrets:PutSecretValue", "secrets:ListVersions"],
      "resources": ["crn:secrets:sa-saopaulo-1:my-account:secret/prod/*"]
    }
  ]
}
```

<Warning>
  **`secrets:*` inclui a leitura de todos os valores.** Um curinga na ação concede `secrets:GetSecretValue` junto com tudo o mais, o que raramente é o que se quer dizer com "deixar esta equipe gerenciar segredos". Liste as ações quando a credencial pertence a uma pessoa ou a um trabalho de CI.
</Warning>

Veja [writing policies](/pt/iam/policies) para o formato do documento, as chaves de condição de tag, e como um guardrail `deny` sobrevive a um broad allow.

<a id="what-a-denial-looks-like" />

## Como é uma negação

Uma verificação falhada responde `403`:

```json theme={null}
{
  "error": {
    "code": "ACCESS_DENIED",
    "message": "You don't have permission to perform this action",
    "request_id": "..."
  }
}
```

**Ele não diz qual ação estava faltando**, deliberadamente — a mensagem é a mesma para cada negação, então não pode ser usada para mapear o que uma credencial pode ou não alcançar. Procure a chamada que você fez na tabela acima, e a ação que ela precisa é a que você adiciona.

<Note>
  Um `404` não é um `403` disfarçado. A propriedade é resolvida antes da autorização: um segredo pertencente a outra conta responde `404` porque não é seu para ver, e um que você possui, mas não tem a ação para respostas `403`. Um segredo dentro de sua [janela de recuperação](/pt/secrets/deletion) é um terceiro caso novamente — ele responde `409 SECRET_DELETED`, o que significa que o segredo está lá e a credencial está bem.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.