

# Alterar uma política do AWS KMS para o Insights de Performance
<a name="USER_PerfInsights.access-control.cmk-policy"></a>

O Performance Insights usa uma AWS KMS key para criptografar dados sigilosos. Ao habilitar o Performance Insights por meio da API ou do console, você poderá seguir um destes procedimentos:
+ Escolha o padrão Chave gerenciada pela AWS.

  O Amazon RDS usa a Chave gerenciada pela AWS para a sua nova instância de banco de dados. O Amazon RDS cria uma Chave gerenciada pela AWS para a sua Conta da AWS. A sua Conta da AWS tem uma Chave gerenciada pela AWS diferente para o Amazon RDS para cada Região da AWS.
+ Escolha uma chave gerenciada pelo cliente.

  Se você especificar uma chave gerenciada pelo cliente, os usuários em sua conta que chamam a API do Performance Insights precisarão das permissões `kms:Decrypt` e `kms:GenerateDataKey` na chave do KMS. É possível configurar essas permissões por meio de políticas do IAM. No entanto, recomendamos que você gerencie essas permissões por meio da política de chaves do KMS. Para saber mais, consulte [Políticas de chaves no AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) no *Guia do desenvolvedor do AWS Key Management Service*. 

**Example**  
O exemplo a seguir mostra como adicionar instruções à sua política da chaves do KMS. Essas instruções permitem acesso ao Performance Insights. Dependendo de como você usa a chave KMS, talvez você queira alterar algumas restrições. Antes de adicionar instruções à política, remova todos os comentários.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id" : "your-policy",
    "Statement" : [ 
        {
            "Sid" : "AllowViewingRDSPerformanceInsights",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/Role1"
                ]
                },
             "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
                ],
            "Resource": "*",
            "Condition" : {
            "StringEquals" : {
                "kms:ViaService" : "rds.us-east-1.amazonaws.com"
                },
            "ForAnyValue:StringEquals": {
                "kms:EncryptionContext:aws:pi:service": "rds",
                "kms:EncryptionContext:service": "pi",
                "kms:EncryptionContext:aws:rds:db-id": "db-AAAAABBBBBCCCCDDDDDEEEEE"
                }
            }
        }
    ]
}
```

## Como o Insights de Performance usa a chave do AWS KMS gerenciada pelo cliente
<a name="USER_PerfInsights.access-control.PI-using-KMS-cmk-policy"></a>

O Insights de Performance usa chaves gerenciadas pelo cliente para criptografar dados sigilosos. Ao ativar o Insights de Performance, você pode fornecer uma chave do AWS KMS por meio da API. O Insights de Performance cria permissões do AWS KMS nessa chave. Ele usa a chave e executa as operações necessárias para processar dados sigilosos. Os dados sigilosos incluem campos como usuário, banco de dados, aplicação e texto de consulta SQL. O Insights de Performance garante que os dados permaneçam criptografados tanto em repouso quanto em trânsito.

## Como o Insights de Performance e o IAM funcionam com o AWS KMS
<a name="USER_PerfInsights.access-control.PI-work-with-kms"></a>

O IAM concede permissões para APIs específicas. O Insights de Performance tem as seguintes APIs públicas, que você pode restringir usando políticas do IAM:
+ `DescribeDimensionKeys`
+ `GetDimensionKeyDetails`
+ `GetResourceMetadata`
+ `GetResourceMetrics`
+ `ListAvailableResourceDimensions`
+ `ListAvailableResourceMetrics`

Você pode usar as solicitações de API a seguir para obter dados sigilosos.
+ `DescribeDimensionKeys`
+ `GetDimensionKeyDetails`
+ `GetResourceMetrics`

Quando você usa a API para obter dados sigilosos, o Insights de Performance utiliza as credenciais do chamador. Essa verificação garante que o acesso a dados sigilosos seja limitado àqueles com acesso à chave do KMS.

Ao chamar essas APIs, você precisa de permissões para chamar a API por meio da política do IAM e de permissões para invocar a ação `kms:decrypt` por meio da política de chave AWS KMS.

A API `GetResourceMetrics` pode retornar dados sigilosos e não sigilosos. Os parâmetros da solicitação determinam se a resposta deve incluir dados sigilosos. A API retorna dados sigilosos quando a solicitação inclui uma dimensão confidencial nos parâmetros filtrar ou agrupar por. 

Para obter mais informações sobre as dimensões que você pode usar com a API `GetResourceMetrics`, consulte [DimensionGroup](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_DimensionGroup.html).

**Example Exemplos**  
O seguinte exemplo solicita dados sigilosos para o grupo `db.user`:  

```
POST / HTTP/1.1
Host: <Hostname>
Accept-Encoding: identity
X-Amz-Target: PerformanceInsightsv20180227.GetResourceMetrics
Content-Type: application/x-amz-json-1.1
User-Agent: <UserAgentString>
X-Amz-Date: <Date> 
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
Content-Length: <PayloadSizeBytes>
{
  "ServiceType": "RDS",
  "Identifier": "db-ABC1DEFGHIJKL2MNOPQRSTUV3W",
  "MetricQueries": [
    {
      "Metric": "db.load.avg",
      "GroupBy": {
        "Group": "db.user",
        "Limit": 2
      }
    }
  ],
  "StartTime": 1693872000,
  "EndTime": 1694044800,
  "PeriodInSeconds": 86400
}
```

**Example**  
O seguinte exemplo solicita dados não sigilosos para o grupo `db.load.avg`:  

```
POST / HTTP/1.1
Host: <Hostname>
Accept-Encoding: identity
X-Amz-Target: PerformanceInsightsv20180227.GetResourceMetrics
Content-Type: application/x-amz-json-1.1
User-Agent: <UserAgentString>
X-Amz-Date: <Date> 
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
Content-Length: <PayloadSizeBytes>
{
    "ServiceType": "RDS",
    "Identifier": "db-ABC1DEFGHIJKL2MNOPQRSTUV3W",
    "MetricQueries": [
        {
            "Metric": "db.load.avg"
        }
    ],
    "StartTime": 1693872000,
    "EndTime": 1694044800,
    "PeriodInSeconds": 86400
}
```