View a markdown version of this page

更改数据库洞察的 AWS KMS 策略 - Amazon Relational Database Service

更改数据库洞察的 AWS KMS 策略

数据库洞察使用 AWS KMS key 加密敏感数据。通过 API 或控制台启用数据库洞察时,您可以执行以下任一操作:

  • 选择默认 AWS 托管式密钥。

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

  • 选择客户托管密钥。

    如果您指定客户自主管理型密钥,则您账户中调用数据库洞察 API 的用户需要对 KMS 密钥具有 kms:Decrypt 和 kms:GenerateDataKey 权限。您可以通过 IAM policy 配置这些权限。但是,我们建议您通过 KMS 密钥策略来管理这些权限。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的在 AWS KMS 中使用密钥策略。

例

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

JSON
{ "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 客户自主管理型密钥

数据库洞察使用客户自主管理型密钥加密敏感数据。当您开启数据库洞察时,可以通过 API 提供 AWS KMS 密钥。数据库洞察对此密钥创建 AWS KMS 权限。它使用密钥并执行必要的操作来处理敏感数据。敏感数据包括用户、数据库、应用程序和 SQL 查询文本等字段。数据库洞察可确保数据在静态和传输过程中保持加密状态。

数据库洞察 IAM 如何与 AWS KMS 配合使用

IAM 提供针对特定 API 的权限。数据库洞察具有以下公有 API,您可以使用 IAM 策略对其进行限制:

  • 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。

例示例

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

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