Kinesis Data Firehose 写入S3动态分区并转换为Parquet格式

注:2024年2月起,Kinesis Data Firehose也成为了独立产品Data Firehose。再加上之前成为独立产品的Managed Flink,Kinesis的三套件目前都成为了独立产品。

本文有关操作Demo请参考这个视频。本篇为具体技术配置过程。

一、背景和需求分析

1、Kinesis介绍

Kinesis简介From AWS官网:

Amazon Kinesis Data Firehose (KDF) 是将流数据加载到数据存储和分析工具的最简单方式。Kinesis Data Firehose是一项完全托管式服务,让您可以轻松地从数十万个来源中捕获、转换大量流数据,并将其加载到 Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Kinesis Data Analytics、通用 HTTP 终端节点,以及 Datadog、New Relic、MongoDB 和 Splunk 等的服务提供商中,从而获得近乎实时的分析与见解。

2、Kinesis分区需求

测试Kinesis发送数据流时候,经常使用Kinesis控制台上的生成测试数据按钮,这个按钮将生成如下四个字段:

Continue reading “Kinesis Data Firehose 写入S3动态分区并转换为Parquet格式”

使用Python Boto3从CloudWatch获取S3存储桶大小的Metric值

一、背景

对象式存储S3是用于存储海量文件的,当文件达到百万、千万、上亿的时候,S3可正常响应查询、写入的请求,而普通OS上的文件系统在这个数量级必须引入目录散列,并且伴随着性能下降,且如果是虚拟机本地盘还可能出现inodes使用满的情况。这种场景下,S3对象存储针对海量文件是非常友好的。因此使用S3是很有必要的。

S3也有不方便的地方,例如统计文件大小。传统的文件系统方式是做遍历后求和。那么S3上数百万个文件做一次遍历,开销极其巨大,而且产生了巨大的读取费用(List也算读取,参考S3收费文档)。由此,S3有个功能是S3 Inventory,即每天一次生成文件清单,并可通过Athena做进一步查询文件名称和大小。此外,还可以通过S3 Storage Lens查看各存储桶的总数据量和类型。

Continue reading “使用Python Boto3从CloudWatch获取S3存储桶大小的Metric值”

如何读懂一份AWS账单的EC2预留实例匹配关系

一、预留实例的计费逻辑

在一份账单中占比最大的部分可能就是EC2,EC2部分也包含了诸如EKS集群使用的node节点等用量。在部分机型是On-demand按需运行,部分机型是有多个RI预留时候,账单可能显示的比较复杂,晦涩难懂。那么如何解读账单中体现的EC2用量呢?本文以某个场景为例进行分析和解读。在开始解读账单之前,首先要看下RI预留实例的计费逻辑。

Continue reading “如何读懂一份AWS账单的EC2预留实例匹配关系”

CloudFront签名上手:使用CloudFront做S3存储桶的私有内容分发

本文的效果演示Demo视频参考这里

一、背景

1、传统企业与内容分发

以往,私有内容分发一直是数字原生的互联网行业的技术需求,广泛用于经过会员体系验证的版权内容分发,包括但不限于视频播放、音频播放、游戏下载、软件分发等。

如今,随着传统企业的数字化转型越来越普遍,大量企业内部应用技术栈全面互联网化,许多企业的应用系统已经突破了传统的VPN内网概念,转而在互联网上运行。企业日常运营产生各种流程文档、数据文件、日志等需要被分发给员工和第三方合作伙伴。这种场景下如何能有保护地企业私有内容的安全分发,就成为了企业数字化转型的安全关键。

Continue reading “CloudFront签名上手:使用CloudFront做S3存储桶的私有内容分发”

使用WAF检查Referer Header对外部引用进行干预

一、背景

在CloudFront的控制台上,提供了一个TOP Refer的报表,这个报表用于显示本站的用户来源是来自哪个原始网站。这个机制是如何工作的呢?

假设如下的场景:

  • 主网站名为 https://www.abc.com/index.html
  • 图片的域名为 https://image.abc.com/image01.png

当客户端浏览器打开主网站时候,浏览器会向图片域名image.abc.com服务器的发送一个图片访问请求,并包含一个特殊的HTTP Header名为Referer。Referer Header的内容就是之前所在页面的域名,即www.abc.com。因此,图片服务器只需要检查Referer域名,即可获知引用此图片的原始网址。Referer Header可以被WEB应用服务器获取,并在应用层代码做判断。更高效的办法,是从客户访问前端的CloudFront和WAF上进行干预,来判断是否是合法的引用。

需要注意的是:检查Referer并不能完全阻断所谓的“盗链”和非法链接,因为攻击者可以简单去构造Referer Header来模拟一个正常请求。所以实施Referer检查的意义是可以避免图片等素材被其他网址的浏览器简单引用,可减少由此产生的外部流量等问题。如果需要100%的阻止外部访问且必须所有资源都经过身份验证,请参考CloudFront Signature签名功能。

下边介绍如何通过WAF检查Referer Header。

Continue reading “使用WAF检查Referer Header对外部引用进行干预”

将CloudFront对S3源站的访问授权从原有的OAI切换为最新的OAC

一、背景

CloudFront对S3源站保护功能之前采用源访问身份Origin Access Identity(简称OAI)机制。由于OAI的权限管理颗粒度较粗,且不支持需要AWS Signature V4签名的POST方法,不支持SSE-KMS集成等。由于这一系列的局限,2022年起被新的源访问控制功能Origin Access Control (OAC)所取代。

本文讲述如何切换配置。需要注意的是,对生产环境修改配置可能导致访问失效,请务必提前做好技术储备和测试,生产环境谨慎调整。

Continue reading “将CloudFront对S3源站的访问授权从原有的OAI切换为最新的OAC”

为API Gateway使用自定义域名和mTLS双向证书认证

一、背景

通常使用的HTTPS接口采用的是服务器端Transport Layer Security(以下简称TLS)认证。TLS认证默认是由服务器提供证书,服务器端证书经过全球数家证书颁发机构和顶级CA签署认证的证书,来标识服务器自己的真实、正确的身份。在亚马逊云科技的云平台上,这一服务器端证书通常由ACM生成并管理,配置到Amazon CloudFront、Amazon ELB、Amazon API Gateway(以下简称API Gateway)等服务上。

为了进一步增强安全性,TLS协议建立连接时候,服务器可以要求客户端也提供自己X.509格式的证书用于验明身份。由于服务器和客户端双方都需要提供证书,这种认证方式被称为 mutual Transport Layer Security (以下简称mTLS),也称为双向TLS。

Continue reading “为API Gateway使用自定义域名和mTLS双向证书认证”

为Amazon API Gateway启用IAM身份验证

一、背景

新创建的Amazon API Gateway (以下简称API Gateway)的Regional级别的接口是可以通过互联网进行公开调用的。在API为应用内部调用的场景下,需要设置身份验证。主要的身份验证手段有:IAM身份验证、Lambda转发器验证(Backend可使用数据库)、OAuth/JWT认证。此外,在API Gateway上使用mTLS,配置双向证书,也可以显著提升安全性。

本文介绍如何开启IAM身份验证。

Continue reading “为Amazon API Gateway启用IAM身份验证”