静态加密 - Amazon Managed Service for Prometheus

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

静态加密

默认情况下,适用于 Prometheus 的亚马逊托管服务会自动为您提供静态加密,并使用自有的加密密钥执行此操作。 AWS

  • AWS 自有密钥 — Amazon Prometheus 托管服务使用这些密钥自动加密上传到您的工作空间的数据。您无法查看、管理或使用 AWS 自有密钥,也无法审核其使用情况。但是,无需采取任何措施或更改任何计划即可保护用于加密数据的密钥。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS 自有密钥

静态数据加密有助于减少保护敏感客户数据(例如个人身份信息)所需的运维开销和复杂性。其支持构建符合严格加密合规性和监管要求的安全应用程序。

您也可以选择在创建工作区时使用客户托管密钥:

  • 客户托管密钥:Amazon Managed Service for Prometheus 支持使用您创建、拥有和管理的对称客户托管密钥,来加密工作区中的数据。由于您可以完全控制此加密,因此可以执行以下任务:

    • 制定和维护关键策略

    • 建立和维护 IAM 策略和授权

    • 启用和禁用密钥策略

    • 轮换加密材料

    • 添加标签

    • 创建密钥别名

    • 安排密钥删除

    有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的客户托管密钥

谨慎选择是使用客户托管密钥还是 AWS 自有密钥。使用客户托管密钥创建的工作区以后无法转换为使用 AWS 自有密钥(反之亦然)。

注意

Amazon Prometheus 托管服务 AWS 使用自有密钥自动启用静态加密,从而免费保护您的数据。

但是,使用客户管理的密钥需要 AWS KMS 付费。有关定价的更多信息,请参阅 AWS Key Management Service 定价

有关的更多信息 AWS KMS,请参阅什么是 AWS Key Management Service?

注意

使用客户托管密钥创建的工作区不能使用 AWS 托管收集器进行摄取。

适用于 Prometheus 的亚马逊托管服务如何使用补助金 AWS KMS

Amazon Managed Service for Prometheus 需要三种授权才能使用客户托管密钥。

当您创建使用客户托管密钥加密的 Amazon Prometheus 托管服务工作空间时,适用于 Prometheus 的亚马逊托管服务通过向发送请求来代表您创建三项授权。CreateGrant AWS KMS中的授权 AWS KMS 用于授予适用于 Prometheus 的亚马逊托管服务访问您账户中的 KMS 密钥的权限,即使不是直接代表您调用(例如,存储从 Amazon EKS 集群中抓取的指标数据时)。

Amazon Managed Service for Prometheus 需要授权,才能将客户托管密钥用于以下内部操作:

  • 向发送DescribeKey请求, AWS KMS 以验证创建工作空间时给出的对称客户托管 KMS 密钥是否有效。

  • 向发送GenerateDataKey请求 AWS KMS 以生成由您的客户托管密钥加密的数据密钥。

  • 向发送解密请求 AWS KMS 以解密加密的数据密钥,以便它们可用于加密您的数据。

适用于 Prometheus 的亚马逊托管服务为 AWS KMS 密钥创建了三项授权,允许适用于 Prometheus 的亚马逊托管服务代表您使用密钥。您可以通过更改密钥策略、禁用密钥或撤消授权来删除对密钥的访问权限。在执行这些操作之前,您应该了解这些操作的后果。这可能会导致工作区中的数据丢失。

如果您以任何方式删除对任何授权的访问权限,则 Amazon Managed Service for Prometheus 将无法访问由客户托管密钥加密的任何数据,也无法存储发送到工作区的新数据,这会影响依赖于该数据的操作。发送到工作区的新数据将无法访问,并且可能会永久丢失。

警告
  • 如果您禁用密钥,或者在密钥策略中删除了 Amazon Managed Service for Prometheus 访问权限,则无法再访问工作区数据。发送到工作区的新数据将无法访问,并且可能会永久丢失。

    通过还原对密钥的 Amazon Managed Service for Prometheus 访问权限,您可以访问工作区数据并重新开始接收新数据。

  • 如果您撤销 授权,则无法重新创建该授权,并且工作区中的数据将永久丢失。

步骤 1:创建客户托管式密钥

您可以使用 AWS Management Console、或,创建对称的客户托管密钥。 AWS KMS APIs只要您通过策略提供正确的访问权限,密钥就不必与 Amazon Managed Service for Prometheus 工作区位于同一个账户中,如下所述。

创建对称的客户托管密钥

