

# Cifre su AgentCore puerta de enlace con una clave KMS administrada por el cliente
<a name="gateway-encryption"></a>

De forma predeterminada, Gateway cifra los datos en reposo mediante una clave del servicio de administración de AWS claves gestionada por el servicio. Sin embargo, si lo desea, puede proporcionar su propia clave KMS administrada por el cliente para cifrar los datos en reposo si:
+ Cree una puerta de enlace.
+ Actualice las configuraciones de una puerta de enlace.

El uso de una clave gestionada por el cliente le proporciona un mayor control sobre el proceso de cifrado, incluida la posibilidad de:
+ Gire la clave según su propio horario
+ Controle el acceso a la clave mediante las políticas de IAM
+ Desactive o elimine la clave cuando ya no sea necesaria
+ Audite el uso de la clave mediante CloudWatch registros y AWS CloudTrail

Para obtener más información, consulte la [Guía para desarrolladores de AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/).

**nota**  
Si decide usar una clave administrada por el cliente, usted es responsable de administrar la clave y sus permisos. Si la clave se deshabilita o se elimina, o si Gateway pierde el permiso para usarla, usted perderá el acceso a los datos cifrados.

## Requisitos previos para cifrar la puerta de enlace AgentCore
<a name="gateway-encryption-prereqs"></a>

Antes de cifrar la puerta de enlace, asegúrese de cumplir los siguientes requisitos previos:
+ Tiene acceso a una clave KMS. Para obtener información sobre cómo crear una clave de KMS, consulte [Crear una clave de KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html).
+ La clave KMS tiene asociada una política de claves que permite los siguientes permisos:
  + Permisos que permiten a la función de servicio de puerta de enlace realizar las siguientes acciones:
    + kms: CreateGrant
    + km: DescribeKey
    + kms:Decrypt
    + km: GenerateDataKey
  + (Si habilita CloudWatch los registros para su puerta de enlace) Permisos que permiten al servicio de CloudWatch registros descifrar la clave.

    Para obtener más información sobre cómo controlar los permisos de IAM para una clave de KMS, consulte el [acceso y los permisos de las claves de KMS](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html) en la Guía para desarrolladores del servicio de administración de AWS claves.

 **Política de claves de ejemplo** 

El siguiente ejemplo de política proporciona los permisos necesarios para cifrar una puerta de enlace y utilizar una puerta de enlace cifrada. La cuarta afirmación también permite a CloudWatch Logs registrar el uso de claves para la puerta de enlace cifrada. La política contiene claves de condición para cumplir con las mejores prácticas de seguridad.

```
{
"Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowServiceRoleDescribeKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole"
      },
      "Action": [
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": [
            "bedrock-agentcore.us-east-1.amazonaws.com"
          ]
        }
      }
    },
    {
      "Sid": "AllowServiceRoleDecryptKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": [
            "bedrock-agentcore.us-east-1.amazonaws.com"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:bedrock-agentcore-gateway:arn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/GatewayId"
        }
      }
    },
    {
      "Sid": "AllowServiceRoleCreateGrant",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/GatewayServiceRole"
      },
      "Action": "kms:CreateGrant",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": [
            "bedrock-agentcore.us-east-1.amazonaws.com"
          ],
          "kms:GrantConstraintType": "EncryptionContextSubset"
        },
        "ForAllValues:StringEquals": {
          "kms:GrantOperations": [
            "Decrypt",
            "GenerateDataKey"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:bedrock-agentcore-gateway:arn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/GatewayId"
        }
      }
    },
    {
      "Sid": "AllowKMSDecryptionLogging",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
        }
      }
    }
  ]
}
```

La política contiene las siguientes declaraciones:
+  **AllowServiceRoleDescribeKKey**— Permite que el director especificado describa la clave si la solicitud se realiza a través del AgentCore servicio. Sustituya los valores en los siguientes campos:
  +  `Principal`— Sustituya el `AWS` valor por el ARN real de su función de servicio de puerta de enlace.
  +  `Condition`— En la `kms:ViaService` matriz, {{us-east-1}} sustitúyalo por la AWS región real para la que desee permitir que se describa la clave.
