

# Criptografia do pacote de configuração
<a name="configuration-bundles-encryption"></a>

Quando você especifica um `kmsKeyArn` em um pacote de configuração, o serviço criptografa as **configurações do componente** (solicitações do sistema, descrições de ferramentas e outros conteúdos de configuração) usando criptografia de envelope. Todos os outros metadados do pacote (nome, descrição, IDs de versão, carimbos de data/hora) permanecem criptografados com a chave própria. AWS 

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

A criptografia do pacote de configuração usa criptografia de envelope com credenciais do chamador. Quando você cria ou atualiza um pacote com um`kmsKeyArn`, o serviço usa suas credenciais (por meio de [sessões de acesso direto](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#fas)) para gerar uma chave de criptografia de dados (DEK) do KMS. O serviço criptografa as configurações do componente localmente usando essa DEK e, em seguida, armazena a DEK criptografada AES-GCM junto com o pacote. Quando você recupera o pacote, o serviço descriptografa a DEK usando suas credenciais e descriptografa os componentes.

O chamador deve ter`kms:GenerateDataKey`,`kms:Decrypt`,`kms:DescribeKey`, e `kms:ReEncrypt*` permissões na chave.

AgentCore as otimizações oferecem suporte somente a chaves KMS de criptografia simétrica. A chave KMS deve estar na mesma AWS região do pacote de configuração.

### Configurando permissões para usar uma chave KMS gerenciada pelo cliente
<a name="configuration-bundles-encryption-key-policy"></a>

A política de chaves a seguir fornece as permissões mínimas necessárias para a criptografia do pacote de configuração. A política tem duas instruções:
+  **AllowCallerAccess**— Permite que o usuário ou a função do IAM valide a chave por meio `DescribeKey` de.
+  **AllowCallerCryptoOps**— Permite que o usuário ou a função do IAM gere chaves de dados, decodifique e recriptografe (para rotação de chaves), de acordo com o contexto de criptografia.

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

A política contém as seguintes declarações:
+  **AllowCallerAccess**— Concede `kms:DescribeKey` permissão à função do IAM para a validação da chave no momento da criação ou atualização do pacote. {{111122223333}}Substitua pelo ID da sua conta e {{MyConfigBundleRole}} pela função ou usuário do IAM que gerencia os pacotes de configuração.
+  **AllowCallerCryptoOps**— Concede a função `kms:GenerateDataKey` e `kms:ReEncrypt*` as permissões do IAM, definidas pelo contexto de `aws:bedrock-agentcore:configurationBundleArn` criptografia. `kms:Decrypt` A `kms:ReEncrypt*` permissão é necessária para rotação de chaves (alteração da chave KMS em um pacote existente). Substitua {{111122223333}}{{MyConfigBundleRole}},, e {{us-east-1}} por seus valores. Para permitir o acesso a todos os pacotes de configuração em sua conta, use um curinga com`StringLike`:. `arn:aws:bedrock-agentcore:us-east-1:111122223333:configuration-bundle/*`

### Definindo o escopo do acesso à chave KMS gerenciada pelo cliente
<a name="configuration-bundles-encryption-scoping"></a>

Você pode usar o contexto de criptografia para reduzir o acesso à chave gerenciada pelo cliente. AgentCore as otimizações incluem o seguinte contexto de criptografia em todas as operações do KMS:

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

Você pode usar esse contexto de criptografia nas principais condições de política para restringir as operações do KMS a pacotes de configuração específicos, conforme mostrado na `AllowCallerCryptoOps` declaração no exemplo de política de chaves acima.

### Criação de um pacote de configuração com uma chave KMS gerenciada pelo cliente
<a name="configuration-bundles-encryption-creating"></a>

Para criptografar um pacote de configuração, especifique o `kmsKeyArn` parâmetro ao chamar. [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']}")
```

### Alterando a configuração de criptografia em um pacote existente
<a name="configuration-bundles-encryption-changing"></a>

Você pode alterar a configuração de criptografia em um pacote existente usando [UpdateConfigurationBundle](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_UpdateConfigurationBundle.html):
+  **Adicionar criptografia** — Especifique um `kmsKeyArn` em um pacote que foi criado sem uma. O serviço gera uma nova DEK e criptografa as configurações do componente.
+  **Tecla de rotação** — especifique uma diferente`kmsKeyArn`. O serviço reempacota a DEK existente da chave antiga para a nova chave usando. `kms:ReEncrypt` O chamador deve ter permissões nas duas teclas. Se a chave antiga não estiver disponível (permissões desativadas, excluídas ou ausentes), a atualização falhará.

**nota**  
Você não pode remover a criptografia de chave gerenciada pelo cliente de um pacote de configuração depois de adicionada.

## Monitorando o uso do KMS para pacotes de configuração
<a name="configuration-bundles-encryption-monitoring"></a>

Os seguintes nomes de CloudTrail eventos aparecem para as operações do KMS do pacote de configuração:
+  `GenerateDataKey`— Ao criar um pacote com uma chave gerenciada pelo cliente ou ao adicionar criptografia a um pacote existente. O `encryptionContext` campo contém`aws:bedrock-agentcore:configurationBundleArn`.
+  `Decrypt`— Ao recuperar o conteúdo do pacote (GetConfigurationBundle, GetConfigurationBundleVersion) ou ao atualizar um pacote criptografado.
+  `ReEncrypt`— Ao girar a chave KMS em um pacote existente via. UpdateConfigurationBundle
+  `DescribeKey`— Ao validar a chave no momento da criação ou atualização do pacote.

## Comportamento quando uma chave fica indisponível
<a name="configuration-bundles-encryption-unavailable"></a>

Se você desativar ou excluir a chave KMS gerenciada pelo cliente usada por um pacote de configuração:
+  **CreateConfigurationBundle**— Falha na validação com`ValidationException`.
+  **UpdateConfigurationBundle**— Falha porque o serviço não consegue descriptografar a DEK existente para recriptografar novos componentes. A rotação da chave também falha porque a chave antiga não está disponível para reempacotamento.
+  **GetConfigurationBundle / GetConfigurationBundleVersion**— Falha porque o serviço não consegue descriptografar a DEK ou as configurações do componente.
+  **ListConfigurationBundles / ListConfigurationBundleVersions**— É bem-sucedido porque a listagem retorna somente metadados e não exige operações KMS.
+  **DeleteConfigurationBundle**— É bem-sucedido porque a exclusão não exige a descriptografia dos dados do pacote.

Para restaurar o acesso, reative a chave ou atualize a política de chaves para conceder as permissões necessárias.