

# Cifrado de paquetes de configuración
<a name="configuration-bundles-encryption"></a>

Al especificar un `kmsKeyArn` paquete de configuración, el servicio cifra las **configuraciones de los componentes** (solicitudes del sistema, descripciones de herramientas y otro contenido de configuración) mediante el cifrado de sobres. Todos los demás metadatos del paquete (nombre, descripción, identificadores de versión, marcas de tiempo) permanecen cifrados con la clave propia. AWS 

## Funcionamiento
<a name="configuration-bundles-encryption-how-it-works"></a>

El cifrado del paquete de configuración utiliza el cifrado de sobres con las credenciales de la persona que llama. Al crear o actualizar un paquete con un`kmsKeyArn`, el servicio utiliza sus credenciales (mediante [sesiones de acceso directo](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#fas)) para generar una clave de cifrado de datos (DEK) desde KMS. El servicio cifra las configuraciones de los componentes de forma local AES-GCM con esa DEK y, a continuación, almacena la DEK cifrada junto con el paquete. Al recuperar el paquete, el servicio descifra la DEK con sus credenciales y descifra los componentes.

La persona que llama debe tener `kms:GenerateDataKey` `kms:Decrypt``kms:DescribeKey`, y `kms:ReEncrypt*` permisos sobre la clave.

AgentCore Las optimizaciones solo admiten claves KMS de cifrado simétrico. La clave KMS debe estar en la misma AWS región que el paquete de configuración.

### Configurar los permisos para usar una clave KMS administrada por el cliente
<a name="configuration-bundles-encryption-key-policy"></a>

La siguiente política de claves proporciona los permisos mínimos necesarios para el cifrado del paquete de configuración. La política tiene dos instrucciones:
+  **AllowCallerAccess**— Permite al usuario o rol de IAM validar la clave mediante`DescribeKey`.
+  **AllowCallerCryptoOps**— Permite al usuario o rol de IAM generar claves de datos, descifrarlas y volver a cifrarlas (para la rotación de claves), según el contexto de cifrado.

```
{
"Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCallerAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyConfigBundleRole"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*"
    },
    {
      "Sid": "AllowCallerCryptoOps",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyConfigBundleRole"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt",
        "kms:ReEncrypt*"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:bedrock-agentcore:configurationBundleArn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:configuration-bundle/*"
        }
      }
    }
  ]
}
```

La política contiene las siguientes declaraciones:
+  **AllowCallerAccess**— Otorga al rol de IAM `kms:DescribeKey` permiso para validar la clave en el momento de la creación o actualización del paquete. {{111122223333}}Sustitúyalo por el ID de su cuenta y {{MyConfigBundleRole}} por el rol o usuario de IAM que administra los paquetes de configuración.
+  **AllowCallerCryptoOps**— Otorga la función `kms:GenerateDataKey` y `kms:ReEncrypt*` los permisos de IAM según el contexto de cifrado. `kms:Decrypt` `aws:bedrock-agentcore:configurationBundleArn` El `kms:ReEncrypt*` permiso es necesario para la rotación de claves (cambiar la clave KMS de un paquete existente). Sustituya {{111122223333}} y {{us-east-1}} por sus valores. {{MyConfigBundleRole}} Para permitir el acceso a todos los paquetes de configuración de su cuenta, utilice un comodín con`StringLike`:. `arn:aws:bedrock-agentcore:us-east-1:111122223333:configuration-bundle/*`

### Limitar el acceso a la clave KMS administrada por el cliente
<a name="configuration-bundles-encryption-scoping"></a>

Puede usar el contexto de cifrado para limitar el acceso a la clave administrada por el cliente. AgentCore las optimizaciones incluyen el siguiente contexto de cifrado en todas las operaciones de KMS:

```
{
  "aws:bedrock-agentcore:configurationBundleArn": "arn:aws:bedrock-agentcore:us-east-1:111122223333:configuration-bundle/bundle-id"
}
```

Puede usar este contexto de cifrado en las condiciones de la política clave para restringir las operaciones de KMS a paquetes de configuración específicos, como se muestra en la `AllowCallerCryptoOps` declaración del ejemplo de política de claves anterior.

### Crear un paquete de configuración con una clave de KMS administrada por el cliente
<a name="configuration-bundles-encryption-creating"></a>

Para cifrar un paquete de configuración, especifique el `kmsKeyArn` parámetro al realizar la llamada [CreateConfigurationBundle](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateConfigurationBundle.html).

**Example**  

```
aws bedrock-agentcore-control create-configuration-bundle \
  --bundle-name "MyEncryptedBundle" \
  --kms-key-arn "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" \
  --components '{
    "arn:aws:bedrock-agentcore:us-east-1:111122223333:runtime/my-agent": {
      "configuration": {
        "systemPrompt": "You are a helpful assistant.",
        "modelId": "anthropic.claude-3-sonnet"
      }
    }
  }'
```

```
import boto3

client = boto3.client('bedrock-agentcore-control')

response = client.create_configuration_bundle(
    bundleName='MyEncryptedBundle',
    kmsKeyArn='arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab',
    components={
        'arn:aws:bedrock-agentcore:us-east-1:111122223333:runtime/my-agent': {
            'configuration': {
                'systemPrompt': 'You are a helpful assistant.',
                'modelId': 'anthropic.claude-3-sonnet'
            }
        }
    }
)

print(f"Bundle ID: {response['bundleId']}")
```

### Cambiar la configuración de cifrado de un paquete existente
<a name="configuration-bundles-encryption-changing"></a>

Puede cambiar la configuración de cifrado de un paquete existente mediante [UpdateConfigurationBundle](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_UpdateConfigurationBundle.html):
+  **Añadir cifrado**: especifique un `kmsKeyArn` valor en un paquete que se creó sin él. El servicio genera una nueva DEK y cifra las configuraciones de los componentes.
+  **Rotar la clave**: especifique una diferente. `kmsKeyArn` El servicio vuelve a empaquetar la DEK existente de la clave anterior a la nueva clave que utiliza. `kms:ReEncrypt` La persona que llama debe tener permisos en ambas claves. Si la clave anterior no está disponible (está deshabilitada, eliminada o faltan permisos), se producirá un error en la actualización.

**nota**  
No puede eliminar el cifrado de claves gestionado por el cliente de un paquete de configuración una vez que se haya agregado.

## Supervisión del uso de KMS para los paquetes de configuración
<a name="configuration-bundles-encryption-monitoring"></a>

Los siguientes nombres de CloudTrail eventos aparecen para las operaciones de KMS de los paquetes de configuración:
+  `GenerateDataKey`— Al crear un paquete con una clave gestionada por el cliente o al añadir cifrado a un paquete existente. El `encryptionContext` campo contiene`aws:bedrock-agentcore:configurationBundleArn`.
+  `Decrypt`— Al recuperar el contenido del paquete (GetConfigurationBundle, GetConfigurationBundleVersion) o al actualizar un paquete cifrado.
+  `ReEncrypt`— Al rotar la clave KMS de un paquete existente mediante UpdateConfigurationBundle.
+  `DescribeKey`— Al validar la clave en el momento de la creación o actualización del paquete.

## Comportamiento cuando una clave deja de estar disponible
<a name="configuration-bundles-encryption-unavailable"></a>

Si deshabilita o elimina la clave de KMS administrada por el cliente que se utiliza en un paquete de configuración:
+  **CreateConfigurationBundle**— No se realiza la validación con`ValidationException`.
+  **UpdateConfigurationBundle**— Falla porque el servicio no puede descifrar la DEK existente para volver a cifrar los componentes nuevos. La rotación de claves también falla porque la clave antigua no se puede volver a empaquetar.
+  **GetConfigurationBundle / GetConfigurationBundleVersion**— Falla porque el servicio no puede descifrar la DEK ni las configuraciones de los componentes.
+  **ListConfigurationBundles / ListConfigurationBundleVersions**— Se ejecuta correctamente porque la lista solo devuelve metadatos y no requiere operaciones de KMS.
+  **DeleteConfigurationBundle**— Se realiza correctamente porque la eliminación no requiere descifrar los datos del paquete.

Para restablecer el acceso, vuelva a habilitar la clave o actualice la política de claves para conceder los permisos necesarios.