在这个循序渐进的指南中,我将分享我所遵循的额外步骤,以最少的权限启用Google Dataflow,并启用Google KMS加密和所有必要的服务账户,这些都是人们在安全生产部署中应该采用的。
我将在现有的GCP快速入门指南的基础上,介绍Python的Dataflow。这个指南对学习Dataflow很有帮助,但在安全方面,它是一个No-No。它要求你遵循的第一个步骤是创建一个具有所有者角色的服务账户。
什么是谷歌Dataflow?
Google Dataflow是开源库Apache Beam的一个云服务封装器,它使你能够将数据从任何源头输送到任何目的地,并在两者之间进行强大的转换。
通过Google Dataflow,你可以以无服务器的方式将数据从任何数据源实时或以批处理模式流向任何数据汇。
管道是用Java或Python的Apache Beam创建的。
Dataflow使用的是计算引擎
Google Dataflow是一个具有自动伸缩功能的无服务器解决方案,但它依赖于GCP计算引擎。Google Dataflow根据它被允许使用的机器类型和我们在开始工作前提供的任何限制条件(如最大工作人数),决定它需要多少台虚拟机。
根据需要处理的数据量,定期审查最初的工人数量。任何不再需要的虚拟机都会自动销毁。
如果约束条件足够高,Google Dataflow能够在极短的时间内处理大量的数据。
为了好玩,我建议你观看这个谷歌视频,了解谷歌数据流在电车旅行中的演示。
谷歌数据流的应用案例
一个常见的使用情况是,从内部数据库中检索加载数据,将其转换并加载到BigQuery进行数据分析。
或者对于那些熟悉机器学习的人来说,Google Dataflow也可以用来建立一个数据管道,为Tensorflow提供数据,以定期使用新鲜数据训练模型。
在金融领域还有许多其他潜在的用例,通常需要处理大量的敏感数据。
有了Google Dataflow,我们就可以使用Google KMS的客户管理密钥对数据进行加密,并限制数据的存储和处理地点。
Google Dataflow的设置指南
创建你的GCP项目
你确实需要一个GCP项目来尝试Dataflow。如果你没有,请创建一个。
启用所需的API
要开始使用Google Dataflow,你需要启用以下API。
- Google Dataflow
- 谷歌Dataflow API
- 谷歌计算引擎
- 谷歌云日志
- 谷歌云存储。
- 谷歌云存储JSON
- 谷歌大查询
- 谷歌云Pub/Sub
- 谷歌云数据存储
- 谷歌云资源管理器API。
创建所需的服务账户
为了运行Dataflow,我们需要创建至少两个服务账户。
- 用于管理具有dataflow-admin角色的Google Dataflow作业的SA:
名称: [email protected]_ID.iam.gserviceaccount.com
角色:roles/dataflow-admin
通过给服务账户分配角色/dataflow-admin,它将有足够的权限来创建和管理数据流作业。 - 使用dataflow-worker角色运行Google Dataflow作业的SA:
名称: [email protected]_ID.iam.gserviceaccount.com
角色:roles/dataflow-worker
从安全的角度来看,我们不使用默认的计算引擎账户做任何事情是很重要的,因为它有一系列广泛的权限。
因此,当启动一个数据流作业时,我们应该覆盖默认的服务账户,并指定一个具有更多权限的账户。通过使用role/dataflow-worker角色,我们有足够的权限来运行一个数据流作业。其他GCP产品需要的更多权限,可以添加到这个服务账户。
创建所需的Buckets
我们需要创建GCS Buckets来存储结果和任何由Dataflow工作者创建的临时文件。
可以只用一个GCS桶来运行Google Dataflow作业,但你可能想为你要存储的不同类型的数据创建一个以上的桶。
- 用于临时文件的GCS桶:
桶的名称:dataflow-data-temp - 用于存储文件的GCS桶:
桶名:dataflow-data-staging - 用于输出文件的GCS Bucket:
Bucket**Name:**dataflow-data-output
有一个以上的桶的好处是,现在我们可以设置一个生命周期规则,适合于每一种类型的数据存储,这样任何超过x天的对象都会被自动删除。
生命周期规则:
-年龄:3
-动作: 删除
对于每个桶,我们也可以选择使用谷歌KMS的客户管理的加密密钥进行加密。
运行Python Wordcount Apache Beam例子
我不打算定义所有的步骤,而只是概述一下教程中你需要改变的步骤。
- 为服务账户[email protected]_ID.iam.gserviceaccount.com生成JSON密钥,并使用该服务账户来启动Dataflow作业
- 我们需要向python wordcount例子传递额外的参数。
python -m apache_beam.examples.wordcount \ --region DATAFLOW_REGION \ --input gs://dataflow-samples/shakespeare/kinglear.txt \ --output gs://dataflow-data-output/results/outputs \ --runner DataflowRunner \ --project PROJECT_ID \ --temp_location gs://dataflow-data-temp/tmp --staging_location gs://dataflow-data-staging/staging --dataflow_kms_key <PATH_TO_YOUR_KMS_KEY> --service_account_email [email protected]_ID.iam.gserviceaccount.com
请注意,我们还提供了一个Google KMS Key(CMEK)与**- dataflow_kms_key**。这个选项可以确保任何可以在Dataflow中加密的数据,都可以通过Google KMS进行加密。
总结
我已经给出了补充Google Dataflow与Python的快速入门教程的步骤,并允许你为创建Google Dataflow的安全实施打下坚实的基础。