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

# Permisos de certificado

> El servicio de certificados comprueba cada acción de IAM, qué llamada la necesita y los recursos a los que una directiva puede aplicarla.

Cada punto final de certificado comprueba una acción de IAM antes de realizar cualquier acción. Esta es la lista completa, no hay otros, y ningún punto final se salta la comprobación.

<Info>
  La referencia de la API muestra la acción en la página propia de cada punto final, por lo que no tiene que volver aquí para buscar una. Ambos provienen del mismo lugar: la llamada de autorización en el servicio, leída en el momento de la compilación.
</Info>

<a id="the-actions" />

## Las acciones

| Acción y aventura | Llamada |
| - | - |
| `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` |

La asignación es un punto final a una acción, lo que no es cierto de todos los servicios aquí. Tres cosas todavía vale la pena decir, porque ninguno de ellos siguen de los nombres de los extremos.

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

### La lectura de un certificado no le proporciona su clave privada

`certificate:GetCertificate` devuelve todo excepto la clave. La clave solo proviene del punto final material, detrás de su propio `certificate:GetCertificateMaterial`, por lo que una credencial que puede leer y listar sus certificados aún no puede extraer lo que los hace utilizables.

Esa separación es la **solo** El endpoint acepta las mismas credenciales que cualquier otra llamada y no le importa qué tipo de principal seas, por lo que cualquiera que tenga la acción obtiene la clave privada. Concedérsela deliberadamente, y solo junto con un ámbito de recursos que quieras. [Material del certificado](/es/certificates/material).

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

### Emitir autorizaciones en el nombre que usted solicitó

Crear se comprueba contra el CRN del certificado **a punto de existir** — `certificate/<name>`, construido a partir del `name` en la solicitud, antes de que se escriba cualquier fila. Una política con el alcance de `certificate/prod-*`, por lo tanto, bloquea la emisión de la misma manera que bloquea las lecturas que siguen, en lugar de ser una regla que solo se puede aplicar después del hecho.

Ambas rutas de creación usan la misma acción: emitir a través del desafío DNS y cargar el material que ya tienes son ambos `certificate:CreateCertificate`. Si necesita permitir uno y no el otro, esa distinción no está disponible en la política; el punto final es el mismo.

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

### La adjunción a un receptor no es una acción de certificado

Poner un certificado en un escuchador HTTPS necesita `loadbalancer:AttachListenerCertificate` en el CRN del **equilibrador de carga**. No hay ninguna acción de certificado en esa ruta.

La propiedad se aplica por separado y no depende de su política: el CRN debe nombrar un certificado que posee su cuenta, y su ranura de cuenta debe coincidir con la suya. Un certificado perteneciente a otra cuenta se rechaza incluso si puede nombrarlo exactamente.

<a id="resources" />

## Recursos

Las acciones de certificado se comprueban con una forma de recurso:

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

La ranura de región está vacía porque los certificados no están vinculados a una región: el mismo certificado puede respaldar balanceadores de carga en cualquier región.

El CRN se construye a partir del **nombre**, no de un id, que es lo que hace que una política pueda seguir una convención de nombres: `crn:certificate::my-account:certificate/prod-*` cubre todos los certificados cuyo nombre comienza con `prod-`, incluyendo los emitidos más tarde.

<Note>
  `name` es único por cuenta y coincide con `^[a-zA-Z0-9][a-zA-Z0-9._-]{0,253}$`. Debido a que aterriza en el CRN, elegir nombres con un prefijo común por entorno es lo que hace que el comodín anterior valga la pena escribir.
</Note>

<a id="conditions" />

## Condiciones

Crear lleva las etiquetas de la solicitud, y cada otra acción lleva las etiquetas que ya están en el certificado, por lo que las condiciones de la directiva funcionan en cualquier lado de la emisión:

* `basalt:RequestTag/<key>` — lo que un llamador puede etiquetar un certificado **como**, en create.
* `basalt:ResourceTag/<key>` — qué certificados existentes puede tocar una acción.

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

## Escribir una póliza

Solo lectura en todos los certificados de la cuenta. Observe lo que esto deliberadamente omite:

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

Control total de una convención de nombres, sin las claves 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:*` incluye la clave privada.** Un comodín en la acción otorga `certificate:GetCertificateMaterial` junto con todo lo demás, que rara vez es lo que se quiere decir con "dejar que este equipo administre certificados". Nada aguas abajo detectará el error: no hay una segunda comprobación en el punto final del material. Enumerar las acciones explícitamente a menos que la credencial sea para contener la clave.
</Warning>

`certificate:ListCertificates` se comprueba con la cuenta en lugar de un certificado con nombre, por lo que no puede ser ampliado a uno. Concederla otorga la capacidad de ver que cada certificado de la cuenta existe, aunque no de leer el material de ninguno de ellos.

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

## Qué aspecto tiene una negación

Una comprobación fallida responde `403`:

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

**No le dice qué acción faltaba**, deliberadamente — el mensaje es el mismo para cada denegación, por lo que no se puede usar para mapear lo que una credencial puede y no puede alcanzar. Por eso existe la tabla de arriba: busca la llamada que hiciste, y la acción que necesita es la que se debe agregar.

<Note>
  Un `404` no es un `403` disfrazado. La propiedad y la autorización son comprobaciones separadas, y la propiedad se resuelve primero: un certificado que pertenece a otra cuenta responde `404` porque no es suyo para ver, y uno que usted posee pero carece de la acción para respuestas `403`. Si recibe un `404` en un certificado que cree que posee, compruebe la cuenta a la que pertenece la credencial antes de comprobar la política.
</Note>


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