监控您的 Amazon Secrets Manager 密钥的使用 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

监控您的 Amazon Secrets Manager 密钥的使用

您可以使用 CloudTrail 和 CloudWatch 监控密钥相关的活动。CloudTrail 通过任何 Amazon 服务捕获 Amazon 资源的 API 活动,并将该活动写入 Amazon S3 存储桶中的日志文件。通过 CloudWatch 可以创建用于监控这些日志文件并在相关活动发生时触发操作的规则。例如,每次有人创建新密钥或成功密钥轮换时,可以通过文本消息提醒您。您还可以创建警报,以便在客户端尝试使用弃用版本而非当前版本的密钥时提醒您。这有助于进行故障排除。

作为最佳实践,您应该监控密钥以确保记录密钥的使用情况和对密钥进行的任何更改。这有助于确保能够调查任何意外的使用或更改,并回滚不需要的更改。Amazon Secrets Manager 目前支持两种 Amazon 服务,帮您监控组织和活动。

使用 Amazon Secrets Manager 记录 Amazon CloudTrail API 调用

Amazon Secrets Manager 已与 Amazon CloudTrail 集成,后者是一项服务,它在 Secrets Manager 中提供用户、角色或 Amazon 服务的记录。CloudTrail 将对 Secrets Manager 的所有 API 调用作为事件捕获,包括来自 Secrets Manager 控制台的调用和对 Secrets Manager API 的代码调用。如果您创建跟踪,则可以使 CloudTrail 事件持续传送到 Amazon S3 存储桶(包括 Secrets Manager 的事件)。如果您不配置跟踪,则仍可在 CloudTrail 控制台中的 Event history(事件历史记录)中查看最新事件。通过使用 CloudTrail 收集的信息,您可以确定向 Secrets Manager 发出的请求、请求的 IP 地址、发出请求的用户、请求的时间以及其他详细信息。

要了解有关 CloudTrail 的更多信息,请参阅 Amazon CloudTrail 用户指南

记录 Amazon Secrets Manager 非 API 事件

除了记录 Amazon API 调用之外,CloudTrail 会捕获可能影响您的 Amazon 账户的安全性或合规性或者可帮助您解决操作问题的其他相关事件。CloudTrail 将这些事件记录为非 API 服务事件。

Secrets Manager 具有以下非 API 服务事件:

  • RotationAbandoned 事件 – 一种机制,通知您 Secrets Manager 服务已从现有版本的密钥中删除 AWSPENDING 标签。手动创建密钥的新版本时,您会发送一条消息,指示放弃当前正在进行的轮换,以支持新密钥版本。因此,Secrets Manager 会删除 AWSPENDING 标签以允许将来的轮换成功,并发布 CloudTrail 事件以让您意识到发生更改。

  • RotationStarted 事件 – 一种通知您密钥开始轮换的机制。

  • RotationSucceeded 事件 – 一种通知您成功轮换事件的机制。

  • RotationFailed 事件 – 一种通知您应用程序的密钥轮换失败的机制。

  • StartSecretVersionDelete 事件 - 一种通知您密钥版本开始删除的机制。

  • CancelSecretVersionDelete 事件 — 一种通知您密钥版本删除取消的机制。

  • EndSecretVersionDelete 事件 - 一种通知您终止密钥版本删除的机制。

CloudTrail 中的 Secrets Manager 信息

在创建 Amazon 账户时, Amazon 启用 CloudTrail。当 Secrets Manager 中发生活动时,该活动将记录在 CloudTrail 事件中,并与其他 Amazon 服务事件一同保存在事件历史记录中。您可以在Amazon账户中查看、搜索和下载最新事件。有关更多信息,请参见使用 CloudTrail 事件历史记录查看事件

要持续记录 Amazon 账户中的事件(包括 Secrets Manager 的事件),请创建跟踪。通过跟踪,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪记录时,此跟踪记录应用于所有 区域。此跟踪记录来自 Amazon 分区中的所有区域的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。此外,您可以配置其他Amazon服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅:

CloudTrail 录入所有 Secrets Manager 操作,并将操作录入在 Amazon Secrets Manager API 参考。例如,对 CreateSecretGetSecretValueRotateSecret 部分的调用将在 CloudTrail 日志文件中生成条目。

每个事件或日志条目都包含有关生成请求的人员信息。身份信息可帮助您确定以下内容:

  • 是使用根还是 IAM 用户凭证生成了请求。

  • 是使用角色还是联合身份用户的临时安全凭证生成了请求。

  • 是否有其他 Amazon 服务生成了请求。

对于日志文件传输的通知,您可以配置 CloudTrail 发布 Amazon SNS 通知。有关更多信息,请参阅为 CloudTrail 配置 Amazon SNS 通知

您也可以将多个 Amazon 区域和多个 Amazon 账户的 Amazon Secrets Manager 日志文件聚合到单个 Amazon S3 存储桶中。

有关更多信息,请参阅接收来自多个区域的 CloudTrail 日志文件从多个账户中接收 CloudTrail 日志文件

检索 Secrets Manager 日志文件条目

