业务系统的核心业务特征与技术挑战包括:
在 Day 1 的实验中,我们已经基于上述要求构建了底层安全基座。为确保所有学员在 Day 2 的操作环境完全一致,并迅速进入高级安全功能的配置,请使用以下 Terraform 脚本在 Cloud Shell 中一键拉起 Day 1 基线环境。
基线内容包含:
secure-vpc),包含专用的子网并开启 VPC 流日志。Day02文件夹下新建一个项目,可以命名为Day02-xxx,或者从Day01中把上周的项目移动到Day02下,但是一定要确保上周的实验完整地完成了。
mkdir ~/day1-baseline && cd ~/day1-baseline# 开启必要的APIgcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com compute.googleapis.com cloudkms.googleapis.com --project=【你的项目ID】
main.tf 文件:
nano main.tf
Ctrl+O,Enter 保存,然后按 Ctrl+X 退出):
terraform {required_providers {google = {source = "hashicorp/google"version = "~> 5.0"}}}provider "google" {# 注意:在 Cloud Shell 中运行时,环境会自动继承您当前的项目 IDregion = "me-central1"}# 1. 创建安全的自定义 VPCresource "google_compute_network" "secure_vpc" {name = "secure-vpc"auto_create_subnetworks = false}# 2. 创建子网并开启全量流日志 (VPC Flow Logs)resource "google_compute_subnetwork" "secure_subnet" {name = "secure-payment-subnet"ip_cidr_range = "10.0.1.0/24"region = "me-central1"network = google_compute_network.secure_vpc.id# 开启私有 Google 访问private_ip_google_access = true# 开启流日志以满足审计要求log_config {aggregation_interval = "INTERVAL_5_SEC"flow_sampling = 1.0metadata = "INCLUDE_ALL_METADATA"}}# 3. IAP 安全防火墙规则 (仅允许 IAP 的 IP 范围 35.235.240.0/20 进行管理访问)resource "google_compute_firewall" "allow_iap" {name = "allow-iap-proxy"network = google_compute_network.secure_vpc.idallow {protocol = "tcp"ports = ["22", "3389"]}source_ranges = ["35.235.240.0/20"]}# 4. 创建 KMS Keyring 与 CryptoKey用于后续数据加密 (CMEK)resource "random_id" "suffix" {byte_length = 4}resource "google_kms_key_ring" "payment_keyring" {name = "payment-keyring-${random_id.suffix.hex}"location = "me-central1"}resource "google_kms_crypto_key" "payment_key" {name = "payment-cmek-key"key_ring = google_kms_key_ring.payment_keyring.idrotation_period = "7776000s" # 90天自动轮转}# 5. 创建 WORM 审计日志存储桶resource "google_storage_bucket" "audit_bucket" {name = "me-bank-audit-logs-${random_id.suffix.hex}"location = "me-central1"uniform_bucket_level_access = true# 开启保留策略 (WORM) 防止篡改,实验设置1天,实际可能为5年retention_policy {retention_period = 86400is_locked = false # 实验环境中不锁定,以免无法删除}}
等待部署完成(约需 2-3 分钟)。完成之后,所有的 Day 1 基础设施已就绪,我们将直接进入 Day 2 实验。
terraform initterraform apply -auto-approve
在 Day 2 的第一阶段,我们将为业务系统部署“支付网关前端管理系统”。这个 Web 应用运行在容器中,负责让银行内部的运维员工查看支付流水状态和系统健康度。
为了满足金融领域的防御要求,我们将使用以下架构:
本模块的设计直接响应以下金融合规要求:
请严格按照以下说明在 GCP 控制台中点击操作。
payment-frontend-clusterme-central1-a(符合数据驻留合规要求)。secure-vpc。secure-payment-subnet。1。e2-micro。由于我们未通过控制平面建立 Bastion 堡垒机,我们将直接使用 GCP Console UI 的工作负载部署功能来下发应用。
payment-web-uius-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0808080pay-ingress现在,前端通过负载均衡器暴露,但处于“裸奔”状态。我们需要启用 IAP 增加身份屏障。
k8s-be-xxxxx)。在金融安全演练中,控制措施必须经过“验证”才能闭环。
前置工作:为负载均衡添加证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout fake.key -out fake.crt -subj "/CN=【你的http IP地址】"gcloud compute ssl-certificates create lab-fake-cert --certificate=fake.crt --private-key=fake.key --global
负载均衡 并进入页面。测试:未经身份验证的非法访问拦截
curl -k -I https://【你的https地址】
HTTP/2 401content-length: 120content-type: text/html; charset=UTF-8x-goog-iap-generated-response: truedate: Tue, 09 Jun 2026 09:51:34 GMTalt-svc: h3=":443"; ma=2592000
如果您希望使用基础设施即代码 (IaC) 的方式快速重现上述复杂的配置,以下是相应的 Terraform/CLI 命令等效实现参考:
私有 GKE 创建等效代码 (Terraform):
gcloud services enable container.googleapis.com --project=【项目名称】cd ..; mkdir 1.5; cd 1.5; nano main.tf
resource "google_container_cluster" "private_gke" {name = "payment-frontend-cluster"location = "me-central1-a"network = "secure-vpc"subnetwork = "secure-payment-subnet"initial_node_count = 1deletion_protection = falseprivate_cluster_config {enable_private_nodes = trueenable_private_endpoint = falsemaster_ipv4_cidr_block = "172.16.0.0/28"}node_config {machine_type = "e2-micro"}}
应用部署、NodePort 与 Ingress 等效命令 (kubectl):
terraform initterraform apply -auto-approvegcloud container clusters get-credentials payment-frontend-cluster --zone=me-central1-a# 1. 部署容器工作负载kubectl create deployment payment-web-ui --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0# 2. 暴露为 NodePort 服务kubectl expose deployment payment-web-ui --type=NodePort --port=80 --target-port=8080 --name=payment-web-ui-service# 3. 创建 Ingress (HTTP 负载均衡器)cat <<EOF | kubectl apply -f -apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: pay-ingressspec:defaultBackend:service:name: payment-web-ui-serviceport:number: 80EOF
自签发证书与 HTTPS 负载均衡挂载等效命令 (gcloud CLI):
# 1. 生成并上传 SSL 证书openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout fake.key -out fake.crt -subj "/CN=127.0.0.1"gcloud compute ssl-certificates create lab-fake-cert --certificate=fake.crt --private-key=fake.key --global# 2. 获取 Ingress 自动创建的 URL Map 名称与公网 IPexport URL_MAP=$(gcloud compute url-maps list --format="value(name)" --filter="name ~ k8s2-um")export IP_ADDRESS=$(gcloud compute forwarding-rules list --format="value(IPAddress)" --limit=1)gcloud compute addresses create payment-static-ip --addresses=$IP_ADDRESS --global# 3. 创建 HTTPS 目标代理并挂载证书gcloud compute target-https-proxies create https-proxy \--url-map=$URL_MAP \--ssl-certificates=lab-fake-cert# 4. 创建 HTTPS 全局转发规则 (开启 443 端口前端)gcloud compute forwarding-rules create https-forwarding-rule \--global \--target-https-proxy=https-proxy \--ports=443 \--address=$IP_ADDRESS
IAP 开启与 IAM 授权等效命令 (gcloud CLI):
# 1. 获取 GKE Ingress 生成的 Backend Service 名称export BACKEND_SVC=$(gcloud compute backend-services list --format="value(name)" --filter="name ~ k8s")# 2. 启用 IAP 身份验证gcloud compute backend-services update $BACKEND_SVC \--global \--iap=enabled# 3. 赋予用户访问权限gcloud iap web add-iam-policy-binding \--resource-type=backend-services \--service=$BACKEND_SVC \--member="【你的邮箱】" \--role="roles/iap.httpsResourceAccessor"
在业务系统的支付系统中,对外暴露的支付网关通常面临着来自全球的 DDoS 攻击以及各类应用层漏洞攻击的威胁。Google Cloud Armor 作为企业级的 Web 应用防火墙 (WAF),能够有效保护部署在外部应用负载均衡器后方的支付网关,抵御如 SQL 注入和跨站脚本等 OWASP Top 10 漏洞。
此外,针对银行客户主要分布在中东地区的特性,我们将实施地理位置封锁 (Geo-blocking),拒绝非预期地区的异常流量,以此大幅度降低系统的攻击面。
本章节将带领您通过 Google Cloud 控制台,配置并挂载 Cloud Armor 防护策略。
bank-payment-waf-policy,政策类型选择“后端安全政策”,范围选择“全球”。origin.region_code != 'AE' && origin.region_code != 'SA' && origin.region_code != 'QA'1000 (数字越小优先级越高)。[!] 实验提示: 如果您当前正在通过非中东地区的 IP(如香港或欧美)进行实验操作,请将自己的节点地区添加到规则允许的地区中,具体的区域代码可以搜索一下,比如新加坡是“SG”。
evaluatePreconfiguredExpr('sqli-v33-stable') || evaluatePreconfiguredExpr('xss-v33-stable')2000。k8s-xxxxxx的后端目标。我们将通过模拟黑客攻击来验证边界防护的有效性。
因为我们之前配置了IAP且没有证书,会导致被IAP在网络层面拦截。为了验证 Cloud Armor 的有效性,我们需要先将 IAP 暂时关闭。
k8sxxxxxx。在页面顶部的 前端 区域,复制 IP:Port 栏位中显示的公网 IP 地址。https://<您的负载均衡器IP>Hello, world! Version: 1.0.0)http://<您的负载均衡器IP>/?id=1'%20OR%20'1'='1"403 Forbidden。这表明 Cloud Armor 的 sqli-v33-stable 规则成功识别并拦截了恶意载荷)。bank-payment-waf-policy。切换到 日志 标签页,点击右侧的 查看政策日志。在日志过滤结果中展开一条日志,您可以清楚地看到 jsonPayload.enforcedSecurityPolicy.outcome 为 "DENY",以及匹配了哪一条具体的签名集。如果您希望使用自动化手段快速配置上述功能,可以使用以下 gcloud CLI 命令:
# 创建基础 Cloud Armor 策略gcloud compute security-policies create bank-payment-waf-policy \--description="WAF Policy for Payment Gateway"# 添加地理封锁规则 (非中东地区拒绝)gcloud compute security-policies rules create 1000 \--security-policy bank-payment-waf-policy \--expression "origin.region_code != 'AE' && origin.region_code != 'SA' && origin.region_code != 'QA'" \--action "deny-403"# 添加 SQLi 与 XSS 防护规则gcloud compute security-policies rules create 2000 \--security-policy bank-payment-waf-policy \--expression "evaluatePreconfiguredExpr('sqli-v33-stable') || evaluatePreconfiguredExpr('xss-v33-stable')" \--action "deny-403"# 将策略绑定至现有的负载均衡后端服务export BACKEND_SVC=$(gcloud compute backend-services list --format="value(name)" --filter="name ~ k8s" --limit=1)gcloud compute backend-services update $BACKEND_SVC \--global \--security-policy bank-payment-waf-policy
在支付系统的架构中,保护敏感数据(如数据库密码、API密钥、支付卡信息以及客户的个人可识别信息是重中之重。特别是在中东地区的银行业务中,对于敏感数据的本地化和隐私保护有着严格的要求。本模块将指导您如何使用 Secret Manager 安全地集中存储和管理数据库密码,以及如何利用 Cloud DLP自动扫描并脱敏存储在云端存储桶中的信用卡号等敏感数据。
在本节中,我们将通过 Google Cloud Console (Web UI) 将一个用于支付数据库连接的敏感密码安全地保存到 Secret Manager 中。
payment-db-password。me-central1(多哈)。S3cur3!P@ssw0rd4MEBank。在本节中,我们将使用 Sensitive Data Protection (原 Cloud DLP) 来扫描一个包含中东地区信用卡交易样本记录的 Cloud Storage 存储桶,配置一个检测作业,将敏感数据(特别是 PAN 和个人姓名)检测出来并进行脱敏处理。
me-bank-dlp-sample-data-<您的项目号>(名称必须全局唯一),点击“继续”。me-central1。sample_transactions.csv 的文件,填入以下虚拟数据(包含虚拟的中东人名和信用卡号):
TransactionID,CustomerName,CreditCardNumber,Amount1001,Ahmed Al-Farsi,4242-4242-4242-4242,150.001002,Fatima Zahra,5105-1051-0510-5100,320.501003,Omar Saeed,6011-1111-1111-1117,75.00
sample_transactions.csv 上传到该存储桶中。me-bank-dlp-output-<您的项目号>。由于我们需要对信用卡号进行特定的掩码处理(保留后4位,其余用 * 替换),我们需要先创建一个脱敏模板。
cc-masking-template。me-central1。*。指定要忽略的字符并输入-。12 以显示出最后的4位。指定 InfoType并点击管理InfoType。在弹窗内搜索并添加CREDIT_CARD_NUMBER。cc-masking-template下方会显示ID。将ID复制下来(例子:projects/day2-test2/locations/me-central1/deidentifyTemplates/cc-masking-template),后续步骤会用到。cc-masking-job。me-central1。csv。CREDIT_CARD_NUMBER。gs://me-bank-dlp-output-xxxxxx。csv。CREDIT_CARD_NUMBER的具体匹配次数。me-bank-dlp-output-<您的项目号>。
TransactionID,CustomerName,CreditCardNumber,Amount1001,Ahmed Al-Farsi,****-****-****-4242,150.001002,Fatima Zahra,****-****-****-5100,320.501003,Omar Saeed,****-****-****-1117,75.00
如果您希望跳过 UI 步骤并使用命令行自动完成上述核心操作,请使用 Cloud Shell 运行以下命令:
# 创建 Secretgcloud secrets create payment-db-password \--replication-policy="automatic"# 添加 Secret 版本(即实际的密码值)echo -n 'S3cur3!P@ssw0rd4MEBank' | gcloud secrets versions add payment-db-password \--data-file=-# 验证gcloud secrets versions access latest --secret="payment-db-password"
(注:以下为创建 DLP 去标识化掩码模板以及触发 GCS 存储桶脱敏作业的核心 Terraform 资源示例)
data "google_project" "current" {}resource "random_id" "bucket_suffix" {byte_length = 4}resource "google_storage_bucket" "sample_data" {name = "me-bank-dlp-sample-data-${random_id.bucket_suffix.hex}"location = "me-central1"uniform_bucket_level_access = trueforce_destroy = true # 方便实验后一键销毁}resource "google_storage_bucket" "dlp_output" {name = "me-bank-dlp-output-${random_id.bucket_suffix.hex}"location = "me-central1"uniform_bucket_level_access = trueforce_destroy = true}# 1. 创建去标识化模板resource "google_data_loss_prevention_deidentify_template" "cc_masking" {parent = "projects/${data.google_project.current.project_id}/locations/me-central1"description = "Mask credit card numbers leaving last 4 digits"display_name = "cc-masking-template"deidentify_config {info_type_transformations {transformations {info_types {name = "CREDIT_CARD_NUMBER"}primitive_transformation {character_mask_config {masking_character = "*"number_to_mask = 12reverse_order = falsecharacters_to_ignore {characters_to_skip = "-"}}}}}}}# 2. 创建 DLP 检查与脱敏作业触发器resource "google_data_loss_prevention_job_trigger" "cc_masking_trigger" {parent = "projects/${data.google_project.current.project_id}/locations/me-central1"description = "Scan GCS bucket for credit card data and mask them into output bucket"display_name = "cc-masking-job"triggers {schedule {recurrence_period_duration = "2592000s"}}inspect_job {inspect_config {info_types {name = "CREDIT_CARD_NUMBER"}}# 执行操作:制作去标识化副本并输出到 GCSactions {deidentify {cloud_storage_output = "gs://${google_storage_bucket.dlp_output.name}/"file_types_to_transform = ["CSV"]transformation_config {deidentify_template = google_data_loss_prevention_deidentify_template.cc_masking.id}}}# 扫描目标:输入存储桶storage_config {cloud_storage_options {file_set {url = "gs://${google_storage_bucket.sample_data.name}/*"}}}}}
gcloud services enable dlp.googleapis.comterraform initterraform apply -auto-approve
传统的网络防火墙能够限制 IP 层面的访问,但在云原生环境中,核心系统会频繁调用 Cloud Storage 和 Secret Manager 等 PaaS 服务。如果开发人员不慎赋予了过宽的 IAM 权限,外部攻击者甚至内部恶意员工只需拿着合法的凭证,就可以从任何公网环境(如家中的电脑或未授权的外部服务器)直接拉取受保护的云上数据。
为了防范这种数据外发风险,业务系统通常会采用 VPC Service Controls (VPC-SC)。通过在指定的受保护项目外部“画一个圈”,即使拥有最高 IAM 权限的管理员,只要网络环境不在受信任的 VPC 或指定的访问级别内,对这些敏感 PaaS API 的请求也会被底层组织策略直接阻断。
💡 实验说明:由于我们身处共享的培训环境中,本实验将使用 项目级范围化政策 (Project-scoped Policies) 来配置 VPC-SC,确保学员之间的策略互不干扰。
由于边界生效后会立即阻断所有未授权访问,我们需要先创建好存储桶以便后续观察拦截效果。
bank-payment-cde-<您的姓名缩写>(需全局唯一)。me-central1,其余保持默认,点击 Create 完成创建。xxxx-Policy。添加项目,然后选择自己的项目。创建访问权限政策。xxxx-Policy-1。定期。已实施。继续。添加项目,然后选择你的项目。添加项目,选择你的项目,然后选择secure-vpc并点击添加所选网络。storage.googleapis.com),点击 继续。我们将通过“先被拦截、后配置放行”的过程,验证 VPC-SC 零信任数据边界的威力。
gcloud storage ls gs://bank-payment-cde-<您的姓名缩写>ERROR: (gcloud.storage.ls) [账号] does not have permission to access b instance [桶名称] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: xxxx. This command is authenticated as 账号 which is the active account specified by the [core/account] property为了让我们自己能够合法管理数据,我们需要在边界上开一个入站规则,仅允许我们当前的员工账号访问。
xxxx-Policy-1) ,然后点击页面上方的修改。添加身份,在输入框中填入您当前登录 GCP 控制台的实验账号邮箱。 保存。向上方向键,重新执行刚才的查看命令:gcloud storage ls gs://bank-payment-cde-<您的姓名缩写>如果您希望使用基础设施即代码 (IaC) 或自动化脚本快速重现本章节的配置,以下是针对项目级范围化访问政策 的等效实现参考:
# 1. 环境变量准备 (请替换为您的实际值)export PROJECT_ID="您的项目ID"export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")export USER_EMAIL="您当前登录的实验账号邮箱"export ORG_ID=$(gcloud organizations list --format="value(ID)" | head -n 1)gcloud access-context-manager policies create \--organization=$ORG_ID \--scopes="projects/$PROJECT_NUMBER" \--title="xxxx-Policy"POLICY_ID=$(gcloud access-context-manager policies list \--organization=$ORG_ID \--format="value(name)" \--filter="title:xxxx-Policy")# 创建入站规则的 YAML 配置文件 (ingress.yaml)cat <<EOF > ingress.yaml- ingressFrom:identities:- user:$USER_EMAILsources:- accessLevel: "*"ingressTo:operations:- serviceName: storage.googleapis.commethodSelectors:- method: "*"resources:- "*"EOF# 创建 VPC-SC 边界,应用资源、受限服务及入站规则gcloud access-context-manager perimeters create xxxx_Policy_1 \--title="xxxx-Policy-1" \--resources="projects/$PROJECT_NUMBER" \--restricted-services="storage.googleapis.com" \--ingress-policies=ingress.yaml \--policy=$POLICY_ID# 使用 update 命令,将安全 VPC 网络绑定到该边界中gcloud access-context-manager perimeters update xxxx_Policy_1 \--policy=$POLICY_ID \--add-resources="//compute.googleapis.com/projects/$PROJECT_ID/global/networks/secure-vpc"
# 1. 声明由外部自动注入的变量variable "org_id" {description = "GCP Organization ID"type = string}# 2. 自动获取当前项目的上下文信息data "google_project" "current" {}# 3. 创建项目级范围化访问政策resource "google_access_context_manager_access_policy" "scoped_policy" {parent = "organizations/${var.org_id}"title = "xxxx-Policy2"scopes = ["projects/${data.google_project.current.number}"]}# 4. 创建边界、绑定 VPC 网络并配置身份级入站白名单resource "google_access_context_manager_service_perimeter" "project_perimeter" {parent = "accessPolicies/${google_access_context_manager_access_policy.scoped_policy.name}"name = "accessPolicies/${google_access_context_manager_access_policy.scoped_policy.name}/servicePerimeters/xxxx_Policy_1"title = "xxxx-Policy-2"perimeter_type = "PERIMETER_TYPE_REGULAR"status {# 保护项目资源,并将 VPC 网络作为资源直接加入边界resources = ["projects/${data.google_project.current.number}","//compute.googleapis.com/projects/${data.google_project.current.project_id}/global/networks/secure-vpc"]# 限制的 PaaS 服务restricted_services = ["storage.googleapis.com"]# 配置入站放行规则 (Ingress Rule)ingress_policies {ingress_from {identities = ["user:【实际的邮箱】"]sources {access_level = "*" # 匹配所有来源}}ingress_to {resources = ["*"]operations {service_name = "storage.googleapis.com"method_selectors {method = "*"}}}}}}
# 1. 确保环境变量已加载export TF_VAR_org_id=$(gcloud organizations list --format="value(ID)" | head -n 1)# 2. 动态获取之前创建的 Policy 的真实 IDPOLICY_NAME=$(gcloud access-context-manager policies list \--organization=$TF_VAR_org_id \--format="value(name)" \--filter="title:xxxx-Policy")# 3. 先删除 VPC-SC 边界gcloud access-context-manager perimeters delete xxxx_Policy_1 \--policy=$POLICY_NAME --quiet# 4. 再删除访问策略 (Policy)gcloud access-context-manager policies delete $POLICY_NAME --quiet# 5. 创建terraform initterraform apply -auto-approve
在安全架构搭建完成后,常态化的安全运营是保障合规的生命线。针对业务系统的支付系统,每天都会产生大量的配置变更和网络流量,任何细微的错误配置都可能导致严重的数据泄露。
合规要求映射:
本节我们将使用 Security Command Center (SCC) 这一 GCP 的原生云态势感知中心。我们将通过 Web 界面模拟制造一个安全漏洞,并在 SCC 中捕获、分析并修复该漏洞,完成一次完整的安全运营闭环。在此之前,我们首先要为项目开启SCC:
Security Command Center 并进入。为了让 SCC 捕捉到真实的告警(Finding),我们先故意“制造”一个安全漏洞。
Cloud Storage,然后点击进入 Cloud Storage > Buckets(存储桶)。allUsers,角色选择 Storage Object Viewer。SCC 会在后台持续扫描您的资源配置。漏洞制造完成后,可能需要等待 10-15 分钟,扫描器才能生成并展示告警(取决于扫描周期的触发机制)。
如果您希望通过命令行快速完成上述操作:
# 模拟漏洞 1:关闭存储桶的“公开访问权限预防”gcloud storage buckets update gs://[实际桶名称] \--no-public-access-prevention# 模拟漏洞 2:授予 allUsers 读取权限,正式将存储桶公开gcloud storage buckets add-iam-policy-binding gs://[实际桶名称] \--member="allUsers" \--role="roles/storage.objectViewer"# (等待 SCC 扫描出告警并进行调查后...)# 修复漏洞 1:移除公开权限gcloud storage buckets remove-iam-policy-binding gs://[实际桶名称] \--member="allUsers" \--role="roles/storage.objectViewer"# 修复漏洞 2:重新开启“公开访问权限预防”gcloud storage buckets update gs://[实际桶名称] \--public-access-prevention
强烈建议:实验完成后务必清理资源以避免不必要的费用产生!
在 Day 2 的实验中,我们创建了诸多高价值的资源,包括 GKE 集群、外部负载均衡、Cloud Armor 以及可能的数据库或 KMS 密钥。
由于我们在 Day 1 / Day 2 的基线中启用了 WORM(不可篡改)存储桶锁定,单向删除部分资源可能会遇到权限拒绝的报错。因此,清理环境最干净、最彻底的方法是直接删除整个 GCP Project。
请在 Cloud Shell 中执行以下命令,完成最终的资源清理:
# 请将以下变量替换为您在 Day 2 实验中实际使用的 Project IDexport TARGET_PROJECT="您的项目ID"# 1. 解除项目上可能存在的留置权(Lien)。# 在开启了某些安全服务(如 VPC-SC 或高级计费)时,GCP 可能会对项目添加 Lien 以防止意外删除。# 获取 Lien 名称:gcloud alpha resource-manager liens list --project=$TARGET_PROJECT# 删除 Lien (请替换下方命令中的 LIEN_NAME):# gcloud alpha resource-manager liens delete [LIEN_NAME]# 2. 强制删除项目# 这会将项目标记为待删除,项目内部的所有计费将立刻停止,包括那些被 WORM 策略锁定的存储桶。gcloud projects delete $TARGET_PROJECT# 3. 退出项目上下文gcloud config unset project# 4. (可选)如果您不再需要用于隔离的沙盒文件夹,可以将其删除。# 注意:只有当文件夹内的所有项目都被标记为删除后,才能删除该文件夹。export FOLDER_ID="您的沙盒文件夹ID"gcloud resource-manager folders delete $FOLDER_ID
注:项目被执行删除命令后,会进入 30 天的待删除状态,这期间您无法使用该项目的名字,但所有资源已停止计费。30 天后,项目及其内含数据将被 GCP 物理销毁,不可恢复。
至此,Day 2 的云安全合规工程实验全部结束!感谢您的参与!