Etiketli global ağ güvenlik duvarı politikası

1. Giriş

Ağ güvenlik duvarı politikaları

Güvenlik duvarları, güvenli bir bulut ortamının temel yapı taşlarıdır. Daha önce, VPC güvenlik duvarlarını değiştirmeden kuruluş ve klasör düzeyinde güvenlik duvarı politikaları sunmuştuk. Bu sürümde, güvenlik duvarı politikası yapısını VPC düzeyine kadar genişleteceğiz ve Google Cloud'un kaynak hiyerarşisinde birleşik güvenlik duvarı desteği sağlamak, güvenlik duvarı politikası denetimini güvenli, esnek ve ölçeklenebilir bir şekilde yönetirken tutarlı bir kullanıcı deneyimi sunmak için mevcut güvenlik duvarı politikası desteğinde çeşitli iyileştirmeler yapacağız.

Ağ güvenlik duvarı politikası, güvenlik duvarı kuralları için kapsayıcı görevi görür. Bir ağ güvenlik duvarı politikasında tanımlanan kurallar, politika bir VPC ağıyla ilişkilendirilene kadar hiçbir yerde zorunlu kılınmaz. Her VPC ağıyla ilişkili bir ağ güvenlik duvarı politikası olabilir. Ağ güvenlik duvarı politikaları, güvenlik duvarı kurallarında IAM tarafından yönetilen etiketleri (veya yalnızca etiketleri) destekler. Bu etiketler, mevcut ağ etiketlerinin yerini alır ve iş yüküne kimlik sağlamak için kullanılabilir.

Bir ağ güvenlik duvarı politikasının ağlar arasında paylaşılması ve IAM tarafından yönetilen etiketlerle entegrasyonu, güvenlik duvarlarının yapılandırılmasını ve yönetilmesini büyük ölçüde kolaylaştırır.

Ağ güvenlik duvarı politikasının kullanıma sunulmasıyla birlikte Google Cloud'un güvenlik duvarı politikaları artık aşağıdaki bileşenlerden oluşmaktadır:

  1. Hiyerarşik Güvenlik Duvarı Politikası
  2. VPC Güvenlik Duvarı Kuralları
  3. Ağ Güvenlik Duvarı Politikası ( Global ve Regional)

Hiyerarşik güvenlik duvarı politikaları, kaynak hiyerarşisindeki kuruluş ve klasör düğümlerinde desteklenir. VPC güvenlik duvarı kuralları ve ağ güvenlik duvarı politikaları ise VPC düzeyinde uygulanır. VPC güvenlik duvarı kuralları ile ağ güvenlik duvarı politikaları arasındaki en büyük fark, VPC güvenlik duvarı kurallarının yalnızca tek bir VPC ağına uygulanabilmesidir. Ağ güvenlik duvarı politikaları ise toplu güncelleme gibi diğer avantajların yanı sıra tek bir VPC'ye veya bir grup VPC'ye eklenebilir.

Son olarak, her VPC ağıyla birlikte gelen örtülü güvenlik duvarı kurallarımız da vardır:

  • İşlemi izin ver olan ve hedefi 0.0.0.0/0 olan bir çıkış kuralı
  • Eylemi reddetme, kaynağı 0.0.0.0/0 olan bir giriş kuralı

Varsayılan olarak, yaptırım sırası aşağıdaki diyagramda gösterilir:

abae4597af782b2b.png

VPC güvenlik duvarı kuralları ile genel ağ güvenlik duvarı politikası arasındaki zorunlu kılma sırasının değiştirilebileceğini lütfen unutmayın. Müşteriler, gcloud komutu ile yaptırım sırasını istedikleri zaman belirleyebilir.

Etiketler

Yeni ağ güvenlik duvarı politikası kurallarına entegre edilen etiketler, Google Cloud kaynak hiyerarşisinin kuruluş düzeyinde tanımlanan anahtar-değer çifti kaynaklardır. Bu tür bir etiket, adından da anlaşılacağı gibi, etikette kimin ne yapabileceğini belirten bir IAM erişim denetimi içerir. Örneğin, IAM izinleri, hangi asıl kullanıcıların etiketlere değer atayabileceğini ve hangi asıl kullanıcıların etiketleri kaynaklara ekleyebileceğini belirtmeye olanak tanır. Bir kaynağa etiket uygulandıktan sonra ağ güvenlik duvarı kuralları, trafiğe izin vermek ve trafiği reddetmek için bu etiketi kullanabilir.

