Google Cloud Platform | 使用 Terraform 的分层防火墙策略自动化
【本文由Cloud Ace整理发布,更多内容请访问Cloud Ace 官网】
防火墙规则是 Google Cloud 中网络安全的重要组成部分。Google Cloud 中的防火墙大致可分为两种类型;网络防火墙策略和分层防火墙策略。 虽然网络防火墙直接与 VPC 相关联以允许/拒绝流量,但分层防火墙可以被视为使用资源层次结构在整个组织中创建和执行策略的策略引擎。可以在组织级别或文件夹级别实施分层策略。与网络防火墙规则一样,分层防火墙策略规则可以允许或拒绝流量,还可以将评估委托给较低级别的策略或网络防火墙规则本身(使用 go_next)。较低级别的规则不能覆盖资源层次结构中较高位置的规则。这使组织范围内的管理员可以在一个地方管理关键的防火墙规则。
那么,现在让我们考虑几个使用分层防火墙策略的场景。1.减少网络防火墙的数量示例:假设在 xyz.com 中根据其业务部门获得了 6 个共享 VPC。拒绝 SSH 访问公司中的任何虚拟机是一种安全策略,即拒绝 TCP 端口 22 流量。对于网络防火墙,需要在 6 个地方(每个共享 VPC)执行此规则。每个网段越来越多的细粒度网络防火墙规则意味着更多的接触点,即意味着更多的漂移和事故机会。安全管理员忙于手持,几乎总是成为即使是简单的防火墙更改的瓶颈。借助分层防火墙策略,安全管理员可以创建通用/单一策略来拒绝 TCP 端口 22 流量并将其强制执行到 xyz.com 组织。或者从策略中明确定位一个/多个共享 VPC。这样,单个策略就可以定义更广泛的流量控制态势。
2. 使用集中策略管理关键防火墙规则,并在 VPC 级别安全地委派非关键控制示例:在 xyz.com 上,SSH 到 GCE 是被严格禁止的,并且是不可协商的。审计师需要这个。允许/拒绝到端口 443 的 TCP 流量取决于流量要到达的共享 VPC。在这种情况下,安全管理员可以创建一个策略来拒绝 TCP 端口 22 流量并将该策略强制执行到 xyz.com。另一个策略是为 TCP 端口 443 流量创建“go_next”并在下一个较低级别决定是否允许此流量。然后,使用网络防火墙规则在共享 VPC 级别允许/拒绝 443 流量。
通过这种方式,安全管理员可以在更高级别进行更广泛的控制,以强制执行流量控制策略并在可能的情况下进行委派。在一个地方管理最关键的防火墙规则的能力也使项目级管理员(例如,项目所有者、编辑或安全管理员)不必跟上不断变化的组织范围的政策。
通过分层防火墙策略,安全管理员可以集中实施、管理和观察流量控制模式。
创建、配置和实施分层防火墙策略
分层防火墙策略有 3 个主要组成部分;规则、政策和协会。
从广义上讲,“规则”是一种决策结构,用于声明是否应允许、拒绝或将流量委托给下一级进行决策。“策略”是规则的集合,即一个或多个规则可以与策略相关联。“关联”说明政策在谷歌云资源层次结构中的执行点。
这些概念在产品页面上有广泛的解释。
规则、策略和关联的简单可视化看起来像