按照《AWS Key Management Service 开发人员指南》中创建对称的客户托管密钥的步骤进行操作。

密钥策略

密钥策略控制对客户自主管理型密钥的访问。每个客户托管式密钥必须只有一个密钥策略,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥策略。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的管理对客户托管密钥的访问

要将您的客户托管密钥用于 Amazon Managed Service for Prometheus 工作区,密钥政策中必须支持以下 API 操作:

  • kms:CreateGrant – 向客户托管密钥添加授权。授予对指定 KMS 密钥的控制访问权限,这允许访问 Amazon Managed Service for Prometheus 要求的授权操作。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的使用授权

    这允许 Amazon Managed Service for Prometheus 执行以下操作:

    • 调用 GenerateDataKey 生成加密的数据密钥并将其存储,因为数据密钥不会立即用于加密。

    • 调用 Decrypt 使用存储的加密数据密钥访问加密数据。

  • kms:DescribeKey:提供客户托管密钥详细信息以允许 Amazon Managed Service for Prometheus 验证密钥。

以下是您可以为 Amazon Managed Service for Prometheus 添加的策略语句示例:

"Statement" : [ { "Sid" : "Allow access to Amazon Managed Service for Prometheus principal within your account", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:DescribeKey", "kms:CreateGrant", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "aps.region.amazonaws.com", "kms:CallerAccount" : "111122223333" } }, { "Sid": "Allow access for key administrators - not required for Amazon Managed Service for Prometheus", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:*" ], "Resource": "arn:aws:kms:region:111122223333:key/key_ID" }, <other statements needed for other non-Amazon Managed Service for Prometheus scenarios> ]

步骤 2:为 Amazon Managed Service for Prometheus 指定客户自主管理型密钥

创建工作区时,您可以通过输入 KMS 密钥 ARN 来指定客户托管密钥,Amazon Managed Service for Prometheus 使用该密钥来加密工作区存储的数据。

步骤 3:从其他服务(如 Amazon Managed Grafana)访问数据

此步骤是可选的 – 只有当您需要从其他服务访问 Amazon Managed Service for Prometheus 数据时才需要此步骤。

除非其他服务也有使用密 AWS KMS 钥的权限,否则无法从其他服务访问您的加密数据。例如,如果要使用 Amazon Managed Grafana 根据数据创建控制面板或警报,则必须授予 Amazon Managed Grafana 访问密钥的权限。

让 Amazon Managed Grafana 可以访问客户自主管理型密钥
  1. Amazon Managed Grafana 工作区列表中,选择要能够访问 Amazon Managed Service for Prometheus 的工作区的名称。这将显示有关 Amazon Managed Grafana 工作区的摘要信息。

  2. 记下您的工作区使用的 IAM 角色的名称。名称的格式为 AmazonGrafanaServiceRole-<unique-id>。控制台会显示该角色的完整 ARN。您将在后面的步骤中在 AWS KMS 控制台中指定此名称。

  3. AWS KMS 客户自主管理型密钥列表中,选择您在创建 Amazon Managed Service for Prometheus 工作区时使用的客户自主管理型密钥。这将打开密钥配置详细信息页面。

  4. 密钥用户旁边,选择添加按钮。

  5. 从名称列表中选择上面提到的 Amazon Managed Grafana IAM 角色。为了方便查找,您还可以按名称进行搜索。

  6. 选择添加将 IAM 角色添加到密钥用户列表中。

您的 Amazon Managed Grafana 工作区现在可以访问 Amazon Managed Service for Prometheus 工作区中的数据。您可以在密钥用户中添加其他用户或角色,使其他服务也能访问您的工作区。

Amazon Managed Service for Prometheus 加密上下文

加密上下文是一组可选的键值对,包含有关数据的其他上下文信息。

AWS KMS 使用加密上下文作为其他经过身份验证的数据来支持经过身份验证的加密。当您在加密数据的请求中包含加密上下文时,会将加密上下文 AWS KMS 绑定到加密数据。要解密数据,您必须在请求中包含相同的加密上下文。

Amazon Managed Service for Prometheus 加密上下文

适用于 Prometheus 的亚马逊托管服务在 AWS KMS 所有加密操作中使用相同的加密环境,其中密钥aws:amp:arn为,值为工作空间的亚马逊资源名称 (ARN)。

"encryptionContext": { "aws:aps:arn": "arn:aws:aps:us-west-2:111122223333:workspace/ws-sample-1234-abcd-56ef-7890abcd12ef" }

使用加密上下文进行监控

