

• O AWS Systems Manager CloudWatch Dashboard não estará mais disponível a partir de 30 de abril de 2026. Os clientes podem continuar usando o console do Amazon CloudWatch para visualizar, criar e gerenciar os painéis do Amazon CloudWatch exatamente como fazem hoje. Para obter mais informações, consulte a [documentação do Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

# Criptografia do AWS KMS para parâmetros SecureString do AWS Systems Manager Parameter Store
<a name="secure-string-parameter-kms-encryption"></a>

Com o AWS Systems Manager Parameter Store, você pode criar [parâmetros SecureString](https://docs.aws.amazon.com//systems-manager/latest/userguide/systems-manager-parameter-store.html#what-is-a-parameter), que são parâmetros cujos nomes estão em texto sem formatação e os valores são criptografados. O Parameter Store usa o AWS KMS para criptografar e descriptografar os valores de parâmetro de parâmetros `SecureString`.

Com o Parameter Store, é possível criar, armazenar e gerenciar dados como parâmetros com valores. Você pode criar um parâmetro no Parameter Store e usá-lo em vários aplicativos e serviços, de acordo com políticas e permissões que você define. Quando você precisa alterar um valor de parâmetro, altere uma instância, em vez de gerenciar uma alteração sujeita a erros em várias origens. O Parameter Store oferece suporte a uma estrutura hierárquica para nomes de parâmetros, para que você possa qualificar um parâmetro para usos específicos. 

Para gerenciar dados confidenciais, é possível criar parâmetros `SecureString`. O Parameter Store usa o AWS KMS keys para criptografar os valores de parâmetros `SecureString` quando você os cria ou altera. Ele também usa chaves do KMS para descriptografar os valores do parâmetro quando você os acessa. É possível usar a [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) gerenciada que o Parameter Store cria para sua conta ou especificar sua própria [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk). 

**Importante**  
O Parameter Store oferece suporte somente a [chaves do KMS simétricas](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-choose-key-spec.html#symmetric-cmks). Não é possível usar uma [chave do KMS assimétrica](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html) para criptografar os parâmetros. Para obter ajuda para determinar se uma chave do KMS é simétrica ou assimétrica, consulte [Identificar tipos de chaves diferentes](https://docs.aws.amazon.com/kms/latest/developerguide/identify-key-types.html) no *Guia do desenvolvedor do AWS Key Management Service*.

O Parameter Store oferece suporte a dois níveis de parâmetros de `SecureString`: *padrão* e *avançado*. Parâmetros padrão, que não podem exceder 4.096 bytes, são criptografados e descriptografados diretamente na chave do KMS especificada. Para criptografar e descriptografar parâmetros de `SecureString` avançados, o Parameter Store usa a criptografia de envelope com o [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/). Você pode converter um parâmetro de `SecureString` padrão para um parâmetro avançado, mas não pode converter um parâmetro avançado para um padrão. Para obter mais informações sobre a diferença entre parâmetros `SecureString` padrão e avançados, consulte [Gerenciar camadas de parâmetros](parameter-store-advanced-parameters.md).

**Topics**
+ [Proteger parâmetros SecureString padrão](#kms-encryption-securestring-standard)
+ [Proteger parâmetros SecureString avançados](#kms-encryption-securestring-advanced)
+ [Definir permissões para criptografar e descriptografar valores de parâmetro](#parameter-policy-kms-encryption)
+ [Contexto de criptografia do Parameter Store](#parameter-store-kms-encryption-context)
+ [Solucionar problemas de chaves do KMS no Parameter Store](#parameter-store-kms-cmk-troubleshooting)

## Proteger parâmetros SecureString padrão
<a name="kms-encryption-securestring-standard"></a>

O Parameter Store não executa nenhuma operação de criptografia. Em vez disso, ele se baseia no AWS KMS para criptografar e descriptografar valores de parâmetro `SecureString`. Quando você cria ou altera um valor de parâmetro `SecureString` padrão, o Parameter Store chama a operação do [Criptografar](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) do AWS KMS. Essa operação usa uma chave do KMS de criptografia simétrica diretamente para criptografar o valor do parâmetro em vez de usar a chave do KMS para gerar uma [chave de dados](https://docs.aws.amazon.com/kms/latest/developerguide/data-keys.html). 

É possível selecionar a chave do KMS que o Parameter Store usa para criptografar o valor do parâmetro. Se você não especificar uma chave do KMS, o Parameter Store usará a Chave gerenciada pela AWS criada automaticamente pelo Systems Manager na sua conta. Essa chave do KMS tem o alias `aws/ssm`.

Para visualizar a chave do KMS padrão do `aws/ssm` da sua conta, use a operação [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) na API do AWS KMS. O exemplo a seguir usa o comando `describe-key` na AWS Command Line Interface (AWS CLI) com o nome de alias `aws/ssm`.

```
aws kms describe-key \
    --key-id alias/aws/ssm
```

Para criar um parâmetro `SecureString` padrão, use a operação [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) na API do Systems Manager. Omita o parâmetro de `Tier` ou especifique um valor de `Standard`, que é o padrão. Inclua um parâmetro `Type` com um valor de `SecureString`. Para especificar uma chave do KMS, use o parâmetro `KeyId`. O padrão é a Chave gerenciada pela AWS para sua conta, `aws/ssm`. 

O Parameter Store então chama a operação `Encrypt` do AWS KMS com a chave do KMS e o valor do parâmetro em texto não criptografado. O AWS KMS retorna o valor do parâmetro criptografado, que o Parameter Store armazena com o nome do parâmetro.

O exemplo a seguir usa o comando [put-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/put-parameter.html) do Systems Manager e seu parâmetro `--type` na AWS CLI para criar um parâmetro `SecureString`. Como o comando omite os parâmetros `--tier` e `--key-id` opcionais, o Parameter Store cria um parâmetro `SecureString` padrão e o criptografa com a Chave gerenciada pela AWS.

```
aws ssm put-parameter \
    --name MyParameter \
    --value "secret_value" \
    --type SecureString
```

O exemplo semelhante a seguir usa o parâmetro `--key-id` para especificar uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk). O exemplo usa um ID de chave do KMS para identificar a chave do KMS, mas você pode usar qualquer identificador de chave do KMS válido. Como o comando omite o parâmetro `Tier` (`--tier`), o Parameter Store cria um parâmetro de `SecureString` padrão, não um avançado.

```
aws ssm put-parameter \
    --name param1 \
    --value "secret" \
    --type SecureString \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
```

Quando você obtém um parâmetro de `SecureString` do Parameter Store, seu valor é criptografado. Para obter um parâmetro, use a operação [GetParameter ](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) na API do Systems Manager.

O exemplo a seguir usa o comando [get-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) do Systems Manager na AWS CLI para obter o parâmetro `MyParameter` do Parameter Store sem descriptografar seu valor.

```
aws ssm get-parameter --name MyParameter
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg"
    }
}
```

Para descriptografar o valor de parâmetro antes de retorná-lo, defina o parâmetro `WithDecryption` de `GetParameter` como `true`. Quando você usa `WithDecryption`, o Parameter Store chama a operação [Descriptografar](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) do AWS KMS em seu nome para descriptografar o valor do parâmetro. Como resultado, a solicitação de `GetParameter` retorna o parâmetro com um valor de parâmetro de texto simples, como mostrado no exemplo a seguir.

```
aws ssm get-parameter \
    --name MyParameter \
    --with-decryption
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "secret_value"
    }
}
```

O fluxo de trabalho a seguir mostra como o Parameter Store usa uma chave do KMS para criptografar e descriptografar um parâmetro `SecureString` padrão.

### Criptografar um parâmetro padrão
<a name="kms-encryption-securestring-standard-encrypt"></a>

1. Quando você usa `PutParameter` para criar um parâmetro de `SecureString`, o Parameter Store envia uma solicitação `Encrypt` para o AWS KMS. Essa solicitação inclui o valor de parâmetro de texto sem formatação, a chave do KMS que você escolheu e o [contexto de criptografia do Parameter Store](#parameter-store-kms-encryption-context). Durante a transmissão ao AWS KMS, o valor em texto simples no parâmetro `SecureString` é protegido por Transport Layer Security (TLS).

1. O AWS KMS criptografa o valor de parâmetro com a chave do KMS especificada e o contexto de criptografia. Ele retorna o texto cifrado para o Parameter Store, que armazena o nome de parâmetro e seu valor criptografado.  
![\[Criptografar um valor de parâmetro SecureString padrão\]](http://docs.aws.amazon.com/pt_br/systems-manager/latest/userguide/images/service-pstore-standard.png)

### Descriptografar um parâmetro padrão
<a name="kms-encryption-securestring-standard-decrypt"></a>

1. Quando você inclui o parâmetro `WithDecryption` em uma solicitação `GetParameter`, o Parameter Store envia uma solicitação `Decrypt` para o AWS KMS com o valor criptografado de parâmetro de `SecureString` e o [contexto de criptografia do Parameter Store](#parameter-store-kms-encryption-context).

1. O AWS KMS usa a mesma chave do KMS e o contexto de criptografia fornecido para descriptografar o valor criptografado. Ele retorna o valor do parâmetro em texto não criptografado (descriptografado) ao Parameter Store. Durante a transmissão, os dados em texto simples são protegidos por TLS.

1. O Parameter Store retorna o valor do parâmetro em texto não criptografado na resposta de `GetParameter`.

## Proteger parâmetros SecureString avançados
<a name="kms-encryption-securestring-advanced"></a>

Quando você usa o `PutParameter` para criar um parâmetro `SecureString` avançado, o Parameter Store usa a [criptografia de envelope](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption) com o AWS Encryption SDK e uma AWS KMS key de criptografia simétrica para proteger o valor de parâmetro. Cada valor de parâmetro avançado é criptografado com uma chave de dados exclusiva, e a chave de dados é criptografada em uma chave do KMS. É possível usar a [Chave gerenciada pela AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para a conta (`aws/ssm`) ou qualquer chave gerenciada pelo cliente.

O [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/) é uma biblioteca no lado do cliente de software livre que ajuda você a criptografar e descriptografar dados usando padrões do setor e práticas recomendadas. Ele é compatível com várias plataformas e várias linguagens de programação, incluindo uma interface de linha de comando. Você pode visualizar o código-fonte e contribuir para o desenvolvimento no GitHub. 

Para cada valor de parâmetro de `SecureString`, o Parameter Store chama o AWS Encryption SDK para criptografar o valor do parâmetro usando uma chave de dados exclusiva que o AWS KMS gera ([GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)). O AWS Encryption SDK retorna para o Parameter Store uma [mensagem criptografada](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message) que inclui o valor de parâmetro criptografado e uma cópia criptografada da chave de dados exclusiva. O Parameter Store armazena toda a mensagem criptografada no valor de parâmetro de `SecureString`. Quando você obtém um parâmetro de `SecureString` avançado, Parameter Store usa o valor AWS Encryption SDK para descriptografar o valor de parâmetro. Isso requer uma chamada para o AWS KMS descriptografar a chave de dados criptografada.

Para criar um parâmetro `SecureString` avançado, use a operação [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) na API do Systems Manager. Defina o valor do parâmetro `Tier` como `Advanced`. Inclua um parâmetro `Type` com um valor de `SecureString`. Para especificar uma chave do KMS, use o parâmetro `KeyId`. O padrão é a Chave gerenciada pela AWS para sua conta, `aws/ssm`. 

```
aws ssm put-parameter \
    --name MyParameter \
    --value "secret_value" \
    --type SecureString \
    --tier Advanced
```

O exemplo semelhante a seguir usa o parâmetro `--key-id` para especificar uma [chave gerenciada pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk). O exemplo usa o Amazon Resource Name (ARN) da chave do KMS, mas você pode usar qualquer identificador válido de chave do KMS. 

```
aws ssm put-parameter \
    --name MyParameter \
    --value "secret_value" \
    --type SecureString \
    --tier Advanced \
    --key-id arn:aws:kms:us-east-2:987654321098:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

Quando você obtém um parâmetro de `SecureString` o Parameter Store, seu valor é a mensagem criptografada que o AWS Encryption SDK retornou. Para obter um parâmetro, use a operação [GetParameter ](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) na API do Systems Manager.

O exemplo a seguir usa a operação `GetParameter` do Systems Manager para obter o parâmetro `MyParameter` do Parameter Store sem descriptografar seu valor.

```
aws ssm get-parameter --name MyParameter
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg"
    }
}
```

Para descriptografar o valor de parâmetro antes de retorná-lo, defina o parâmetro `WithDecryption` de `GetParameter` como `true`. Quando você usa `WithDecryption`, o Parameter Store chama a operação [Descriptografar](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) do AWS KMS em seu nome para descriptografar o valor do parâmetro. Como resultado, a solicitação de `GetParameter` retorna o parâmetro com um valor de parâmetro de texto simples, como mostrado no exemplo a seguir.

```
aws ssm get-parameter \
    --name MyParameter \
    --with-decryption
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "secret_value"
    }
}
```

Você não pode converter um parâmetro de `SecureString` avançado para um padrão, mas pode converter um `SecureString` padrão para um avançado. Para converter um parâmetro de `SecureString` padrão para um de `SecureString` avançado, use a operação `PutParameter` com o parâmetro `Overwrite`. O `Type` deve ser `SecureString`, e o valor `Tier` deve ser `Advanced`. O parâmetro `KeyId`, que identifica uma chave gerenciada pelo cliente, é opcional. Se você o omitir, o Parameter Store usará a Chave gerenciada pela AWS para a conta. É possível especificar qualquer chave do KMS que a entidade principal tenha permissão para usar, mesmo se você tiver usado uma chave do KMS diferente para criptografar o parâmetro padrão.

Quando você usa o parâmetro `Overwrite`, o Parameter Store usa o AWS Encryption SDK para criptografar o valor de parâmetro. Ele armazena a mensagem recém-criptografada no Parameter Store.

```
aws ssm put-parameter \
    --name myStdParameter \
    --value "secret_value"  \
    --type SecureString \
    --tier Advanced \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --overwrite
```

O fluxo de trabalho a seguir mostra como o Parameter Store usa uma chave do KMS para criptografar e descriptografar um parâmetro `SecureString` avançado.

### Criptografar um parâmetro avançado
<a name="kms-encryption-securestring-advanced-encrypt"></a>

1. Quando o `PutParameter` é usado para criar um parâmetro `SecureString` avançado, o Parameter Store usa o AWS Encryption SDK e o AWS KMS para criptografar o valor do parâmetro. O Parameter Store chama o AWS Encryption SDK com o valor do parâmetro, a chave do KMS especificada e o [contexto de criptografia do Parameter Store](#parameter-store-kms-encryption-context).

1. O AWS Encryption SDK envia uma solicitação [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) ao AWS KMS com o identificador da chave do KMS especificada e o contexto de criptografia do Parameter Store. O AWS KMS retorna duas cópias da chave de dados exclusiva: uma em texto simples e uma criptografada na chave do KMS. (O contexto de criptografia é usado ao criptografar a chave de dados.)

1. O AWS Encryption SDK usa a chave de dados em texto simples para criptografar valor de parâmetro. Ele retorna uma [mensagem criptografada](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message) que inclui o valor de parâmetro criptografado, a chave de dados criptografada e outros dados, incluindo o contexto criptografia do Parameter Store.

1. O Parameter Store armazena a mensagem criptografada como valor de parâmetro.  
![\[Criptografar o valor de um parâmetro SecureString avançado\]](http://docs.aws.amazon.com/pt_br/systems-manager/latest/userguide/images/service-pstore-advanced.png)

### Descriptografar um parâmetro avançado
<a name="kms-encryption-securestring-advanced-decrypt"></a>

1. Você pode incluir o parâmetro `WithDecryption` em uma solicitação `GetParameter` para obter um parâmetro de `SecureString` avançado. Quando você fizer isso, o Parameter Store repassará a [mensagem criptografada](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message) do valor de parâmetro para um método de descriptografia do AWS Encryption SDK.

1. O AWS Encryption SDK chama a operação do AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html). Ele repassa a chave de dados criptografada e o contexto de criptografia do Parameter Store da mensagem criptografada.

1. O AWS KMS usa a chave do KMS e o contexto de criptografia do Parameter Store para descriptografar a chave de dados criptografada. Ele retorna a chave de dados de texto simples (descriptografada) ao AWS Encryption SDK.

1. O AWS Encryption SDK usa a chave de dados de texto simples para descriptografar o valor de parâmetro. Ele retorna o valor de parâmetro de texto simples ao Parameter Store. 

1. O Parameter Store verifica o contexto de criptografia e retorna a você o valor de parâmetro de texto simples na resposta `GetParameter`.

## Definir permissões para criptografar e descriptografar valores de parâmetro
<a name="parameter-policy-kms-encryption"></a>

Para criptografar um valor de parâmetro de `SecureString` padrão, o usuário precisa da permissão `kms:Encrypt`. Para criptografar um valor de parâmetro de `SecureString` avançado, o usuário precisa da permissão `kms:GenerateDataKey`. Para descriptografar qualquer tipo de valor de parâmetro de `SecureString`, o usuário precisa da permissão `kms:Decrypt`. 

É possível usar políticas do AWS Identity and Access Management (IAM) para permitir ou negar permissão para um usuário chamar as operações `PutParameter` e `GetParameter` do Systems Manager.

Além disso, se estiver usando chaves gerenciadas pelo cliente para criptografar seus valores de parâmetros `SecureString`, você poderá usar políticas do IAM e políticas de chaves para gerenciar permissões de criptografia e descriptografia. No entanto, você não pode estabelecer políticas de controle de acesso para a chave do KMS `aws/ssm` padrão. Para obter informações sobre como controlar o acesso a chaves gerenciadas pelo cliente, consulte [Acesso e permissões de chaves do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html) no *Guia do desenvolvedor do AWS Key Management Service*.

O exemplo a seguir mostra uma política do IAM criada para parâmetros `SecureString` padrão. Ela permite que o usuário chame a operação `PutParameter` do Systems Manager em todos os parâmetros no caminho `FinancialParameters`. A política também permite que o usuário chame a operação do AWS KMS `Encrypt` em um exemplo de chave gerenciada pelo cliente.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/FinancialParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}
```

------

O exemplo seguinte mostra uma política do IAM criada para parâmetros `SecureString` avançados. Ela permite que o usuário chame a operação `PutParameter` do Systems Manager em todos os parâmetros no caminho `ReservedParameters`. A política também permite que o usuário chame a operação do AWS KMS `GenerateDataKey` em um exemplo de chave gerenciada pelo cliente.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/ReservedParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ]
}
```

------

O último exemplo também mostra uma política do IAM que pode ser usada para parâmetros de `SecureString` padrão ou avançados. Ela permite que o usuário chame as operações `GetParameter` do Systems Manager (e operações relacionadas) em todos os parâmetros no caminho de `ITParameters`. A política também permite que o usuário chame a operação do AWS KMS `Decrypt` em um exemplo de chave gerenciada pelo cliente.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/ITParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}
```

------

## Contexto de criptografia do Parameter Store
<a name="parameter-store-kms-encryption-context"></a>

Um *contexto de criptografia* é um conjunto de pares de chave-valor que contêm dados arbitrários não secretos. Quando você inclui um contexto de criptografia em uma solicitação para criptografar dados, o AWS KMS vincula de forma criptográfica o contexto de criptografia aos dados criptografados. Para descriptografar os dados, você deve passar o mesmo contexto de criptografia. 

Você também pode usar o contexto de criptografia para identificar uma operação de criptografia em registros de auditoria e logs. O contexto de criptografia aparece em texto simples em logs, como logs do [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html). 

O AWS Encryption SDK também obtém um contexto de criptografia, embora ele lide com ele de forma diferente. O Parameter Store fornece o contexto de criptografia para o método de criptografia. O AWS Encryption SDK vincula forma criptográfica o contexto de criptografia aos dados criptografados. Isso inclui o contexto de criptografia em texto simples no cabeçalho da mensagem criptografada retornada por ele. No entanto, ao contrário do AWS KMS, os métodos de descriptografia do AWS Encryption SDK não têm um contexto de criptografia como entrada. Em vez disso, ao descriptografar dados, o AWS Encryption SDK obtém o contexto de criptografia na mensagem criptografada. O Parameter Store verifica se o contexto de criptografia inclui o valor que ele espera antes de retornar o valor de parâmetro de texto simples para você. 

O Parameter Store usa o seguinte contexto de criptografia em suas operações de criptografia:
+ Chave: `PARAMETER_ARN`
+ Valor: O Amazon Resource Name (ARN) do parâmetro que está sendo criptografado. 

O formato do contexto de criptografia é o seguinte:

```
"PARAMETER_ARN":"arn:aws:ssm:region-id:account-id:parameter/parameter-name"
```

Por exemplo, o Parameter Store inclui esse contexto de criptografia em chamadas para criptografar e descriptografar o parâmetro `MyParameter` em um exemplo de região e Conta da AWS.

```
"PARAMETER_ARN":"arn:aws:ssm:us-east-2:111122223333:parameter/MyParameter"
```

Se o parâmetro estiver em um caminho hierárquico do Parameter Store, o caminho e o nome serão incluídos no contexto de criptografia. Por exemplo, esse contexto de criptografia é usado ao criptografar ou descriptografar o parâmetro `MyParameter` no caminho `/ReadableParameters` em um exemplo de Conta da AWS e região.

```
"PARAMETER_ARN":"arn:aws:ssm:us-east-2:111122223333:parameter/ReadableParameters/MyParameter"
```

Você pode descriptografar um valor de parâmetro `SecureString` criptografado chamando a operação do AWS KMS `Decrypt` com o contexto de criptografia correto e o valor de parâmetro criptografado retornado pela operação `GetParameter` do Systems Manager. No entanto, recomendamos que você descriptografe valores de parâmetro do Parameter Store usando a operação `GetParameter` com o parâmetro `WithDecryption`. 

Você também pode incluir o contexto de criptografia em uma política do IAM. Por exemplo, você pode permitir que um usuário descriptografe apenas determinado valor de parâmetro ou conjunto de valores de parâmetro.

O exemplo a seguir de declaração de política do IAM permite que o usuário obtenha o valor do parâmetro `MyParameter` e descriptografe o valor usando a chave do KMS especificada. No entanto, as permissões são aplicáveis somente quando o contexto de criptografia corresponde à string especificada. Essas permissões não são aplicáveis a nenhum outro parâmetro ou chave do KMS, e ocorrerá falha na chamada para `GetParameter` se o contexto de criptografia não corresponder à string.

Antes de usar uma declaração de política como essa, substitua os *ARNs de exemplo* por valores válidos.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/MyParameter"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:PARAMETER_ARN":"arn:aws:ssm:us-east-1:111122223333:parameter/MyParameter"
                }
            }
        }
    ]
}
```

------

## Solucionar problemas de chaves do KMS no Parameter Store
<a name="parameter-store-kms-cmk-troubleshooting"></a>

Para executar qualquer operação em um parâmetro `SecureString`, o Parameter Store deve ser capaz de usar a chave do AWS KMS que você especificou para a operação desejada. A maioria das falhas do Parameter Store relacionadas a chaves do KMS é causada pelos seguintes problemas:
+ As credenciais que uma aplicação está usando não têm permissão para executar a ação especificada na chave do KMS. 

  Para corrigir este erro, execute a aplicação com credenciais diferentes ou revise a política da IAM ou de chaves que está impedindo a operação. Para obter ajuda com o IAM e as políticas de chave do AWS KMS, consulte [Acesso e permissões de chave do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html) no *Guia do desenvolvedor do AWS Key Management Service*.
+ A chave do KMS não foi encontrada. 

  Isso geralmente acontece quando você usa um identificador incorreto para a chave do KMS. [Encontre os identificadores corretos](https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html) para a chave do KMS e tente o comando novamente. 
+ A chave do KMS não está habilitada. Quando isso ocorre, o Parameter Store retorna uma exceção InvalidKeyId com uma mensagem de erro detalhada do AWS KMS. Se o estado da chave do KMS for `Disabled`, [habilite-a](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html). Se for `Pending Import`, conclua o [procedimento de importação](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html). Se o estado da chave for `Pending Deletion`, [cancele a exclusão da chave](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-scheduling-key-deletion.html) ou use uma chave do KMS diferente.

  Para encontrar o [estado de chave](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html) de uma chave do KMS, use a operação [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html). 