您可以使用以下任何技术从 CloudTrail 检索单个事件:

从 CloudTrail 日志中检索 Secrets Manager 事件

Using the Amazon Web Services Management Console

通过 CloudTrail 控制台,您可以查看过去 90 天内发生的事件。

  1. 访问 https://console.aws.amazon.com/cloudtrail/,打开 CloudTrail 控制台。

  2. 确保控制台指向发生事件的区域。控制台仅显示在所选区域中发生的那些事件。从控制台右上角的下拉列表中选择区域。

  3. 在左侧导航窗格中,选择 Event history (事件历史记录)

  4. 选择 Filter (筛选) 条件和/或 Time range (时间范围) 以帮助您查找您在寻找的事件。例如,要查看所有 Secrets Manager 事件,对于 Select attribute (选择属性),选择 Event source (事件源)。然后,对于 Enter event source (输入事件源),选择 secretsmanager.amazonaws.com

  5. 要查看更多详细信息,请选择事件旁边的展开箭头。要查看所有可用信息,请选择 View event (查看事件)

Using the Amazon CLI or SDK Operations
  1. 打开命令窗口以运行 Amazon CLI 命令。

  2. 运行类似于下面示例的命令。此处为了便于阅读,输出显示为单词换行,但实际输出不是这样。

    $ aws cloudtrail lookup-events --region us-east-1 --lookup-attributes AttributeKey=EventSource,AttributeValue=secretsmanager.amazonaws.com { "Events": [ { "EventId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE", "EventName": "CreateSecret", "EventTime": 1525106994.0, "Username": "Administrator", "Resources": [], "CloudTrailEvent": "{\"eventVersion\":\"1.05\",\"userIdentity\":{\"type\":\"IAMUser\",\"principalId\":\"AKIAIOSFODNN7EXAMPLE\", \"arn\":\"arn:aws:iam::123456789012:user/Administrator\",\"accountId\":\"123456789012\",\"accessKeyId\":\"AKIAIOSFODNN7EXAMPLE\", \"userName\":\"Administrator\"},\"eventTime\":\"2018-04-30T16:49:54Z\",\"eventSource\":\"secretsmanager.amazonaws.com\", \"eventName\":\"CreateSecret\",\"awsRegion\":\"us-east-2\",\"sourceIPAddress\":\"192.168.100.101\", \"userAgent\":\"<useragent string>\",\"requestParameters\":{\"name\":\"MyTestSecret\", \"clientRequestToken\":\"EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE\"},\"responseElements\":null, \"requestID\":\"EXAMPLE3-90ab-cdef-fedc-ba987EXAMPLE\",\"eventID\":\"EXAMPLE4-90ab-cdef-fedc-ba987EXAMPLE\", \"eventType\":\"AwsApiCall\",\"recipientAccountId\":\"123456789012\"}" } ] }

Secrets Manager 日志文件条目

通过跟踪,可将事件的日志文件传送至 Amazon S3 存储桶。CloudTrail 日志文件包含一个或多个日志条目。一个事件表示来自任何来源的一个请求,包括请求的操作、操作的日期和时间、请求参数等信息。CloudTrail 日志文件不收集公有 API 调用的有序堆栈跟踪,因此它们不会按任何特定顺序显示。

以下示例演示示例 CreateSecret 调用的一个 CloudTrail 日志条目。

{ "eventVersion": "1.05", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myusername", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2018-04-03T17:43:50Z" }} }, "eventTime": "2018-04-03T17:50:55Z", "eventSource": "secretsmanager.amazonaws.com", "eventName": "CreateSecret", "awsRegion": "us-east-2", "requestParameters": { "name": "MyDatabaseSecret", "clientRequestToken": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE" }, "responseElements": null, "requestID": "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", "eventID": "EXAMPLE3-90ab-cdef-fedc-ba987EXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }

以下示例演示示例 DeleteSecret 调用的一个 CloudTrail 日志条目。

{ "eventVersion": "1.05", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myusername", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2018-04-03T17:43:50Z" }} }, "eventTime": "2018-04-03T17:51:02Z", "eventSource": "secretsmanager.amazonaws.com", "eventName": "DeleteSecret", "awsRegion": "us-east-2", "requestParameters": { "recoveryWindowInDays": 30, "secretId": "MyDatabaseSecret" }, "responseElements": { "name": "MyDatabaseSecret", "deletionDate": "May 3, 2018 5:51:02 PM", "aRN": "arn:aws:secretsmanager:us-east-2:123456789012:secret:MyDatabaseSecret-a1b2c3" }, "requestID": "EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", "eventID": "EXAMPLE3-90ab-cdef-fedc-ba987EXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }

Amazon CloudWatch Events

在组织中发生管理员指定的操作时,Secrets Manager可以与 CloudWatch Events 配合触发警报。例如,由于此类操作的敏感性,管理员可能收到删除密钥或轮换密钥的通知。您可能希望在有人尝试使用正等待删除的密钥版本时收到警报。您可以配置 CloudWatch Events 规则来监控这些操作,然后将生成的事件发送到管理员定义的“目标”。目标可能是 Amazon SNS 主题,向订阅者发送电子邮件或短信。您还可以创建事件触发的简单 Amazon Lambda 函数,它记录操作详细信息以供以后查看。

