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

> El servicio KMS comprueba cada acción de IAM, qué llamada la necesita y cómo conceder el sellado sin conceder la apertura.

Cada punto final de KMS 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

Cada operación en una clave específica se autoriza contra **CRN de esa clave**, con las etiquetas de la clave disponibles como contexto de condición. Solo las dos operaciones a nivel de colección no lo son.

| Acción y aventura | Llamada de teléfono | Alcance |
| - | - | - |
| `kms:ListKeys` | `GET /v1/keys` | colección |
| `kms:CreateKey` | `POST /v1/keys` | colección |
| `kms:GetKey` | `GET /v1/keys/{key_id}` | clave CRN |
| `kms:UpdateKey` | `PATCH /v1/keys/{key_id}` | clave CRN |
| `kms:EnableKey` | `POST /v1/keys/{key_id}/enable` | clave CRN |
| `kms:DisableKey` | `POST /v1/keys/{key_id}/disable` | clave CRN |
| `kms:ScheduleKeyDeletion` | `POST /v1/keys/{key_id}/schedule-deletion` | clave CRN |
| `kms:CancelKeyDeletion` | `POST /v1/keys/{key_id}/cancel-deletion` | clave CRN |
| `kms:Encrypt` | `POST /v1/keys/{key_id}/encrypt` | clave CRN |
| `kms:Decrypt` | `POST /v1/keys/{key_id}/decrypt` | clave CRN |
| `kms:GenerateDataKey` | `POST /v1/keys/{key_id}/generate-data-key` | clave CRN |
| `kms:Sign` | `POST /v1/keys/{key_id}/sign` | clave CRN |
| `kms:Verify` | `POST /v1/keys/{key_id}/verify` | clave CRN |

<a id="sealing-and-opening-are-different-grants" />

### El sellado y la apertura son subvenciones diferentes

`kms:Decrypt` y `kms:GenerateDataKey` son acciones separadas de `kms:GetKey` precisamente para que las operaciones que devuelven material clave utilizable puedan ser concedidas estrechamente. Un componente que solo necesita *sellar* datos debe contener `kms:Encrypt` y `kms:GenerateDataKey` y nada más — entonces puede escribir, y nunca leer de vuelta.

La misma división aparece en [certificados](/es/certificates/permissions), donde `certificate:GetCertificateMaterial` es separado de la lectura de un certificado.

<Note>
  `kms:GenerateDataKey` devuelve la nueva clave de datos **en texto plano así como envuelto**, porque el llamador tiene que usarla antes de tirarla. Trátelo como equivalente a `kms:Decrypt` en el radio de explosión cuando decida quién lo tiene, aunque los dos guarden direcciones diferentes.
</Note>

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

### El listado no se puede restringir

`kms:ListKeys` está autorizado contra la colección, no contra claves individuales, por lo que restringirlo por CRN o etiqueta no tiene efecto. Escopa las operaciones que *usan* una clave; la lista le dice a un llamador que existe una clave y nada más.

<a id="resources" />

## Recursos

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

```
crn:kms:<region>:<account>:key/<name>
```

La ranura de región está **populada**, a diferencia de DNS o certificados. Una clave existe en una región y solo se puede usar desde allí, por lo que una directiva escrita para una región no llega a las claves de otra región, incluso cuando los nombres coinciden.

<a id="conditions" />

## Condiciones

Create lleva las etiquetas de la solicitud; cada acción con ámbito de tecla lleva las etiquetas que ya están en la tecla. Así que una política puede definir tanto lo que un llamador puede etiquetar una tecla **como**, y qué teclas existentes puede tocar:

* `basalt:RequestTag/<key>` — en `kms:CreateKey`.
* `basalt:ResourceTag/<key>` — en cada acción con ámbito a un CRN de clave.

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

## Escribir una póliza

Una ruta de escritura que puede sellar pero nunca abrir:

```json theme={null}
{
  "version": "2024-01-01",
  "statements": [
    {
      "sid": "IngestSealsOnly",
      "effect": "allow",
      "actions": ["kms:GenerateDataKey", "kms:Encrypt"],
      "resources": ["crn:kms:sa-saopaulo-1:my-account:key/prod-*"]
    }
  ]
}
```

Cercar una flota por etiqueta en lugar de por nombre:

```json theme={null}
{
  "version": "2024-01-01",
  "statements": [
    {
      "sid": "StagingKeysOnly",
      "effect": "allow",
      "actions": ["kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey"],
      "resources": ["*"],
      "conditions": [
        {
          "operator": "equals",
          "key": "basalt:ResourceTag/env",
          "values": ["staging"]
        }
      ]
    }
  ]
}
```

<Warning>
  **`kms:*` incluye descifrado y eliminación.** Un comodín otorga `kms:Decrypt`, `kms:GenerateDataKey` y `kms:ScheduleKeyDeletion` junto con todo lo demás. Enumera las acciones cuando la credencial pertenece a una carga de trabajo; un servicio que sella los datos no tiene ninguna razón para poder programar la destrucción de la clave.
</Warning>

Vea [writing policies](/es/iam/policies) para el formato completo del documento y cada operador de condición.

<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. Busca la llamada que hiciste en la tabla anterior, y la acción que necesita es la que debes agregar.

<Note>
  Un `404` no es un `403` disfrazado. La propiedad se resuelve antes de la autorización: una clave perteneciente a otra cuenta responde `KMS_KEY_NOT_FOUND` porque no es suya para ver, y una que usted posee pero carece de la acción para respuestas `403`. Si recibe un `404` en una clave que cree que es suya, compruebe la región y 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.