

# Criptografe seu AgentCore gateway com uma chave KMS gerenciada pelo cliente
<a name="gateway-encryption"></a>

Por padrão, o Gateway criptografa seus dados em repouso usando uma chave de serviço de gerenciamento de AWS chaves gerenciada pelo serviço. No entanto, você pode, opcionalmente, fornecer sua própria chave KMS gerenciada pelo cliente para criptografar dados em repouso quando você:
+ Crie um gateway.
+ Atualize as configurações de um gateway.

O uso de uma chave gerenciada pelo cliente oferece mais controle sobre o processo de criptografia, incluindo a capacidade de:
+ Gire a chave de acordo com sua própria programação
+ Controle o acesso à chave por meio de políticas do IAM
+ Desative ou exclua a chave quando ela não for mais necessária
+ Audite o uso da chave por meio CloudWatch de registros e AWS CloudTrail

Para obter mais informações, consulte o [Guia do desenvolvedor do AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/).

**nota**  
Se você optar por usar uma chave gerenciada pelo cliente, será responsável por gerenciar a chave e suas permissões. Se a chave for desativada ou excluída, ou se o Gateway perder a permissão para usar a chave, você perderá o acesso aos dados criptografados.

## Pré-requisitos para criptografar seu gateway AgentCore
<a name="gateway-encryption-prereqs"></a>

Antes de criptografar seu gateway, verifique se você atendeu aos seguintes pré-requisitos:
+ Você tem acesso a uma chave KMS. Para obter informações sobre como criar uma chave KMS, consulte [Criar uma chave KMS.](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ A chave KMS tem uma política de chaves anexada que permite as seguintes permissões:
  + Permissões que permitem que a função de serviço de gateway execute as seguintes ações:
    + kms:CreateGrant
    + kms:DescribeKey
    + kms:Decrypt
    + kms:GenerateDataKey
  + (Se você habilitar CloudWatch Logs para seu gateway) Permissões que permitem que o serviço CloudWatch Logs descriptografe a chave.

    Para obter mais informações sobre como controlar as permissões do IAM para uma chave KMS, consulte [Acesso e permissões da chave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html) no Guia do desenvolvedor do AWS Key Management Service.

 **Exemplo de política de chaves** 

O exemplo de política a seguir fornece as permissões necessárias para criptografar um gateway e usar um gateway criptografado. A quarta declaração também permite que CloudWatch os registros registrem o uso da chave para o gateway criptografado. A política contém chaves de condição para se adequar às melhores práticas de segurança.

```
{
"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:*"
        }
      }
    }
  ]
}
```

A política contém as seguintes declarações:
+  **AllowServiceRoleDescribeKKey**— Permite que o principal especificado descreva a chave se a solicitação for feita por meio do AgentCore serviço. Substitua os valores nos seguintes campos:
  +  `Principal`— Substitua o `AWS` valor pelo ARN real da sua função de serviço de gateway.
  +  `Condition`— Na `kms:ViaService` matriz, {{us-east-1}} substitua pela AWS região real para a qual você deseja permitir que a chave seja descrita.
+  **AllowServiceRoleDecryptKey**— Permite que o principal especificado decifre a chave se a solicitação for feita por meio do AgentCore serviço e se o ARN do gateway para o qual a solicitação foi feita corresponder ao do campo. `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` Substitua os valores a seguir:
  +  `Principal`— Substitua o `AWS` valor pelo ARN real da sua função de serviço de gateway.
  +  `Condition`— Faça o seguinte:
    + Na `kms:ViaService` matriz, {{us-east-1}} substitua pela AWS região real para a qual você deseja permitir que a chave seja descriptografada.
    + Substitua o `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` valor pelo ARN real do seu gateway.
+  **AllowServiceRoleCreateGrant**— Permite que o principal especificado crie uma concessão para uma chave se a solicitação for feita por meio do AgentCore serviço e se o ARN do gateway para o qual a solicitação foi feita corresponder ao do `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` campo. Substitua os valores a seguir:
  +  `Principal`— Substitua o `AWS` valor pelo ARN real da sua função de serviço de gateway.
  +  `Condition`— Faça o seguinte:
    + Na `kms:ViaService` matriz, {{us-east-1}} substitua pela AWS região real para a qual você deseja permitir que a chave seja descriptografada.
    + Substitua o `kmsEncryptionContext:aws:bedrock-agentcore-gateway-arn` valor pelo ARN real do seu gateway (se você quiser permitir).
+  **AllowKMSDecryptionLogging**— Permite que o principal especificado decifre uma chave KMS gerenciada pelo cliente para auditar o uso da chave por meio do Logs. CloudWatch No `kms:EncryptionContext:SourceArn` valor, substitua {{us-east-1}} e {{123456789012}} valores por sua AWS região real e ID da conta.

**Example**  

1. ====== Para criptografar seu gateway com uma chave KMS gerenciada pelo cliente

1. Siga as etapas do **console** em [Criar um AgentCore gateway Amazon Bedrock](gateway-create.md) e expanda a **chave KMS - seção opcional**.

1. Escolha **Personalizar configurações de criptografia (avançado)**.

1. Selecione uma chave KMS e confirme seus detalhes.
**nota**  
Se você não vê sua chave KMS, consulte os [Pré-requisitos para criptografar seu AgentCore gateway](#gateway-encryption-prereqs) e verifique se as permissões estão configuradas corretamente.

1. Continue com as etapas restantes do console.

1. Para criptografar seu gateway usando a AWS CLI, inclua `kms-key-arn` o ao enviar uma das seguintes solicitações por meio de [AgentCore um cliente de plano de controle](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/). :
   +  [criar gateway](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/create-gateway.html) 
   +  [gateway de atualização](https://docs.aws.amazon.com/cli/latest/reference/bedrock-agentcore-control/update-gateway.html) 

     O exemplo a seguir mostra um exemplo de solicitação de CLI para criar um gateway com uma chave AWS KMS especificada usando o argumento: `kms-key-arn`

     ```
     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 criptografar seu gateway usando o SDK do AWS Python (Boto3), inclua `kms-key-arn` o ao enviar uma das seguintes solicitações por meio de um cliente de plano de controle. AgentCore ](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) 
   +  [gateway\_de atualização](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control/client/update_gateway.html) 

     O exemplo a seguir mostra um exemplo de solicitação do Boto3 para criar um gateway com uma chave AWS KMS especificada usando o 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"
         }
       }
     )
     ```