使用对称的客户托管密钥来加密您的工作区数据时,您还可以使用审计记录和日志中的加密上下文来识别客户托管密钥的使用情况。加密上下文还会显示在AWS CloudTrail 或 Amazon Logs 生成的 CloudWatch 日志中。

使用加密上下文控制对客户托管式密钥的访问

您可以使用密钥策略和 IAM 策略中的加密上下文作为 conditions 来控制对您的对称客户托管密钥的访问。您还可以在授权中使用加密上下文约束。

Amazon Managed Service for Prometheus 在授权中使用加密上下文约束来控制对您账户或区域中客户托管密钥的访问。授权约束要求授权允许的操作使用指定的加密上下文。

以下是密钥策略语句示例,用于授予对特定加密上下文的客户托管密钥的访问权限。此策略语句中的条件要求授权具有指定加密上下文的加密上下文约束。

{ "Sid": "Enable DescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:DescribeKey", "Resource": "*" }, { "Sid": "Enable CreateGrant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:aps:arn": "arn:aws:aps:us-west-2:111122223333:workspace/ws-sample-1234-abcd-56ef-7890abcd12ef" } } }

监控 Amazon Managed Service for Prometheus 的加密密钥

当您在适用于 Prometheus 工作空间的亚马逊托管服务中使用 AWS KMS 客户托管密钥时,您可以使用AWS CloudTrail或 Amazon L CloudWatch ogs 来跟踪亚马逊 Prometheus 托管服务向其发送的请求。 AWS KMS

以下示例是CreateGrantGenerateDataKey、和DescribeKey监控 KMS 操作 AWS CloudTrail 的事件Decrypt,这些操作由亚马逊托管服务调用,让 Prometheus 访问由您的客户托管密钥加密的数据:

CreateGrant

当您使用 AWS KMS 客户托管密钥加密工作空间时,适用于 Prometheus 的亚马逊托管服务会代表您发送CreateGrant三个访问您指定的 KMS 密钥的请求。Amazon Managed Service for Prometheus 创建的授权特定于与 AWS KMS 客户托管密钥关联的资源。

以下示例事件记录了 CreateGrant 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "TESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "EXAMPLE-KEY-ID1", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "TESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-22T17:02:00Z" } }, "invokedBy": "aps.amazonaws.com" }, "eventTime": "2021-04-22T17:07:02Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "retiringPrincipal": "aps.region.amazonaws.com", "operations": [ "GenerateDataKey", "Decrypt", "DescribeKey" ], "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE", "granteePrincipal": "aps.region.amazonaws.com" }, "responseElements": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE" }, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }
GenerateDataKey

当您为工作空间启用 AWS KMS 客户托管密钥时,适用于 Prometheus 的亚马逊托管服务会创建一个唯一的密钥。它向发送GenerateDataKey请求 AWS KMS ,指定资源的 AWS KMS客户托管密钥。

以下示例事件记录了 GenerateDataKey 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "aps.amazonaws.com" }, "eventTime": "2021-04-22T17:07:02Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:aps:arn": "arn:aws:aps:us-west-2:111122223333:workspace/ws-sample-1234-abcd-56ef-7890abcd12ef" }, "keySpec": "AES_256", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333", "sharedEventID": "57f5dbee-16da-413e-979f-2c4c6663475e" }
Decrypt

在加密工作区上生成查询时,Amazon Managed Service for Prometheus 会调用 Decrypt 操作,以使用存储的加密数据密钥来访问加密数据。

以下示例事件记录了 Decrypt 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "aps.amazonaws.com" }, "eventTime": "2021-04-22T17:10:51Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "encryptionContext": { "aws:aps:arn": "arn:aws:aps:us-west-2:111122223333:workspace/ws-sample-1234-abcd-56ef-7890abcd12ef" }, "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE", "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333", "sharedEventID": "dc129381-1d94-49bd-b522-f56a3482d088" }
DescribeKey

Amazon Managed Service for Prometheus 使用 DescribeKey 操作,来验证账户和区域中是否存在与您的工作区关联的 AWS KMS 客户托管密钥。

以下示例事件记录了 DescribeKey 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "TESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "EXAMPLE-KEY-ID1", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "TESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-22T17:02:00Z" } }, "invokedBy": "aps.amazonaws.com" }, "eventTime": "2021-04-22T17:07:02Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "keyId": "00dd0db0-0000-0000-ac00-b0c000SAMPLE" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }

了解更多

以下资源提供有关静态数据加密的更多信息。