

# 성능 개선 도우미를 위한 AWS KMS 정책 변경
<a name="USER_PerfInsights.access-control.cmk-policy"></a>

성능 개선 도우미는 AWS KMS key을(를) 사용하여 민감한 데이터를 암호화합니다. API 또는 콘솔을 통해 성능 개선 도우미를 활성화하면 다음 중 한 가지를 수행할 수 있습니다.
+ 기본 AWS 관리형 키를 선택합니다.

  Amazon RDS는 새 DB 인스턴스에 대해 AWS 관리형 키을(를) 사용합니다. Amazon RDS는 AWS 계정에 대해 AWS 관리형 키를 생성합니다. AWS 계정에 각 AWS 리전의 Amazon RDS에 대해 각기 다른 AWS 관리형 키가 있습니다.
+ 고객 관리형 키를 선택합니다.

  고객 관리형 키를 지정하는 경우 성능 개선 도우미 API를 호출하는 계정의 사용자는 KMS 키에 대한 `kms:Decrypt` 및 `kms:GenerateDataKey` 권한이 필요합니다. IAM 정책을 통해 이러한 권한을 구성할 수 있습니다. 그러나 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"
                }
            }
        }
    ]
}
```

## 성능 개선 도우미에서 AWS KMS 고객 관리형 키를 사용하는 방법
<a name="USER_PerfInsights.access-control.PI-using-KMS-cmk-policy"></a>

성능 개선 도우미는 고객 관리형 키를 사용하여 민감한 데이터를 암호화합니다. 성능 개선 도우미를 켜면 API를 통해 AWS KMS 키를 입력할 수 있습니다. Performance Insights는 이 키에 대한 KMS 권한을 생성합니다. 여기서는 키를 사용하고 민감한 데이터를 처리하는 데 필요한 작업을 수행합니다. 민감한 데이터에는 사용자, 데이터베이스, 애플리케이션, SQL 쿼리 텍스트 등의 필드가 포함됩니다. 성능 개선 도우미는 저장된 데이터와 전송 중인 데이터 모두에서 데이터가 암호화된 상태로 유지되도록 합니다.

## 성능 개선 도우미 IAM가 AWS KMS와 작동하는 방식
<a name="USER_PerfInsights.access-control.PI-work-with-kms"></a>

IAM은 특정 API에 권한을 부여합니다. 성능 개선 도우미에는 IAM 정책을 사용하여 제한할 수 있는 다음과 같은 공개 API가 포함됩니다.
+ `DescribeDimensionKeys`
+ `GetDimensionKeyDetails`
+ `GetResourceMetadata`
+ `GetResourceMetrics`
+ `ListAvailableResourceDimensions`
+ `ListAvailableResourceMetrics`

다음 API 요청을 사용하여 민감한 데이터를 가져올 수 있습니다.
+ `DescribeDimensionKeys`
+ `GetDimensionKeyDetails`
+ `GetResourceMetrics`

API를 사용하여 민감한 데이터를 가져오는 경우 성능 개선 도우미는 호출자의 보안 인증 정보를 활용합니다. 이 확인을 통해 민감한 데이터에 대한 액세스가 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
}
```