+  **AllowServiceRoleDecryptKey**— Permite que el principal especificado descifre la clave si la solicitud se realiza a través del AgentCore servicio y si el ARN de la puerta de enlace a la que se realiza la solicitud coincide con el del campo. `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` Reemplace los siguientes valores:
  +  `Principal`— Sustituya el `AWS` valor por el ARN real de su función de servicio de puerta de enlace.
  +  `Condition`— Haga lo siguiente:
    + En la `kms:ViaService` matriz, {{us-east-1}} sustitúyala por la AWS región real para la que deseas permitir que se descifre la clave.
    + Sustituya el `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` valor por el ARN real de su puerta de enlace.
+  **AllowServiceRoleCreateGrant**— Permite al principal especificado crear una concesión para una clave si la solicitud se realiza a través del AgentCore servicio y si el ARN de la puerta de enlace a la que se realiza la solicitud coincide con el del campo. `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` Reemplace los siguientes valores:
  +  `Principal`— Sustituya el `AWS` valor por el ARN real de su función de servicio de puerta de enlace.
  +  `Condition`— Haga lo siguiente:
    + En la `kms:ViaService` matriz, {{us-east-1}} sustitúyala por la AWS región real para la que deseas permitir que se descifre la clave.
    + Sustituya el `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` valor por el ARN real de la puerta de enlace (si lo desea permitir).
+  **AllowKMSDecryptionLogging**— Permite al director especificado descifrar una clave KMS administrada por el cliente para auditar el uso de la clave a través de los registros. CloudWatch En el `kms:EncryptionContext:SourceArn` valor, sustituya {{us-east-1}} y {{123456789012}} los valores por su AWS región e ID de cuenta reales.

**Example**  

1. ====== Para cifrar la puerta de enlace con una clave KMS administrada por el cliente

1. Siga los pasos de la **consola** en [Crear una AgentCore puerta de enlace de Amazon Bedrock](gateway-create.md) y amplíe la sección **clave KMS (opcional)**.

1. Seleccione **Personalizar la configuración de cifrado (avanzada).**

1. Seleccione una clave KMS y confirme sus detalles.
**nota**  
Si no ve su clave KMS, consulte los [requisitos previos para cifrar la AgentCore puerta de enlace](#gateway-encryption-prereqs) y compruebe que los permisos estén configurados correctamente.

1. Continúe con el resto de los pasos de la consola.

1. Para cifrar su puerta de enlace mediante la AWS CLI, inclúyala `kms-key-arn` al enviar cualquiera de las siguientes solicitudes a través de un cliente de [plano de AgentCore control](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/). :
   +  [crear puerta de enlace](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/create-gateway.html) 
   +  [puerta de enlace de actualización](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/update-gateway.html) 

     El siguiente ejemplo muestra un ejemplo de solicitud de CLI para crear una puerta de enlace con una clave de AWS KMS especificada mediante el `kms-key-arn` argumento:

     ```
     aws bedrock-agentcore-control create-gateway \
       --name "MyGateway" \
       --role-arn "arn:aws:iam::123456789012:role/GatewayRole" \
       --protocol-type "MCP" \
       --kms-key-arn "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" \
       --authorizer-type "CUSTOM_JWT" \
       --authorizer-configuration '{
         "customJWTAuthorizer": {
           "allowedAudience": ["myAudience"],
           "discoveryUrl": "https://example.com/.well-known/openid-configuration"
         }
       }'
     ```

1. Para cifrar su puerta de enlace mediante el SDK de AWS Python (Boto3), inclúyalo `kms-key-arn` al enviar cualquiera de las siguientes solicitudes a través de un cliente de plano de [AgentCore control](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control.html). :
   +  [create\_gateway](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control/client/create_gateway.html) 
   +  [update\_gateway](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control/client/update_gateway.html) 

     El siguiente ejemplo muestra un ejemplo de solicitud de Boto3 para crear una puerta de enlace con una clave AWS KMS especificada mediante el argumento: `kmsKeyArn`

     ```
     import boto3
     # Create client
     agentcore_client = boto3.client('bedrock-agentcore-control')
     
     # Create gateway and specify
     gateway = agentcore_client.create_gateway(
       name="MyGateway",
       roleArn="arn:aws:iam::123456789012:role/GatewayRole",
       protocolType="MCP",
       kmsKeyArn="arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
       authorizerType="CUSTOM_JWT",
       authorizerConfiguration= {
         "customJWTAuthorizer": {
           "allowedAudience": ["myAudience"],
           "discoveryUrl": "https://example.com/.well-known/openid-configuration"
         }
       }
     )
     ```