要了解有关 CloudWatch Events 的更多信息(包括如何对其进行配置和启用),请参阅 Amazon CloudWatch Events 用户指南

监控计划删除的密钥版本

您可以结合使用 Amazon CloudTrail、Amazon CloudWatch Logs 和 Amazon Simple Notification Service (Amazon SNS) 来创建告警,该告警将通知您访问待删除密钥版本的任何尝试 如果您收到告警的通知,您可能需要取消删除密钥,以给自己更多时间来确定是否确实要将其删除。您的调查可能会导致密钥被恢复,因为您仍然需要它。或者,您可能需要使用所用的新密钥的详细信息来更新用户。

以下过程将说明如何在产生特定错误消息的 GetSecretValue 操作的请求写入您的 CloudTrail 日志文件时收到通知。可以对密钥版本执行其他 API 操作而不会触发告警。此 CloudWatch 告警检测可能表明某个人或应用程序在使用过时凭证的使用情况。

在您开始这些过程前,必须在打算监控其中的 Amazon Secrets ManagerAPI 请求的 Amazon Web Services 区域 和账户中启用 CloudTrail。有关说明,请参阅 Amazon CloudTrail 《用户指南》中的首次创建跟踪

第 1 部分:将 CloudTrail 日志文件配置为发送到 CloudWatch Logs

您必须将 CloudTrail 日志文件配置为发送到 CloudWatch Logs。您需要这样做,以便 CloudWatch Logs 可以针对 Secrets Manager API 请求监控这些日志文件,以检索待删除的密钥版本。

要配置 CloudTrail 日志文件交付到 CloudWatch Logs 的步骤

  1. 访问 https://console.aws.amazon.com/cloudtrail/,打开 CloudTrail 控制台。

  2. 在顶部导航栏上,选择 Amazon 区域以监控密钥。

  3. 在左侧导航窗格中,选择跟踪,然后选择要为 CloudWatch 配置的跟踪名称。

  4. 跟踪配置页面上,向下滚动到 CloudWatch Logs 部分,然后选择编辑图标 ( )。

  5. 对于 New or existing log group (新的或现有的日志组),键入日志组的名称,例如 CloudTrail/MyCloudWatchLogGroup

  6. 对于 IAM role (IAM 角色),您可以使用名为 CloudTrail_CloudWatchLogs_Role 的默认角色。该角色具有默认角色策略,其中包含将 CloudTrail 事件传送到日志组所需的权限。

  7. 选择 Continue (继续) 以保存您的配置。

  8. Amazon CloudTrail 将与帐户中的 API 活动关联的 CloudTrail 事件传递到 CloudWatch Logs 日志组页面上,选择允许

第 2 部分:创建 CloudWatch 告警

要在 Secrets Manager GetSecretValue API 操作请求访问待删除密钥版本时收到通知,您必须创建 CloudWatch 告警并配置通知。

创建监控待删除密钥版本的使用的 CloudWatch 告警

  1. 登录到 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在顶部导航栏中,选择要监控密钥的 Amazon 区域。

  3. 在左侧导航窗格中,选择 Logs

  4. Log Groups (日志组) 列表中,选中您在上一个过程中创建的日志组(如 CloudTrail/MyCloudWatchLogGroup)旁边的复选框。选择创建指标筛选器

  5. 对于筛选模式,键入或粘贴以下内容:

    { $.eventName = "GetSecretValue" && $.errorMessage = "*secret because it was marked for deletion*" }

    选择 Assign Metric (分配指标)

  6. Create Metric Filter and Assign a Metric 页面上,执行以下操作:

    1. 对于 Metric Namespace (指标命名空间),键入 CloudTrailLogMetrics

    2. 对于 Metric Name(指标名称),键入 AttemptsToAccessDeletedSecrets

    3. 选择显示高级指标设置,如有必要,再为 Metric Value (指标值) 键入 1

    4. 选择 Create Filter

  7. 在筛选器框中,选择 Create Alarm

  8. Create Alarm 窗口中,执行以下操作:

    1. 对于名称,键入 AttemptsToAccessDeletedSecretsAlarm

    2. Whenever: (每当:) 下,为 is: (是:) 选择 >= 并键入 1

    3. Send notification to: 旁,执行以下操作之一:

      • 要创建并使用新的 Amazon SNS 主题,请选择新建列表,然后键入新主题的名称。对于 Email list:,键入至少一个电子邮件地址。您可以键入多个电子邮件地址,并使用逗号将它们隔开。

      • 要使用现有 Amazon SNS 主题,请选择要使用的主题的名称。如果列表不存在,请选择 Select list (选择列表)

    4. 选择 Create Alarm

第 3 部分:监控 CloudWatch 中已删除的密钥

您已创建告警。要测试它,请创建一个密钥版本,并计划删除该密钥版本。然后,尝试检索密钥值。您在告警中配置的地址很快会收到一封电子邮件。它提醒您计划删除使用的密钥版本。