通过aws cli获取cloudfront使用报告

bad*_*ker 6 amazon-web-services amazon-cloudfront amazon-cloudwatch aws-cli

我有一堆Cloudfront分布在多个 AWS 账户中的分布。我想获取所有 AWS 账户中所有 Cloudfront 发行版的使用情况报告

现在,我的更改帐户位已经自动化,但我不确定如何CSV通过AWS CLI.

我知道我可以执行一些 ClickOps 并通过Cloudfront Console下载报告,如下所示:

在此输入图像描述

但我找不到使用 AWS CLI 获取报告的命令。

我知道我可以通过 Cloudwatch API 获取 Cloudfront 指标,但文档没有提及我应该查询的 API 端点。

另外,还有aws cloudwatch get-metric-statistics,但我不确定如何使用它来下载Cloudfront Usage CSV Report.


问题如何使用 AWS CLI 获取 AWS 账户中所有分配的 Cloudfront 使用情况报告?

abd*_*wer 1

我找不到 Cloudfront API 来获取使用情况报告。我知道这样的报告可以从 Cloudwatch 日志构建,但我很懒,我想直接从 Cloudfront 下载报告。

AWS CLI 中尚未引入此类命令,Boto3(适用于 Python 的 AWS 开发工具包)中尚未引入此类命令,但您可以使用以下几种解决方法:

  1. 使用 Selenium 访问 CloudFront 的 AWS 控制台并单击该Download CSV按钮。您可以用 Python 编写一个脚本。

  2. 您可以在AWS 控制台上使用CloudFront 使用的curl 命令来获取XML 格式的结果,然后可以使用Python 或任何CLI 工具将它们转换为CSV。单击该Download CSV按钮后可以找到该curl命令,然后从浏览器页面上控制台下的选项卡cloudfrontreporting下显示的名为的项目(或使用您选择的任何其他浏览器)中右键单击该项目,然后单击按钮。NetworkInspectGoogle ChromeCopy as cURL

卷曲命令如下:

curl 'https://console.aws.amazon.com/cloudfront/v3/api/cloudfrontreporting' \
  -H 'authority: console.aws.amazon.com' \
  -H 'sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"' \
  -H 'content-type: application/json' \
  -H 'x-csrf-token: ${CSRF_TOKEN}' \
  -H 'accept: */*' \
  -H 'origin: https://console.aws.amazon.com' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://console.aws.amazon.com/cloudfront/v3/home?region=eu-central-1' \
  -H 'accept-language: en-US,en;q=0.9' \
  -H 'cookie: ${COOKIE}' \
  --data-raw '{"headers":{"X-Amz-User-Agent":"aws-sdk-js/2.849.0 promise"},"path":"/2014-01-01/reports/series","method":"POST","region":"us-east-1","params":{},"contentString":"<DataPointSeriesRequestFilters xmlns=\"http://cloudfront.amazonaws.com/doc/2014-01-01/\"><Report>Usage</Report><StartTime>2022-01-28T11:23:35Z</StartTime><EndTime>2022-02-04T11:23:35Z</EndTime><TimeBucketSizeMinutes>ONE_DAY</TimeBucketSizeMinutes><ResourceId>All Web Distributions (excludes deleted)</ResourceId><Region>ALL</Region><Series><DataKey><Name>HTTP</Name><Description></Description></DataKey><DataKey><Name>HTTPS</Name><Description></Description></DataKey><DataKey><Name>HTTP-BYTES</Name><Description></Description></DataKey><DataKey><Name>HTTPS-BYTES</Name><Description></Description></DataKey><DataKey><Name>BYTES-OUT</Name><Description></Description></DataKey><DataKey><Name>BYTES-IN</Name><Description></Description></DataKey><DataKey><Name>FLE</Name><Description></Description></DataKey></Series></DataPointSeriesRequestFilters>","operation":"listDataPointSeries"}' \
  --compressed > report.xml
Run Code Online (Sandbox Code Playgroud)

其中${CSRF_TOKEN}${COOKIE}需要您自己提供,可以从浏览器中找到或可以通过编程方式准备。

  1. 使用 CloudFront 生成的日志,如问题的答案和代码中所述:Boto3 CloudFront 对象使用计数