如何在GCP中通过Terraform控制共享VPC中子网的访问权限
限制特定项目访问共享VPC生产子网的实现方案
一、核心思路:并非只能靠策略,可通过子网级IAM权限精准控制
共享VPC默认会把整个VPC的所有子网开放给已附加的服务项目,但你可以通过子网级别的IAM权限配置,直接指定哪些服务项目能访问特定子网(比如生产子网),这比全局策略更精准高效。当然也可以搭配防火墙规则做进一步流量管控,但IAM权限是基础的访问准入控制手段。
二、Terraform实现方法
在你现有配置的基础上,添加google_compute_subnetwork_iam_member资源,给允许访问生产子网的服务项目分配roles/compute.networkUser角色(该角色允许项目使用子网内的网络资源,比如创建虚拟机、访问子网IP等)。
示例代码(适配你的现有配置)
首先在variables.tf中定义允许访问生产子网的项目列表变量:
variable "allowed-production-projects" { type = set(string) description = "允许访问生产子网的服务项目ID列表" }
然后在现有配置末尾添加以下资源:
# 给指定服务项目分配生产子网的访问权限 resource "google_compute_subnetwork_iam_member" "production_subnet_access" { for_each = var.allowed-production-projects project = var.host-project region = google_compute_subnetwork.production.region subnetwork = google_compute_subnetwork.production.name role = "roles/compute.networkUser" member = "project:${each.key}" }
三、补充说明
- 权限细分:
roles/compute.networkUser是基础的子网使用权限,如果你需要更严格的控制(比如只允许读取子网信息而不能创建资源),可以替换为roles/compute.networkViewer等细分角色。 - 原配置的作用:你现有的
google_compute_shared_vpc_service_project仅完成服务项目与共享VPC的绑定,不会限制子网访问范围,必须配合上述IAM配置才能实现子网级的访问限制。 - 防火墙增强管控:如果需要进一步限制流量(比如只允许特定项目的虚拟机访问生产子网的特定端口),可以添加
google_compute_firewall资源,指定源项目为允许的服务项目,目标为生产子网的IP段。
内容的提问来源于stack exchange,提问作者jagrat
相关产品推荐
相关产品推荐

