> ## 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 certificado

> Cada ação do IAM que o serviço de certificado verifica, qual chamada precisa dela e os recursos aos quais uma política pode escopo-la.

Cada endpoint de certificado 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

| Ação e aventura | Chamada de telefone |
| - | - |
| `certificate:ListCertificates` | `GET /v1/certificates` |
| `certificate:CreateCertificate` | `POST /v1/certificates` |
| `certificate:GetCertificate` | `GET /v1/certificates/{certificate_id}` |
| `certificate:GetCertificateMaterial` | `GET /v1/certificates/{certificate_id}/material` |
| `certificate:DeleteCertificate` | `DELETE /v1/certificates/{certificate_id}` |
| `certificate:RevokeCertificate` | `POST /v1/certificates/{certificate_id}/revoke` |

O mapeamento é um ponto final para uma ação, o que não é verdade para todos os serviços aqui. Três coisas ainda valem a pena dizer, porque nenhuma delas segue dos nomes dos endpoints.

<a id="reading-a-certificate-does-not-get-you-its-private-key" />

### A leitura de um certificado não lhe dá a sua chave privada

`certificate:GetCertificate` retorna tudo, exceto a chave. A chave vem apenas do endpoint material, atrás de seu próprio `certificate:GetCertificateMaterial`, então uma credencial que pode ler e listar seus certificados ainda não pode extrair o que os torna úteis.

Essa separação é a **única** coisa que fica entre uma credencial e a chave. O endpoint aceita as mesmas credenciais que qualquer outra chamada e não se importa com o tipo de principal que você é, então qualquer pessoa que tenha a ação obtém a chave privada. Conceda-o deliberadamente e apenas ao lado de um escopo de recursos que você queira. Consulte [Certificate material](/pt/certificates/material).

<a id="issuing-authorizes-on-the-name-you-asked-for" />

### Emissão de autorizações no nome que você pediu

Criar é verificado contra o CRN do certificado **about to exist** — `certificate/<name>`, construído a partir do `name` na solicitação, antes que qualquer linha seja escrita. Uma política com escopo para `certificate/prod-*`, portanto, bloqueia a emissão da mesma forma que bloqueia as leituras que se seguem, ao invés de ser uma regra que você só pode aplicar após o fato.

Ambos os caminhos de criação usam a mesma ação: emitir através do desafio DNS e fazer upload do material que você já possui são ambos `certificate:CreateCertificate`. Se você precisar permitir um e não o outro, essa distinção não está disponível na política — o ponto de extremidade é o mesmo.

<a id="attaching-to-a-listener-is-not-a-certificate-action" />

### Anexar a um ouvinte não é uma ação de certificado

Colocar um certificado em um ouvinte HTTPS precisa de `loadbalancer:AttachListenerCertificate` no CRN do **load balancer**. Não há nenhuma ação de certificado nesse caminho.

A propriedade é aplicada separadamente e não depende da sua política: o CRN deve nomear um certificado que sua conta possui e seu slot de conta deve corresponder ao seu. Um certificado pertencente a outra conta é recusado mesmo que você possa nomeá-lo exatamente.

<a id="resources" />

## Recursos

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

```
crn:certificate::<account>:certificate/<name>
```

O slot de região está vazio porque os certificados não estão vinculados a regiões — o mesmo certificado pode fazer back-loaders em qualquer região.

O CRN é construído a partir do **nome**, não de um id, que é o que torna uma política capaz de seguir uma convenção de nomenclatura: `crn:certificate::my-account:certificate/prod-*` abrange todos os certificados cujo nome começa com `prod-`, incluindo os emitidos posteriormente.

<Note>
  `name` é único por conta e corresponde a `^[a-zA-Z0-9][a-zA-Z0-9._-]{0,253}$`. Como ele chega no CRN, escolher nomes com um prefixo comum por ambiente é o que faz o curinga acima valer a pena escrever.
</Note>

<a id="conditions" />

## Condições

Criar carrega as tags da solicitação e todas as outras ações carregam as tags já no certificado, portanto, as condições da política funcionam em ambos os lados da emissão:

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

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

## Escrever uma política

Somente leitura em todos os certificados da conta. Observe o que isso deliberadamente deixa de fora:

```json theme={null}
{
  "version": "2024-01-01",
  "statements": [
    {
      "sid": "ReadCertificates",
      "effect": "allow",
      "actions": [
        "certificate:ListCertificates",
        "certificate:GetCertificate"
      ],
      "resources": ["crn:certificate::my-account:certificate/*"]
    }
  ]
}
```

Controle total de uma convenção de nomenclatura, sem as chaves privadas:

```json theme={null}
{
  "version": "2024-01-01",
  "statements": [
    {
      "sid": "ManageProdCertificates",
      "effect": "allow",
      "actions": [
        "certificate:CreateCertificate",
        "certificate:GetCertificate",
        "certificate:DeleteCertificate",
        "certificate:RevokeCertificate"
      ],
      "resources": ["crn:certificate::my-account:certificate/prod-*"]
    }
  ]
}
```

<Warning>
  **`certificate:*` inclui a chave privada.** Um curinga na ação concede `certificate:GetCertificateMaterial` junto com tudo o mais, o que raramente é o que se quer dizer com "deixar esta equipe gerenciar certificados". Nada a jusante irá pegar o erro — não há uma segunda verificação no ponto final do material. Liste as ações explicitamente, a menos que a credencial seja destinada a conter a chave.
</Warning>

`certificate:ListCertificates` é verificado contra a conta em vez de um certificado nomeado, então ele não pode ser escopo para um. Conceder isso concede a capacidade de ver que todos os certificados na conta existem, embora não leia o material de qualquer um deles.

<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. É por isso que a tabela acima existe: procure a chamada que você fez, e a ação que ela precisa é a que você adiciona.

<Note>
  Um `404` não é um `403` disfarçado. Propriedade e autorização são verificações separadas, e a propriedade é resolvida primeiro: um certificado 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`. Se você estiver recebendo `404` em um certificado que você acredita que possui, verifique a conta à qual a credencial pertence antes de verificar a política.
</Note>


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