Etiketler, Google Cloud'un devralma kaynak modeline uyar. Bu nedenle etiketler ve değerleri, üst öğelerinden hiyerarşi boyunca aktarılır. Bu nedenle, etiketler bir yerde oluşturulup kaynak hiyerarşisi genelindeki diğer klasörler ve projeler tarafından kullanılabilir. Etiketler ve erişim kısıtlaması hakkında daha fazla bilgi için bu sayfayı ziyaret edin.

Etiketler, ağ etiketleriyle karıştırılmamalıdır. Ağ etiketleri, Compute Engine örneklerine eklenebilen dizelerdir. Örnekle ilişkilendirilirler ve örnek hizmetten kaldırıldığında kaybolurlar. VPC güvenlik duvarı kuralları ağ etiketleri içerebilir ancak bulut kaynağı olarak kabul edilmediklerinden IAM erişim denetimine tabi değildir.

Bu belgede Etiketler ve IAM tarafından yönetilen Etiketler'in birbirinin yerine kullanıldığını unutmayın.

Ne oluşturacaksınız?

Bu codelab iki bölümden oluşur. İlk bölümde, tek bir VPC ağı kullanılarak ağ güvenlik duvarı politikaları ve etiketler gösterilir. İkinci bölümde ise aşağıdaki şemada gösterildiği gibi, etiketlerin eşlenmiş VPC ağlarında nasıl kullanılacağı açıklanır. Bu nedenle, bu codelab için tek bir proje ve birden fazla VPC ağı oluşturma özelliği gerekir.

b9acf9823df8be04.jpeg

Neler öğreneceksiniz?

  • Ağ güvenlik duvarı politikası oluşturma
  • Ağ güvenlik duvarı politikasıyla etiket oluşturma ve kullanma
  • Etiketleri VPC Ağ Eşleme üzerinden kullanma

Gerekenler

  • Google Cloud projesi
  • Örnekleri dağıtma ve ağ bileşenlerini yapılandırma bilgisi
  • VPC güvenlik duvarı yapılandırması hakkında bilgi

2. Başlamadan önce

Değişken oluşturma/güncelleme

Bu codelab'de, Cloud Shell'de gcloud yapılandırmasının uygulanmasına yardımcı olmak için $değişkenleri kullanılır.

Cloud Shell'de aşağıdakileri yapın:

gcloud config set project [project-id]
export project_id=`gcloud config list --format="value(core.project)"`
export org_id=[org]
export region=us-central1
export zone=us-central1-a
export prefix=fwpolicy

3. VPC ağı ve alt ağı oluşturma

VPC Ağı

fwpolicy-vpc1 adlı politikayı oluşturun.

gcloud compute networks create $prefix-vpc1 --subnet-mode=custom 

Alt ağlar

Seçilen bölgede ilgili alt ağları oluşturun:

gcloud compute networks subnets create $prefix-vpc1-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region

Cloud NAT

fwpolicy-pc1 için Cloud Router'ları ve Cloud NAT ağ geçitlerini oluşturun:

gcloud compute routers create $prefix-vpc1-cr \
  --region=$region --network=$prefix-vpc1

gcloud compute routers nats create $prefix-vpc1-cloudnat \
   --router=$prefix-vpc1-cr --router-region=$region \
   --auto-allocate-nat-external-ips \
   --nat-all-subnet-ip-ranges

4. Örnek oluşturma

Henüz IAP kurulumunun bir parçası olarak tanımlanmamışsa IAP aralıklarından gelen giriş SSH trafiğine izin veren bir güvenlik duvarı kuralı oluşturun:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc1 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

fwpolicy-vpc1 istemci ve web sunucusu örneklerini oluşturun:

gcloud compute instances create $prefix-vpc1-www \
   --subnet=$prefix-vpc1-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-vpc1-client \
    --subnet=$prefix-vpc1-subnet --no-address --zone $zone