分层防火墙策略的基础架构即代码 (Terraform)
需要将3 个Terraform 资源拼接在一起以构建和实施分层防火墙策略。
#1 政策Terraform 资源– google_compute_firewall_policy
在这个模块中,最重要的参数是“parent”参数。分层防火墙策略,如项目,由文件夹或组织资源作为父级。请记住,这不是执行或关联策略的文件夹。它只是一个拥有您正在创建的策略的文件夹。使用文件夹来拥有分层防火墙策略,还简化了 IAM 来管理谁可以创建/修改这些策略,即只需将 IAM 分配给该文件夹。
对于扩展环境,建议创建一个单独的“firewall-policy”文件夹来托管所有分层防火墙策略。
样本
/*
Create a Policy
*/
resource "google_compute_firewall_policy" "base-fw-policy" {
parent = "folders/<folder-id>"
short_name = "base-fw-policy"
description = "A Firewall Policy Example"
}
您可以使用以下命令获取“firewall-policy”文件夹的文件夹 IDgcloud resource-manager folders list --organization=<your organization ID> --filter='<name of the folder>'例如,如果您的防火墙策略文件夹名为“firewall-policy”,则使用gcloud resource-manager folders list --organization=<your organization ID> --filter='firewall-policy'#2 规则Terraform 资源– google_compute_firewall_policy_rule此资源定义中的大多数参数都非常明显,但有几个参数需要特别考虑。
disabled– 表示是否禁用防火墙策略规则。设置为 true 时,不会强制执行防火墙策略规则,流量的行为就好像它不存在一样。如果未指定,将启用防火墙策略规则。enable_logging– 强烈建议启用防火墙日志记录,以获得许多未来的运营优势。要启用它,请传递true给此参数。target_resources– 当您想要针对此规则的某些共享 VPC 时,此参数会派上用场。您需要传递共享 VPC 的 URI 路径。顶部获取 VPC 的 URI 使用此命令
gcloud config set project <Host Project ID>
gcloud compute networks list --uri
样本
下面是一些示例 Terraform 代码,用于创建优先级为 9000 的防火墙策略规则,以拒绝来自 35.235.240.0/20 CIDR 块的 TCP 端口 22 流量(用于身份感知代理)
/*
Create a Firewall rule #1
*/
resource "google_compute_firewall_policy_rule" "base-fw-rule-1" {
firewall_policy = google_compute_firewall_policy.base-fw-policy.id
description = "Firewall Rule #1 in base firewall policy"
priority = 9000
enable_logging = true
action = "deny"
direction = "INGRESS"
disabled = false
match {
layer4_configs {
ip_protocol = "tcp"
ports = [22]
}
src_ip_ranges = ["35.235.240.0/20"]
}
target_resources = ["https://www.googleapis.com/compute/v1/projects/<PROJECT
-ID>/global/networks/<VPC-NAME>"]
}
#3 关联Terraform 资源– google_compute_firewall_policy_association在attachment_target传递要执行此策略的文件夹 ID 中,即此文件夹下的所有内容(所有项目)都将获得此策略。对于共享 VPC,目标文件夹应该是您的宿主项目的父文件夹。样本
/*
Associate the policy
*/
resource "google_compute_firewall_policy_association" "associate-base-fw-policy" {
firewall_policy = google_compute_firewall_policy.base-fw-policy.id
attachment_target = "folders/<Folder ID>"
name = "Associate Base Firewall Policy with dummy-folder"
}
执行这些策略后,您可以在“VPC 网络-> 防火墙”下的控制台上看到它,如下所示。在防火墙策略文件夹中,将显示创建的分层防火墙策略。请记住,每个策略都有 4 个默认防火墙规则,因此即使您在策略中创建单个规则,规则计数也将为 5,如下面的面板所示。
进入策略以查看您创建的规则和策略的关联(显示在 2 个面板中)。 

概括
分层防火墙策略简化了在整个 Google Cloud 环境中实施一致的流量控制策略的复杂过程。借助本文中展示的 Terraform 模块和自动化,它使安全管理员能够使用策略引擎和已知的基础架构即代码平台构建护栏。
Google Cloud Platform | 使用 Terraform 的分层防火墙策略自动化的更多相关文章
- 用Google Cloud Platform搭建***服务教程
之前FQ一直用的是***,天有不测风云,前几天发现ss服务挂了.更可怕的是ping都ping不通,多方打听,***中文社区已经炸开锅了,原因就是IP被封了.需要付费更换IP.然后到现在还是没有给我更换 ...
- 使用Google Cloud Platform构建机器学习项目-宠物识别
宠物识别我们使用到了tensorflow object-detection API (https://github.com/tensorflow/models/tree/master/researc ...
- Google Cloud Platform 续
Google Cloud Platform 创建新实例 地区:australia-southeast1-a 机器类型:1个vCPU n1-standard-1 系统:Ubuntu 16.04 LTS ...
- 使用Gardener在Google Cloud Platform上创建Kubernetes集群
Gardener是一个开源项目,github地址: https://github.com/gardener/gardener/ 使用Gardener,我们可以在几分钟之内在GCP, AWS, Azur ...
- 如何取消 Google Cloud Platform 试用 & 关闭 GCP 帐号 & 删除信用卡 & 取消订阅
如何取消 Google Cloud Platform 试用 & 关闭 GCP 帐号 & 删除信用卡 & 取消订阅 关闭您的 Google Cloud Platform 帐号 s ...
- 对Google cloud platform 做了点研究
Google也推出了云计算基础服务, 加上微软Azure,亚马逊AWS, 都齐活了. 下面是研究了一下对其的一个初步了解. 计算: Compute Engine IaaS平台,提供VM,操作灵 ...
- Google Cloud Platform
一个离我们很遥远,很遥远的公司.作为全球三大公有云厂商之一,在国内根本听不到他的声音.其实吧,听到了也没用,因为在国内没法用!AWS还在纠结的落地过程中挣扎,GCP基本上就当不存在吧. 抛开这些乌烟瘴 ...
- Google Cloud服务免费申请试用以及使用教程
简介 Google Cloud Platform lets you build and host applications and websites, store data, and analyze ...
- google cloud storage products
https://cloud.google.com/products/storage/ BigTable Cloud Bigtable 是 Google 面向大数据领域的 NoSQL 数据库服务.它也是 ...
随机推荐
- HTML躬行记(3)——WebRTC视频通话
WebRTC 在创建点对点(P2P)的连接之前,会先通过信令服务器交换两端的 SDP 和 ICE Candidate,取两者的交集,决定最终的音视频参数.传输协议.NAT 打洞方式等信息. 在完成媒体 ...
- Android 跨进程渲染
本项目用于验证 Android 是否能够跨进程渲染 View,最终实现了在子进程创建WebView,主进程显示的功能. 一.跨进程渲染的意义 有一些组件比如 WebView 如果在主进程初始化,会大大 ...
- Re:从零开始教你使用 Sublime Text
目录 Re:从零开始教你使用 Sublime Text 0.前言 0-0.关于我为什么要写这篇文章 0-1.关于这篇文章会讲什么 0-2.适用人群 0-4.其他 0-5.无用的统计 1.安装和基础功能 ...
- jquery 中的 $(“#”) 与 js中的document.getElementById(“”) 的区别
以前没注意过,认为jquery 中的 $("#") 与 document.getElementById("") 是一回事,指的是同一个东西. 这次项目开发在使用 ...
- Django 接收到body后 json.loads() 报编码错误 且在报错之前打印body为空
python版本 3.7.5 Django版本 3.2.5 猜测可能是Django版本的问题,因为之前并没有出现过如此奇葩的问题. body = request.body.decode('utf-8' ...
- PHY驱动调试之 ---PHY设备驱动(三)
1. 前言 内核版本:linux 4.9.225,以freescale为例.(部分内容待修改和补充,不一定准确) 2. 概述 上一篇文章讲了控制器的驱动使用的是platform总线的连接方式,本节要讲 ...
- 关于python统计一个列表中每个元素出现的频率
第一种写法: a = ['h','h','e','a','a'] result = {} for i in a: if i not in result: result[i] = 1 else: res ...
- C++编程笔记(通信)(win32平台)
目录 一.初始化网络库 二.socket套接字 2.1服务端 2.2客户端 三.发送.接收数据 3.1发送 3.2接收数据 四.自定义的结构体 4.1 发送端 4.2接收端 IPV6版本套接字的创建 ...
- K8s 超详细总结
一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...
- Jenkins&&gitlab2
Jenkins slave 添加jenkins slave节点: jenkins slave节点创建工作目录与基本环境配置,如果jenkins slave节点需要clone代码和执行java 代码编 ...