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

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

监控您的 AWS Secrets Manager 秘密

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

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

AWS Secrets Manager 与集成 AWS CloudTrail,一种服务,提供用户、角色或所执行操作的记录 AWS 服务 Secrets Manager。 CloudTrail 捕获的所有API调用 Secrets Manager 作为事件,包括来自 Secrets Manager 控制台,从代码呼叫到 Secrets Manager APIs。如果您创建了一个追踪,您可以启用连续传递 CloudTrail 事件到 Amazon S3 bucket,包括事件 Secrets Manager. 如果您不配置跟踪,则仍可在 CloudTrail 控制台的 Event history (事件历史记录) 中查看最新事件。通过使用 CloudTrail 收集的信息,您可以确定向 Secrets Manager 发出的请求、请求的 IP 地址、发出请求的用户、请求的时间以及其他详细信息。

要了解有关 CloudTrail 的更多信息,请参阅 AWS CloudTrail User Guide

记录 AWS Secrets Manager 非 API 事件

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

Secrets Manager 有三种非 API 服务事件:

  • RotationAbandoned 事件-一种机制,用于通知您密钥管理器服务已从现有版本的密钥中删除AWSPENDING标签。 当您手动创建一个新版本的密钥时,您将发送一条消息,指示放弃当前正在进行的轮换,支持新的密钥版本。 因此 Secrets Manager 删除AWSPENDING标签,以允许将来的轮换成功并发布 CloudTrail 事件,以提供对变革的认识。

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

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

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

CloudTrail中的 Secrets Manager 信息

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

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

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

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

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

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

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

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

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

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

检索 Secrets Manager 日志文件条目

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

检索 Secrets Manager 事件来自 CloudTrail 日志

使用 AWS 管理控制台

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

  1. https://console.amazonaws.cn/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 (查看事件)

使用 AWS CLI 或开发工具包操作
  1. 打开命令窗口以运行 AWS 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-cn: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-1\",\"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-cn: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-west-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-cn: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-west-2", "requestParameters": { "recoveryWindowInDays": 30, "secretId": "MyDatabaseSecret" }, "responseElements": { "name": "MyDatabaseSecret", "deletionDate": "May 3, 2018 5:51:02 PM", "aRN": "arn:aws-cn:secretsmanager:us-west-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 主题,向订阅者发送电子邮件或短信。您还可以创建事件触发的简单 AWS Lambda 函数,它记录操作详细信息以供以后查看。

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

计划删除的监控密钥版本

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

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

在开始这些程序之前,您必须打开 CloudTrail 在AWS区域和账户中, AWS Secrets ManagerAPI请求。有关说明,请访问 第一次创建追踪安信比 CloudTrail 用户指南.

第1部分: 配置 CloudTrail 日志文件传递至 CloudWatch 日志

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

将 CloudTrail 日志文件配置为发送到 CloudWatch Logs

  1. 访问 https://console.amazonaws.cn/cloudtrail/,打开 CloudTrail 控制台。

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

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

  4. 追踪配置 向下滚动至 CloudWatch Logs 分节,然后选择编辑图标( ).

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

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

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

  8. AWS CloudTrail will deliver CloudTrail events associated with API activity in your account to your CloudWatch Logs log group (AWS CloudTrail 将与您的账户中的 API 活动关联的 CloudTrail 事件发送到您的 CloudWatch Logs 日志组) 页面上,选择 Allow (允许)

第2部分: 创建 CloudWatch 警报

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

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

  1. 登录到 CloudWatch 控制台 (https://console.amazonaws.cn/cloudwatch/)。

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

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

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

  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. 对于指标名称,键入 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

第三部分: 监控 CloudWatch 用于已删除的密钥

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