

# 更改性能详情的 AWS KMS 策略
<a name="USER_PerfInsights.access-control.cmk-policy"></a>

Performance Insights 使用 AWS KMS key 加密敏感数据。通过 API 或控制台启用 Performance Insights 时，您可以执行以下任一操作：
+ 选择默认 AWS 托管式密钥。

  Amazon RDS 为新的数据库实例使用 AWS 托管式密钥。Amazon RDS 将为您的 AWS 账户创建 AWS 托管式密钥。您的 AWS 账户在每个 AWS 区域都有用于 Amazon RDS 的不同 AWS 托管式密钥。
+ 选择客户托管密钥。

  如果您指定一个客户托管密钥，则您账户中调用 Performance Insights API 的用户需要在 KMS 密钥具有 `kms:Decrypt` 和 `kms:GenerateDataKey` 权限。您可以通过 IAM policy 配置这些权限。但是，我们建议您通过 KMS 密钥策略来管理这些权限。有关更多信息，请参阅《*AWS Key Management Service 开发人员指南*》中的[在 AWS KMS 中使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

**Example**  
以下示例显示了如何将语句添加到 KMS 密钥策略。这些语句可以访问 Performance Insights。您可能需要更改一些限制，这取决于您使用 KMS 密钥的方式。在将语句添加到您的策略之前，请删除所有注释。    
****  

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

## Performance Insights 如何使用 AWS KMS 客户托管密钥
<a name="USER_PerfInsights.access-control.PI-using-KMS-cmk-policy"></a>

Performance Insights 使用客户托管密钥加密敏感数据。当您开启 Performance Insights 时，可以通过 API 提供 AWS KMS 密钥。性能详情对此密钥创建 AWS KMS 权限。它使用密钥并执行必要的操作来处理敏感数据。敏感数据包括用户、数据库、应用程序和 SQL 查询文本等字段。Performance Insights 可确保数据在静态和动态时都保持加密状态。

## Performance Insights IAM 如何使用 AWS KMS
<a name="USER_PerfInsights.access-control.PI-work-with-kms"></a>

IAM 提供针对特定 API 的权限。Performance Insights 具有以下公有 API，您可以使用 IAM 策略对其进行限制：
+ `DescribeDimensionKeys`
+ `GetDimensionKeyDetails`
+ `GetResourceMetadata`
+ `GetResourceMetrics`
+ `ListAvailableResourceDimensions`
+ `ListAvailableResourceMetrics`

您可以使用以下 API 请求来获取敏感数据。
+ `DescribeDimensionKeys`
+ `GetDimensionKeyDetails`
+ `GetResourceMetrics`

当您使用 API 获取敏感数据时，Performance Insights 会利用调用方的凭证。此检查可确保敏感数据的访问权限仅限于有权访问 KMS 密钥的用户。

调用这些 API 时，您需要通过 IAM 策略调用 API 的权限，以及通过 AWS KMS 密钥策略调用 `kms:decrypt` 操作的权限。

`GetResourceMetrics` API 可以返回敏感和非敏感数据。请求参数决定响应是否应包含敏感数据。当请求的筛选条件或分组依据参数中包含敏感维度时，API 会返回敏感数据。

有关可以与 `GetResourceMetrics` API 一起使用的维度的更多信息，请参阅 [DimensionGroup](https://docs.aws.amazon.com/performance-insights/latest/APIReference/API_DimensionGroup.html)。

**Example 示例**  
以下示例请求 `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**  
以下示例请求 `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
}
```