VPC güvenlik duvarı kuralları tanımlanmadığından (bu bölümün başında IAP yapılandırılırken oluşturulması gereken SSH'ye izin ver kuralı hariç) ve varsayılan olarak tüm giriş trafiği reddedildiğinden istemci örnekleri ilgili web sunucularına erişemez. İsteğin zaman aşımına uğrayacağını doğrulamak için yeni bir pencere açın ve fwpolicy-vpc1-client örneğine bir SSH oturumu başlatıp web sunucusunu curl komutuyla çağırmayı deneyin:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Beklenen çıktı:

curl: (28) Connection timed out after 2001 milliseconds

İsteğe bağlı olarak, Cloud Shell aracılığıyla fwpolicy-vpc1 için tanımlanmış VPC güvenlik duvarı kuralı olmadığını doğrulayın:

gcloud compute firewall-rules list --filter="network:$prefix-vpc1"

5. Genel ağ güvenlik duvarı politikası

Global ağ güvenlik duvarı politikası oluşturma:

gcloud compute network-firewall-policies create \
   $prefix-example --description \
   "firewall-policy-description" --global

Web trafiğine izin veren bir kural ekleyin:

gcloud compute network-firewall-policies rules create 500 \
    --action allow \
    --description "allow-web" \
    --layer4-configs tcp:80,tcp:443 \
    --firewall-policy $prefix-example \
    --src-ip-ranges 10.0.0.0/16 \
    --global-firewall-policy --enable-logging

Ağ güvenlik duvarı politikasını açıklayın ve kuralın başarıyla added olduğunu doğrulayın:

gcloud compute network-firewall-policies describe \
    $prefix-example --global

Beklenen çıkış (Çıkışın başına kaydırın. Örtülü kuralların da gösterildiğini unutmayın.):

creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
  description: allow-web
  direction: INGRESS
  disabled: false
  enableLogging: true
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: tcp
      ports:
      - '80'
    - ipProtocol: tcp
      ports:
      - '443'
    srcIpRanges:
    - 10.0.0.0/16
  priority: 500
  ruleTupleCount: 5
...

Ağ güvenlik duvarı politikasını fwpolicy-vpc1 ile ilişkilendirin:

gcloud compute network-firewall-policies associations create \
     --firewall-policy $prefix-example \
     --network $prefix-vpc1 \
     --name $prefix-vpc1-association \
     --global-firewall-policy

Politikanın fwpolicy-vpc1 ağına başarıyla uygulandığını doğrulayın:

gcloud compute networks get-effective-firewalls $prefix-vpc1

Beklenen çıktı (öncelikli hiyerarşik güvenlik duvarı politikaları varsa ilgili kuralların en üstte gösterileceğini unutmayın):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Kuralın fwpolicy-vpc1 web sunucusuna da başarıyla uygulandığını doğrulayın:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Beklenen çıkış, önceki komuta (fwpolicy-vpc1 etkili güvenlik duvarları) benzerdir:

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

vpc1-client SSH oturumuna geri dönün ve tekrar curl komutunu çalıştırmayı deneyin (Aşağıdaki komutta fwpolicy ön eki kullanıldığı varsayılmaktadır. Bunun yerine farklı bir ad kullanıldıysa lütfen curl komutunu buna göre ayarlayın):

user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Page on vpc1-www in network vpc1 zone us-central1-a

Cloud Shell'den, ağ güvenlik duvarı politikasının fwpolicy-vpc1'e uygulandığını doğrulayın:

gcloud compute network-firewall-policies describe \
   $prefix-example --global

Beklenen çıktı (çıktının başına gitmek için yukarı kaydırın):

---
associations:
- attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1
  name: fwpolicy-vpc1-association
...

6. IAM tarafından yönetilen etiketler

Etiket, bir kuruluşa, klasöre veya projeye eklenebilen bir anahtar/değer çiftidir. Daha fazla bilgi için Etiket oluşturma ve yönetme ve gerekli izinler başlıklı makaleleri inceleyin.

tagAdmin rolü, yeni etiketler oluşturmanıza, mevcut etiketleri güncellemenize ve silmenize olanak tanır. Bu rolü kuruluş yöneticisi verebilir. Cloud Shell'den IAM politikasını güncelleyerek kullanıcılarınıza tagAdmin rolünü ekleyin. Her önceden tanımlanmış role hangi izinlerin dahil olduğunu görmek için izin referansı sayfasını kullanın.

gcloud organizations add-iam-policy-binding $org_id \
  --member user:[user@example.com] --role roles/resourcemanager.tagAdmin

Hangi kullanıcıların resourcemanager.tagAdmin rolüne sahip olduğunu doğrulamak için aşağıdaki komutu çalıştırın:

gcloud organizations get-iam-policy $org_id --flatten=bindings \
  --filter=bindings.role:roles/resourcemanager.tagAdmin

Yeni bir etiket anahtarı oluşturun:

gcloud resource-manager tags keys create tags-vpc1 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc1

Beklenen çıktı:

Waiting for TagKey [tags-vpc1] to be created...done.                                                                                                                
createTime: '2022-09-23T20:49:01.162228Z'
etag: PwvmFuHO4wK1y6c5Ut2n5w==
name: tagKeys/622132302133
namespacedName: ORGANIZATION_ID/tags-vpc1
parent: organizations/ORGANIZATION_ID
purpose: GCE_FIREWALL
purposeData:
  network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383
shortName: tags-vpc1
updateTime: '2022-09-23T20:49:03.873776Z'

Yeni etiket değerleri oluşturun:

gcloud resource-manager tags values create web-servers \
   --parent=$org_id/tags-vpc1

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc1

Etiket değerlerinin başarıyla oluşturulduğunu doğrulayın:

gcloud resource-manager tags values list \
   --parent=$org_id/tags-vpc1

Beklenen çıktı:

NAME                    SHORT_NAME   DESCRIPTION
tagValues/349564376683  web-servers
tagValues/780363571446  web-clients

Etiketlerin kullanılmadığını onaylamak için Cloud Shell'den mevcut ağ güvenlik duvarı politikası kuralını açıklayın:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Beklenen çıktı:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
priority: 500
ruleTupleCount: 5

Cloud Shell'de kuralı yalnızca vpc1-tags/web-clients etiket anahtarından gelen trafiğe izin verecek şekilde güncelleyin ve kuralı vpc1-tags/web-servers etiket anahtarına sahip örneklerde yükleyin.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients \
    --target-secure-tags $org_id/tags-vpc1/web-servers \
    --global-firewall-policy

Etiketlerin başarıyla uygulandığını ve ETKİN olarak raporlandığını doğrulamak için Cloud Shell'den mevcut ağ güvenlik duvarı politikası kuralını açıklayın:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Beklenen çıktı:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Cloud Shell'den kuralın vpc1'e uygulandığını doğrulayalım:

gcloud compute networks get-effective-firewalls $prefix-vpc1

Beklenen çıktı:

network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Ağ güvenlik duvarı politikası VPC ağıyla ilişkilendirilmiş olsa da etiket örneklere eklenmediği için web trafiğine izin veren kuralın artık web sunucusuna uygulanmadığını doğrulayın:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Beklenen çıkış (500 önceliğine sahip güvenlik duvarı kuralının gösterilmediğini unutmayın):

network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Belirli etikete ve kullanıcıya Etiket Kullanıcısı rolü verin. Her önceden tanımlanmış role hangi izinlerin dahil olduğunu görmek için izin referansı sayfasını kullanın.

gcloud resource-manager tags keys add-iam-policy-binding \
  $org_id/tags-vpc1 \
  --member user:[email] --role roles/resourcemanager.tagUser

gcloud projects add-iam-policy-binding $project_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Rolün başarıyla eklendiğini doğrulayın:

gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1

gcloud projects get-iam-policy $project_id --flatten=bindings \
   --filter=bindings.role:roles/resourcemanager.tagUser

Beklenen çıktı:

bindings:
- members:
  - user:[user]
  role: roles/resourcemanager.tagUser
...

Etiketi fwpolicy-vpc1-www örneğine uygulayın:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-servers \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www

Beklenen çıktı:

Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34
9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done.                                                                            
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata
name: operations/rctb.us-central1-a.6144808968019372877
response:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding
  name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683
  parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502
  tagValue: tagValues/349564376683

Bağlamaları doğrulayın:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www 

Beklenen çıktı:

namespacedTagKey: ORGANIZATION_ID/tags-vpc1
namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers
tagKey: tagKeys/622132302133
tagValue: tagValues/349564376683

Geçerli güvenlik duvarı kurallarını tekrar doğrulayın:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Beklenen çıktı:

network-firewall-policy  fwpolicy-example      490         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

fwpolicy-vpc1-client SSH oturumu sekmesine geri dönün ve curl komutunu çalıştırmayı deneyin:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Bağlanabildiniz mi?

Bunu doğrulamak için kuralı Cloud Shell üzerinden kaynak CIDR ölçütünü kaldıracak şekilde güncelleyin.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-ip-ranges "" \
    --global-firewall-policy

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

fwpolicy-vpc1-client SSH oturumu sekmesine geri dönüp tekrar deneyin:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Etiket fwpolicy-vpc1-client'a eklenmediğinden bağlantının bu kez zaman aşımına uğraması gerekir. Cloud Shell'den ekleyip tekrar deneyin.

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client

fwpolicy-vpc1-client SSH oturumu sekmesine geri dönüp tekrar deneyin. Bu kez başarılı olmanız gerekir.

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

7. VPC Ağ Eşleme Üzerinde IAM Tarafından Yönetilen Etiketler

Cloud Shell'den yeni bir VPC, alt ağ ve istemci oluşturun ve ağlar arasında VPC ağ eşlemesini ayarlayın:

gcloud compute networks create $prefix-vpc2 --subnet-mode=custom 

gcloud compute networks subnets create $prefix-vpc2-subnet \
   --range=10.0.1.0/24 --network=$prefix-vpc2 --region=$region

gcloud compute instances create $prefix-vpc2-client \
   --subnet=$prefix-vpc2-subnet --no-address --zone $zone

gcloud compute networks peerings create vpc1-to-vpc2 \
   --network=$prefix-vpc1 \
   --peer-project $project_id \
   --peer-network $prefix-vpc2

gcloud compute networks peerings create vpc2-to-vpc1 \
    --network=$prefix-vpc2 \
    --peer-project $project_id \
    --peer-network $prefix-vpc1

Henüz IAP kurulumunun bir parçası olarak tanımlanmamışsa IAP aralıklarından gelen giriş SSH trafiğine izin veren bir güvenlik duvarı kuralı oluşturun:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc2 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Etiketler kuruluş genelinde nesneler olsa da etiket anahtarları belirli bir VPC ile ilişkilendirilir ve bu nedenle farklı ağlardaki örneklere uygulanamaz. Bu nedenle, vpc2 için geçerli olan yeni bir etiket anahtarı ve değeri oluşturmanız gerekir:

gcloud resource-manager tags keys create tags-vpc2 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc2

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc2

Yeni etiketi fwpolicy-vpc2-client örneğine uygulayın:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc2/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

İsteğe bağlı olarak, fwpolicy-vpc2-client'ın bağlamalarını listeleyin:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

Beklenen çıktı:

namespacedTagKey: ORGANIZATION_ID/tags-vpc2
namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients
tagKey: tagKeys/916316350251
tagValue: tagValues/633150043992

Cloud Shell'den, yeni etiketlerin kullanılmadığını onaylamak için mevcut ağ güvenlik duvarı politikası kuralını açıklayın:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Beklenen çıktı:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 6
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Mevcut güvenlik duvarı kuralını, eşlenmiş VPC ağındaki etiketlere izin verecek şekilde güncelleyin:

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \
    --global-firewall-policy

Güvenlik duvarı kuralının başarıyla uygulandığından ve ETKİN olarak bildirildiğinden emin olmak için kuralı açıklayın:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Beklenen çıktı:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
  - name: tagValues/633150043992
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Aşağıdaki gcloud komutuyla fwpolicy-vpc1-www'nin IP'sini öğrenin:

gcloud compute instances list --filter=vpc1-www

SSH üzerinden fwpolicy-vpc2-client'a bağlanın ve fwpolicy-vpc1'in IP'sini curl ile çağırmayı deneyin:

user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2

fwpolicy-vpc1-www sunucusuna bağlanabilmeniz gerekir. Temizleme adımları için sonraki bölüme geçin.

8. Temizleme adımları

Cloud Shell'den örnekleri, Cloud NAT'yi ve Cloud Router'ı kaldırın:

gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone

gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \
--router=$prefix-vpc1-cr --router-region=$region

gcloud -q compute routers delete $prefix-vpc1-cr --region=$region

Global ağ güvenlik duvarı politikasını ve etiketleri kaldırma:

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc2/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc2

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-servers

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc1

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-example \
     --name $prefix-vpc1-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete \
   $prefix-example --global

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2

tagAdmin ve tagUsers rolleri değiştirildiyse aşağıdaki adımları uygulayın:

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Son olarak, VPC ağ eşlemelerini, alt ağları ve VPC ağlarını kaldırın:

gcloud -q compute networks peerings delete vpc1-to-vpc2 \
    --network $prefix-vpc1

gcloud -q compute networks peerings delete vpc2-to-vpc1 \
    --network $prefix-vpc2

gcloud -q compute networks subnets delete $prefix-vpc1-subnet \
    --region $region

gcloud -q compute networks subnets delete $prefix-vpc2-subnet \
    --region $region

gcloud -q compute networks delete $prefix-vpc1

gcloud -q compute networks delete $prefix-vpc2

9. Tebrikler!

Tebrikler! Etiket yapılandırmasıyla küresel ağ güvenlik duvarı politikasını başarıyla yapılandırdınız ve doğruladınız.