跳至内容

如何识别在我的 AWS Organizations 下进行大量 API 调用的 AWS 账户?

2 分钟阅读
0

我想识别在我的 AWS Organizations 下进行大量 API 调用的用量最高者。

解决方法

要识别进行大量 API 调用的账户,最佳做法是同时使用 Amazon CloudWatch Logs 和CloudWatch 指标。

以下解决方案使用 Amazon Virtual Private Cloud (Amazon VPC) DescribeVpcEndpoints API。

**注意:**Amazon Elastic Compute Cloud (Amazon EC2) 在账户级别限制 API 请求。为了提高性能,Amazon EC2 还会在组织级别限制 API 请求

使用 CloudWatch Logs 识别用量最高者

要识别用量最高者并汇总特定时间段内所有账户的 API 调用总数,请使用 CloudWatch Logs。要创建 CloudWatch Logs 控制面板,请完成以下步骤:

  1. 为您的组织创建新的 AWS CloudTrail 跟踪修改现有跟踪,以将跟踪发布到 CloudWatch Logs。
    **注意:**必须将 CloudWatch Logs 设置为 Enabled(启用)。
  2. 打开 CloudWatch 控制台
    **注意:**请使用您用来创建 CloudWatch Logs 的账户。
  3. 在导航窗格中,选择 Logs,然后选择 Contributor Insights
  4. 创建 Contributor Insights 规则,然后选择 Syntax(语法)。
  5. 要获取每个账户发起的 API 调用次数,请在语法编辑器中输入以下代码:
    {
      "AggregateOn": "Count",
      "Contribution": {
        "Filters": [
          {
            "Match": "$.eventName",
            "In": [
              "DescribeVpcEndpoints"
            ]
          }
        ],
        "Keys": [
          "$.userIdentity.accountId",
          "$.eventName"
        ]
      },
      "LogFormat": "JSON",
      "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
      },
      "LogGroupARNs": [
        "arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace"
      ]
    }
    要获取所有账户的全部 API 调用汇总,请输入以下代码:
    {
      "AggregateOn": "Count",
      "Contribution": {
        "Filters": [
          {
            "Match": "$.eventName",
            "In": [
              "DescribeVpcEndpoints"
            ]
          }
        ],
        "Keys": [
          "$.eventName"
        ]
      },
      "LogFormat": "JSON",
      "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
      },
      "LogGroupARNs": [
        "arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace"
      ]
    }
    **注意:**请将 DescribeVpcEndpoints 替换为您的 API 调用,将 arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace 替换为您的日志组 ARN。
  6. 选择 Action(操作),然后选择 Add to dashboard(添加到控制面板)。
  7. 选择现有控制面板或创建新的控制面板。
  8. 选择 Save(保存)。

要查找特定时间段内的用量最高者,您还可以运行以下 CloudWatch Logs Insights 查询:

fields @timestamp, @message, @logStream, @log
| filter eventName = 'DescribeVpcEndpoints'
| sort @timestamp desc
| stats count() by bin(1m)

**注意:**请将 DescribeVpcEndpoints 替换为您的 API 调用。

使用 CloudWatch 指标来识别用量最高者

**注意:**确保您的配置符合 Metrics Insights 配额

最佳做法是创建 CloudWatch 警报,以在您达到 API 调用最大配额的 60% 时提醒您。

要设置 CloudWatch 指标控制面板,请完成以下步骤:

  1. 设置跨账户可观测性
  2. 打开 CloudWatch 控制台
  3. 选择 Use metrics(使用指标),然后选择 All metrics(所有指标)选项卡。
  4. 选择 Source(源),然后输入以下代码:
    {
      "metrics": [
        [
          {
            "expression": "SELECT SUM(CallCount) FROM SCHEMA(\"AWS/Usage\", Class,Resource,Service,Type) WHERE Resource = 'DescribeVpcEndpoints'",
            "label": "Query1",
            "id": "q1",
            "period": 60
          }
        ]
      ],
      "view": "timeSeries",
      "stacked": false,
      "region": "us-east-1",
      "stat": "Average",
      "period": 60,
      "annotations": {
        "horizontal": [
          {
            "label": "Org throttle",
            "value": 225
          }
        ]
      }
    }
    **注意:**请将 DescribeVpcEndpoints 替换为您的 API 调用,将 us-east-1 替换为您的 AWS 区域,将 225 替换为警报配额。
  5. 选择 Update(更新)。
  6. 选择 Action(操作),然后选择 Add to dashboard(添加到控制面板)。
  7. 选择现有控制面板或创建新的控制面板。最佳做法是使用包含您的 CloudWatch Logs 数据的同一个控制面板。
  8. 选择 Save(保存)。

相关信息

在 Amazon CloudWatch 中分析 AWS Cloudtrail

AWS PrivateLink 配额

AWS 官方已更新 1 年前