如果用户是DDoS 攻击的目标,并且Amazon CloudFront 没有预先配置Amazon WAF 和Amazon Shield Advanced 的保护,则可能会在短时间内产生大量Amazon CloudFront 请求或流量,从而导致需缴纳大量CDN 费用。从付款人账户的角度来看,付款人下有许多使用Amazon CloudFront 链接的账户。我们希望集中、智能地监控所有关联帐户的CDN 使用情况,并在发生异常情况时发出警报。由于Amazon CloudFront 账单数据会延迟1-2 天,我们决定将其与Amazon CloudWatch 的跨账户异常检测功能相结合来实现这一目标。在开始之前,我们首先了解一下Amazon CloudFront 是什么。
Amazon CloudFront 是一项全球内容交付网络(CDN) 服务,使您能够通过全球分布式服务器网络更快地向用户交付内容。其主要特点是:
低延迟和高可用性:Amazon CloudFront 使用Amazon Cloud Technology 位于世界各地的边缘节点将内容快速发送给您的用户,从而减少延迟并提高可用性。
安全性:Amazon CloudFront 支持HTTPS 协议,可保护您的内容在传输过程中免遭盗窃和篡改。同时,还提供防止DDoS攻击等多种安全功能。
更快的静态请求:Amazon CloudFront 自动缓存图像、视频、CSS 和JavaScript 文件等静态内容,以减少源站点上的负载并提高响应速度。
动态请求加速:Amazon CloudFront 可以轻松集成API、Web 应用程序等动态内容,以提供全面的内容交付解决方案。
亚马逊云观察
跨账户异常检测概述
从2024 年4 月开始,Amazon CloudWatch 支持对账户之间共享的指标进行异常检测。 AmazonCloudWatch 异常检测允许您通过Amazon CloudWatch 的跨账户监控功能跟踪单个监控账户(需要源账户批准)内多个账户的指标行为的异常变化。
Amazon CloudWatch 的异常检测功能将机器学习算法应用于历史指标数据,以自动创建预期值模型。该模型评估指标趋势并捕获每小时、每天和每周的模式变化。该算法是根据过去两周的指标数据进行训练的,但即使您没有全部两周的数据,也可以启用指标异常检测。
与传统的静态阈值方法不同,Amazon CloudWatch 异常检测会自动检测异常行为,并可以避免由于阈值设置不当而导致漏报或误报。及时发现系统异常,可以快速识别并解决潜在问题,提高系统稳定性。
配置异常检测时,必须设置异常检测阈值ANOMALY_DETECTION_BAND。下面对此进行更详细的解释。 Amazon CloudWatch 使用此阈值和模型来确定指标值的“正常”范围。阈值越高,被视为正常的值范围就越宽。创建模型后,Amazon CloudWatch 会不断评估和调整模型,以确保其尽可能准确。这涉及重新训练模型,以便它根据指标值的变化进行自我调整。还包括季节性、峰值或稀疏指标的预测模型优化。
启用异常检测后,您还可以排除指标的特定时间段。该数据不用于训练模型。排除引入和其他异常事件的影响可确保模型最准确。同时,您还可以设置出现异常时的自动动作,例如发送通知或触发自动工作流程,实现自动化和维护。
总体而言,Amazon CloudWatch 异常检测通过机器学习自动检测异常,提高系统可观察性和可靠性,同时简化异常检测的实施和管理。已经在中国及海外地区上线,直接使用Amazon CloudWatch的托管服务,无需搭建和维护自己的异常检测系统。
改变异常检测模型
扫描二维码了解更多
然后使用中心账户连接另一个源账户,实现异常监控。
配置集中账户
要实现跨账户监控,您必须首先在中央账户上启用Amazon CloudWatch 跨账户监控功能。由于受监控的服务是Amazon CloudFront,因此您必须选择美国东部1 区域进行配置。打开Amazon CloudWatch 服务,单击设置,然后在监控账户设置下单击设置。
对于Amazon CloudFront 监控,您只需启用指标即可。日志和指标共享在功能上是免费的;其他数据共享会产生额外的功能费用。
在源账户中,输入您需要收集数据的源账户ID。
保存并退出设置,然后单击“链接帐户的资源”以检索源帐户的链接信息。
如果您的源账户和中央账户是使用Amazon Organization 进行管理的,您可以使用下图左侧的连接方法。由于实验环境是独立账户,因此选择右侧“任意账户”,点击“复制URL”保存源账户的连接配置URL地址。
配置源账户
首先,使用新浏览器登录您的源账户,跳转到美国东部1地区,打开您的链接设置中的链接地址,验证您的设置是否正确,然后点击链接。
检查集中账户是否可见
源账户的CW 指标
配置完成后,在集中账户的Amazon CloudWatch 中选择Amazon CloudFront 以查看同步的CDN 指标信息。
设置您的SNS 以接收警报信息
创建一个名为test-alert 的主题。
创建电子邮件订阅,通过订阅服务登录您的邮箱,并记下主题的ARN 地址字符串arn:aws:sns:us-east-1:xxxxx
xxx:测试警报。稍后将使用它来配置Amazon CloudFront 监控警报。
部署代码
1. 打开监控账号的cloud shell,从git拉取代码。
git 克隆https://github.com/Rayment915/aws-cdn-anamoly-detecor.git
向左或向右滑动即可查看完整说明
跨账户监控只需要两个文件:
get_cross_account_distributionId.py
create_alert_from_mon_account.py
向左或向右滑动即可查看完整说明
# get_cross_account_distributionId.py
# 列出源账户的CloudFront 分配ID 并使用它在您的监控账户中创建警报
导入boto3
从create_alert_from_mon_account 导入create_cloudwatch_alarm
def get_distribution_list(OwningAccount,next_token=None):
Cloudwatch=boto3.client(\’cloudwatch\’)
公制=[]
而True:
# 使用适当的参数调用list_metrics API
对于next_token:
响应=Cloudwatch.list_metrics(
命名空间=\’AWS/CloudFront\’,
NextToken=next_token,
IncludeLinkedAccounts=True,
拥有账户=拥有账户
)
: 其他
响应=Cloudwatch.list_metrics(
命名空间=\’AWS/CloudFront\’,
IncludeLinkedAccounts=True,
拥有账户=拥有账户
)
#将检索到的指标添加到列表中
指标.扩展(响应[\’指标\’])
# 检查是否还有更多结果需要检索
next_token=response.get(\’NextToken\’, None)
否则next_token:
休息
distribution_ids=[指标[\’维度\’][1][指标\’值\’]]
ret=设置(distribution_ids)
回程
如果__name__==\’__main__\’:
OwningAccount=\’YOUR_SOURCE_ACOUNT_ID\’
distributions_list=get_distribution_list(拥有帐户)
# 根据您的用例进行更改
ANOMALY_DETECTION_BAND=5
metric_list=[\’请求\’,\’下载的字节数\’]
sns_arn=\’arn:aws:sns:us-east-1:YOUR_MONITORING_ACCOUNT_ID:test-alarm\’
对于distributions_list: 中的distribution_id
对于metric_list: 中的指标
create_cloudwatch_alarm(distribution_id,指标,sns_arn,ANOMALY_DETECTION_BAND,OwningAccount)
向左或向右滑动即可查看完整说明
# create_alert_from_mon_account.py
导入boto3
从botocore.Exceptions 导入ClientError
def create_cloudwatch_alarm(distribution_id,metric,sns_arn,ANOMALY_DETECTION_BAND,account_id):
””
基于异常检测创建CloudWatch 警报
””
# 创建CloudWatch 客户端
ALARM_NAME=f\’CloudFront-{account_id}-{distribution_id}-{metric}-Anomaly\’
Cloudwatch=boto3.client(\’cloudwatch\’,region_name=\’us-east-1\’)
尝试:
#创建异常检测模型
响应=Cloudwatch.put_anomaly_ detector(
指标名称=指标,
命名空间=\’AWS/CloudFront\’,
尺寸=[
{
\’名称\’: \’分发ID\’,
\’值\’: distribution_id
},
],
统计=\’总计\’,
)
print(f\’====为{ALARM_NAME}====创建探测器模型\’)
# 根据异常检测创建警报
响应=Cloudwatch.put_metric_alarm(
警报名称=ALARM_NAME,
ComparisonOperator=\’GreaterThanUpperThreshold\’,
TreatMissingData=\’未破坏\’,
操作已启用=真,
评估期=5,
报警数据点=3,
指标=[
{
\’Id\’: f\’m_cdn_{metric}_{account_id}_{distribution_id}\’,
\’MetricStat\’: {
\’公制\’: {
\’命名空间\’: \’AWS/CloudFront\’,
\’MetricName\’: 指标,
《次元》:【
{
\’名称\’: \’地区\’,
\’值\’: \’全局\’
},
{
\’名称\’: \’分发ID\’,
\’值\’: distribution_id
}
]
},
“期间”: 60,
\’统计\’: \’总计\’
},
\’AccountId\’: 帐户ID,
\’ReturnData\’: 真
},
{
\’Id\’: f\’ad_cdn_{metric}_{account_id}_{distribution_id}\’,
\’公式\’: f\’ANOMALY_DETECTION_BAND(m_cdn_{metric}_{account_id}_{distribution_id}, {ANOMALY_DETECTION_BAND})\’,
\’label\’: f\'{metric}(预期)\’,
\’ReturnData\’: 真
}
],
ThresholdMetricId=f\’ad_cdn_{metric}_{account_id}_{distribution_id}\’,
报警动作=[sns_arn]
)
print(f\’已创建警报: {ALARM_NAME}\’)
除了ClientError 为e:
print(f\’创建闹钟失败: {e}\’)
向左或向右滑动即可查看完整说明
2. 运行并部署您的代码
这两个文件必须放在同一目录中,并且必须更改get_cross_account_distributionId.py 文件中的一些信息。
OwningAccount,源账户的亚马逊账户ID
sns_arn,更改为实际的SNS ARN地址
python3 get_cross_account_distributionId.py
3. ANOMALY_DETECTION_BAND 说明
创建异常检测警报时,必须指定参数ANOMALY_DETECTION_BAND。该值用于定义异常检测带的厚度。设定值乘以指标的标准差。使用较高的值将使异常检测范围更宽更厚,因此一些异常值可能会被忽略。但是,使用较小的值可能会导致大量误报。基本上,该值取决于度量数据的特征和异常检测的准确性。考虑到CDN 流量通常具有大量请求和带宽波动,您最初可以将ANOMALY_DETECTION_BAND 设置为更高的值,例如5。接下来,选择一些Amazon CloudFront发行版,观察异常检测频带是否能够覆盖正常的Request波形和BytesDownloaded波形,并根据实际情况增加或减少频带。由于我们的目标是监控CDN流量的异常增长,因此我们只需要观察峰值即可。此外,您无需观察每个Amazon CloudFront 发行版。要评估BAND 值,只需选择几个典型的分布即可。 Amazon CloudWatch 异常检测会不断评估和调整模型,因此ANOMALY_DETECTION_BAND 主要充当种子,您无需太担心其准确性。
成本估算
异常检测警报具有以下成本(集中帐户):
警报中使用的每个指标的成本。
两个额外的警报指标成本用于计算异常检测模型产生的上限和下限指标。
官方价格
扫描二维码了解更多
例子:
假设您有一个中心账户和一个源账户,源账户有100 个配额,需要跨账户监控。目前,如果您只想共享日志和指标,则源帐户无需支付额外费用。这意味着每个指标会产生3个警报指标费用,因此中心化账户将产生100*3*2=600个指标警报的费用。我们的代码监控两个源帐户的指标:“Requests”和“BytesDownloaded”。
总结
Amazon CloudWatch 的跨账户异常检测功能可让您使用集中账户跨多个源账户监控Amazon CloudFront 维度,通过机器学习自动快速检测异常,并提高系统可观察性和可靠性性能并简化异常检测的实施。管理。但是,对于新创建的Amazon CloudFront 发行版或预计会出现突发流量(例如在线促销活动)的发行版,异常监控和警报功能将在此期间正常暂停,亚马逊可能会使用它。监控预算链接帐户以控制成本。
参考链接
亚马逊云观察
现在支持跨账户异常检测
扫描二维码了解更多
创建监控账户
扫描二维码了解更多
使用
亚马逊云观察
异常检测
扫描二维码了解更多
向左或向右滑动查看更多详情
本文作者
林景峰
他于2017 年加入亚马逊云技术,目前从事解决方案架构(SA) 工作,在计算、网络、数据库和无服务器领域进行学习和研究。具有硬件和应用灾难恢复和高可用性方面的相关经验。
张振伟
他是亚马逊云技术的APN解决方案架构师,主要负责合作伙伴架构咨询和解决方案设计,同时也致力于亚马逊云技术云服务在中国的应用和推广。我们专注于数据迁移、数据库调优和数据分析。
陈陈
主要负责亚马逊云技术的高级边缘产品架构师
产品和服务,例如Amazon CloudFront、Amazon WAF、Amazon Shield、Amazon Global Accelerator 和Amazon Route 53。
庄应勤
亚马逊云技术解决方案架构师。负责设计、咨询和实施基于亚马逊云技术的云计算解决方案架构。我们在DevOps、CI/CD、容器等领域拥有丰富的技术和支持经验,致力于帮助客户实现创新和业务发展。
柯俊雄
亚马逊云技术解决方案架构师。专注于数据分析/容器化。
明星不会迷失,发展也会更快。
关注后一定要star“亚马逊云开发者”
点击阅读原文并访问我们的博客了解更多详情
现在您已经听到了,请单击下面的四个按钮
你永远不会遇到任何错误!
以上#Amazon CloudFront跨账户异常监控实践相关内容来源网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93313.html