Azure Microsoft Cloud Enterprise Account: ใช้ Bicep / Terraform เป็นเวลา10นาทีเพื่อปรับใช้สภาพแวดล้อมเครือข่ายมาตรฐานบน Azure ในคลิกเดียว
ในการใช้งานและการบำรุงรักษาระบบคลาวด์คอมพิวติ้งสมัยใหม่มีฉากโรลโอเวอร์สไตล์ "รับสมัคร" แบบคลาสสิกมาก:
สถาปนิกของบริษัทได้ทำงานอย่างหนักเพื่อออกแบบชุดโซลูชันส่วนเครือข่ายที่ตรงตามข้อกำหนดด้านความปลอดภัยซึ่งจะนำไปใช้ในการดำเนินการและการบำรุงรักษาผลลัพธ์การดำเนินการและการบำรุงรักษาเข้าสู่คอนโซลพอร์ทัล Azure หันหน้าไปทางแบบฟอร์มที่หนาแน่นคลิกเมาส์ขณะตรวจสอบด้วยตาเปล่าคลิกลงครึ่งชั่วโมงโดยไม่ได้ตั้งใจ
/16
พิมพ์ผิด
/24
หรือย้อนกลับลำดับของกฎการเข้าของ Network Security Group (NSG) ผลลัพธ์คือ:
การปรับใช้เครื่องเสมือนในภายหลังอาจขาดการเชื่อมต่ออย่างสมบูรณ์หรือฐานข้อมูลหลักจะถูกเปิดเผยโดยตรงไปยังเครือข่ายสาธารณะและจะต้องใช้เวลามากกว่าครึ่งวันในการตรวจสอบสาเหตุ
วิธีการดำเนินการและการบำรุงรักษาที่อาศัยเนื้อมนุษย์อย่างหมดจดเพื่อ "ชี้ประเทศ" บนหน้าเว็บเรียกว่า "รถปราบดินด้วยตนเอง" ในอุตสาหกรรมไม่เพียงแต่ไม่มีประสิทธิภาพเท่านั้นแต่ที่อันตรายที่สุดคือ
ไม่สามารถคัดลอกได้เลย
。หากคุณต้องการโคลนสภาพแวดล้อมเดียวกันในสภาพแวดล้อมการทดสอบก่อนการเปิดตัวและการผลิตคุณแทบจะไม่สามารถรับประกันได้ว่าคุณจะคลิกเมาส์หลายร้อยครั้งโดยไม่ทำผิดพลาด
เพื่อที่จะยุติการดำเนินการและการบำรุงรักษาในรูปแบบเวิร์กช็อปที่ไม่มีประสิทธิภาพและมีความเสี่ยงสูงนี้โดยสิ้นเชิงโครงสร้างพื้นฐานคือรหัส (IaC,Infrastructure as Code) จึงเกิดขึ้นในระบบนิเวศของ Microsoft Cloud (Azure) มีอาวุธการเขียนโปรแกรม IaC ที่โดดเด่นสองอย่าง:
หนึ่งคือ Bicep ลูกชายของ Microsoft (ภาษา DSL ที่ประกาศสมัยใหม่) และอีกอันคือ Terraform มาตรฐานที่เป็นที่ยอมรับในอุตสาหกรรม
ตรรกะพื้นฐานของพวกเขาเป็นฮาร์ดคอร์มาก:
ใช้วิธีการเขียนโค้ดเพื่อ "วาด" โทโพโลยีเครือข่ายของคุณ
คุณเพียงแค่ต้องเขียนไฟล์ข้อความขนาดเล็กที่กำหนดสิ่งที่คุณต้องการจากนั้นคำสั่งจะถูกผลักไปที่ระบบคลาวด์และสมองการจัดเรียงอัตโนมัติของ Azure จะสร้างอาคารสูงให้คุณโดยไม่มีข้อผิดพลาดในระดับพิกเซลภายใน1นาทีและสร้างสภาพแวดล้อมเครือข่ายพื้นฐานที่ตรงตามมาตรฐานของโรงงานขนาดใหญ่ในทันที
วันนี้เราปฏิเสธแนวคิดที่น่าเบื่อและเข้าสู่การเผชิญหน้าแบบฮาร์ดคอร์โดยตรงเราจะใช้แยกกัน
Bicep
และ
เทอร์ราฟอร์ม
ทั้งสองประเภทนี้จับมือคุณด้วยชุดรหัสมาตรฐานและบัดกรีชุดมาตรฐานระดับองค์กรที่มี "1 VNet (เครือข่ายเสมือน) 2เครือข่ายย่อยอิสระและ1กลุ่มความปลอดภัยเครือข่ายที่มีการป้องกันสูง" ใน10นาทีเครือข่ายมูลนิธิ.
ขั้นตอนแรก: การรื้อลึก "แบบจำลองสามมิติ" ของเครือข่ายมาตรฐาน
ก่อนที่จะเขียนโค้ดด้วยมือคุณต้องเข้าใจโทโพโลยีทางกายภาพของเครือข่ายพื้นฐานที่เราต้องการปรับใช้อย่างละเอียดชุดของรากฐานเครือข่าย Azure ระดับองค์กรที่ผ่านการรับรองนั้นไม่ได้เป็นเพียงแค่การเปิด VNet เท่านั้นแต่ต้องเป็นไปตามสถาปัตยกรรมการแยกขั้นพื้นฐานที่สุด:
Virtual Network (VNet): นี่คืออาณาจักรอิสระพิเศษของคุณบน Azure ซึ่งแยกออกจากเครือข่ายสาธารณะภายนอกเราวางแผนส่วนเครือข่ายเป็นส่วนเครือข่ายภายในมาตรฐานของโรงงานขนาดใหญ่: 10.0.0.0/16
Subnets อิสระที่ปลายด้านหน้าและด้านหลัง: สองตำแหน่งจะต้องถูกตัดออกในแนวนอนภายในแชสซีขนาดใหญ่แต่ละตำแหน่งปฏิบัติหน้าที่การแยกทางกายภาพ: We
B Subnet-Frontend: ส่วนเครือข่ายแบ่งออกเป็น10.0.1.0/24ซึ่งจะใช้เพื่อติดตั้งเว็บแอปพลิเคชันสาธารณะหรือตัวโหลดบาลานซ์ในอนาคต Subnet-Backend (Subnet-Backend): ส่วนเครือข่ายแบ่งออกเป็น10.0.2.0/24ในอนาคตจะจัดเก็บฐานข้อมูลหลักหรือบริการแบ็คเอนด์ที่ละเอียดอ่อนโดยเฉพาะและตัดการเข้าถึงเครือข่ายภายนอกโดยตรง
ผู้เฝ้าประตูป้องกันสูง: Network Security Group (NSG): นี่คือไฟร์วอลล์แบบกระจายที่ติดอยู่ที่ทางเข้าของเครือข่ายย่อยเราต้องการเขียนกฎการประทับตราความปลอดภัย: อนุญาตให้เฉพาะการรับส่งข้อมูล443(HTTPS) และ80(HTTP) ของเครือข่ายสาธารณะเท่านั้นที่จะเข้าสู่เครือข่ายย่อยส่วนหน้าและส่วนที่เหลือทั้งหมดจะถูกดักจับโดยตรงในสถานที่
ขั้นตอนที่สอง: ประเภทหนึ่ง-ลูกชายของ Microsoft Picep Blitz
หากคุณเป็นทีม Microsoft Family Bucket ล้วนๆคุณไม่จำเป็นต้องติดตั้งเครื่องมือกำหนดค่าของบุคคลที่สาม Azure Command Line Tool (Azure CLI) เข้าใจ Bicep 100% ไม่มีไฟล์สถานะที่ยุ่งยาก (State File) ที่ต้องได้รับการดูแลและไวยากรณ์ก็สะอาดเหมือนน้ำใส
บนคอมพิวเตอร์ในเครื่องให้สร้างไฟล์ใหม่ชื่อ
Main.bicep
ไฟล์วางเทมเพลตการผลิตความละเอียดสูงต่อไปนี้โดยตรง:
// 1.กำหนดพารามิเตอร์คงที่ทั่วโลกเพื่ออำนวยความสะดวกในการเปลี่ยนชื่อด้วยคลิกเดียวในอนาคต
Param location string = resourceGroup().location
Param vnetName string = 'vnet-core-prod'
Param nsgName string = 'nsg-web-firewall'
// 2.ลุกขึ้นจากพื้นดิน: ตั้งยาม (ทีมรักษาความปลอดภัยเครือข่าย)
Resource nsg 'Microsoft .Network/networkSecurityGroups @ 2023-11-01 '= {
Name: nsgName
Location: location
Properties: {
SecurityRules: [
{
Name: 'Allow-HTTPS-Inbound'
Properties: {
Priority: 10
0 // ลำดับความสำคัญสูงสุด
Protocol: 'Tcp'
Access: 'Allow'
Direction: 'Inbound'
SourceAddressPrefix: '*' // จากทุกที่ในโลก
SourcePortRange: '*'
DestinationAddressPrefix: '*'
DestinationPortRange: '443' // การปล่อยที่แม่นยำ443พอร์ตป้องกันสูง
}
}
]
}
}
// 3.Qiankun Big Move: สร้างเครือข่ายเสมือนแชสซีขนาดใหญ่ตัดเครือข่ายย่อยสองเครือข่ายและผูกลุงกับเครือข่ายเทอร์มินัลหน้า
Resource vnet 'Microsoft .Network/virtualNetworks @ 2023-11-01 '= {
Name: vnetName
ตำแหน่ง: ตำแหน่ง
คุณสมบัติ: {
AddressSpace: {
AddressPrefixes: [
'10.0.0.0/16 '// แกนส่วนเครือข่ายขนาดใหญ่
]
}
Subnets: [
{
Name: 'Subnet-Frontend'
คุณสมบัติ: {
AddressPrefix: '10.0.1.0/24 '// ตำแหน่งส่วนหน้า
NetworkSecurityGroup: {
Id: nsg.id // ยิงไฟร์วอลล์ NSG โดยตรงบนซับเน็ตนี้
}
}
}
{
Name: 'Subnet-Backend'
คุณสมบัติ: {
AddressPrefix: '10.0.2.0/24 '// ตำแหน่งลับฐานข้อมูลส่วนหลัง
}
}
]
}
}
คำสั่งการยกออกด้วยปุ่มเดียว30วินาที (Bicep)
เปิดเทอร์มินัลภายในของคุณลงชื่อเข้าใช้บัญชี Azure ของคุณและระบุกลุ่มทรัพยากรที่คุณสร้างขึ้น (เช่น
Rg-infra-prod
) พิมพ์คำสั่งสั้นๆที่น่าทึ่งนี้โดยตรง:
แบช
Az deployment group create -- resource-group rg-infra-prod -- template-file main.bicep
หลังจากกด Enter แล้วให้ออกจากแป้นพิมพ์ด้วยมือทั้งสองข้างคุณจะเห็นแถบความคืบหน้ากระพริบในเทอร์มินัลหลังจากผ่านไปประมาณ20วินาทีคอนโซลจะส่งคืนรายงานความสำเร็จของ JSON ที่หนาแน่นให้คุณ
ในตอนนี้หากคุณลงชื่อเข้าใช้พื้นหลังของหน้าเว็บ Azure เพื่อรีเฟรชคุณจะพบว่า VNet นอนอยู่ที่นั่นอย่างเรียบร้อยเครือข่ายย่อยทั้งสองและ NSG ถูกผูกไว้เพื่อให้ไม่มีการรั่วไหลและรูปแบบจะเหมือนกับพิกเซลที่วางแผนไว้ในโค้ดทุกประการ
ขั้นตอนที่สาม: ประเภทที่สอง-อุตสาหกรรมไม่ใช่ต้นสนเก่า Terraform เกรดอุตสาหกรรมวงปิด
หากบริษัทของคุณมีสถาปัตยกรรมแบบคลาวด์ยกเว้น Azure
นอกจากนี้ยังดูแล AWS หรือ Alibaba Cloud ดังนั้นมาตรฐานทองคำขาวระดับอุตสาหกรรมที่ได้รับการยอมรับในอุตสาหกรรมจึงยังคงเป็นของตระกูล HashiCorp
เทอร์ราฟอร์ม
。
บนคอมพิวเตอร์ในระบบสร้างไดเร็กทอรีว่างใหม่และสร้างไดเร็กทอรีชื่อ
ไฟล์ main.tf
ไฟล์ดังกล่าว Terraform ใช้ไวยากรณ์ HCL แบบคลาสสิกและตรรกะนั้นหนักกว่าเล็กน้อยแต่เนื่องจากกลไกการล็อกสถานะที่มีประสิทธิภาพจึงมีความเสถียรในการทำงานร่วมกันของทีมขนาดใหญ่: #1.ประกาศรหัสร่วม: เราต้องการเรียกไดรเวอร์อย่างเป็นทางการของ Microsoft Azure (Provider)
terraform {
ผู้ให้บริการที่จำเป็น {
Azurerm = {
Source = "hashicorp/azurerm"
เวอร์ชัน = "~>" 3.0"
}
}
}
Provider "azurerm" {
Features {} # ต้องประกาศคุณสมบัติการเปิดอย่างชัดเจน
}
#2.สิ่งที่แนบมา: ประกาศว่าเราต้องการปลูกเครือข่ายในกลุ่มทรัพยากรที่มีอยู่
Data "azurerm_resource_group" "core_rg" {
Name = "rg-infra-prod"
}
#3.หล่อโล่: สร้างกลุ่มรักษาความปลอดภัยเครือข่ายสูง (NSG)
Resource "azurerm_network_security_group" "web_nsg" {
Name = "nsg-web-firewall"
Location = data.azurerm_resource_group.core_rg.location
Resource_group_name = data.azurerm_resource_group.core_rg.name
Security_rule {
Name & nbs
P; = "Allow-HTTPS-Inbound"
Priority = 100
Direction = "Inbound"
Access = "Allow"
Protocol = "Tcp"
Source_port_range = "*"
Destination_port_range = "443"
Source_address_prefix = "*"
Destination_address_prefix = "*"
}
}
#4.เปิดแชสซีขนาดใหญ่: สร้างเครือข่ายเสมือน (VNet)
Resource "azurerm_virtual_network" "core_vnet" {
Name = "vnet-core-prod"
ที่ตั้ง = ข้อมูล.azurerm_resource_group.core_rg.ที่ตั้ง
Resource_group_name = da
Ta.azurerm_resource_group.core_rg.name
Address_space = ["10.0.0.0/16"]
}
#5.การแบ่งที่แม่นยำ: ตัดซับเน็ตส่วนหน้าด้วยตนเองและผูกกับ NSG
Resource "azurerm_subnet" "sub_frontend" {
Name = "Subnet-Frontend"
ชื่อกลุ่มทรัพยากร = ค่าของ data.azurerm_resource_group.core_rg.name
Virtual_network_name = azurerm_virtual_network.core_vnet.name
Address_prefixes = ["10.0.1.0/24"]
}
Resource "azurerm_subnet_network_security_group_association" "bind_nsg" {
Subnet_id = azurerm_subnet.sub_frontend.id
Network_security_group_id = azurerm_network_security_group.web_nsg.id
}
#6.การแบ่งที่แม่นยำ: ตัดซับเน็ตอินทราเน็ตบริสุทธิ์ออกด้วยตนเอง
Resource "azurerm_subnet" "sub_backend" {
Name = "Subnet-Backend"
ชื่อกลุ่มทรัพยากร = ค่าของ data.azurerm_resource_group.core_rg.name
Virtual_network_name = azu
Rerm_virtual_network.core_vnet.name
Address_prefixes = ["10.0.2.0/24"]
}
คำแนะนำในการลงจอดด้วยปุ่มเดียว (Terraform)
เปิดเทอร์มินัลและเปลี่ยนไปใช้
ไฟล์ main.tf
ในไดเร็กทอรีที่คุณอยู่ให้พิมพ์ "Tyra Boom Three Axes" แบบคลาสสิก:
แบช
# ขวานแรก: เริ่มต้นดาวน์โหลดแพ็คเกจไดรเวอร์ส่วนประกอบเครือข่ายล่าสุดอย่างเป็นทางการของ Microsoft
terraform init
# Second Axe: แบบฝึกหัดการซ้อมให้ Terraform แสดงให้คุณเห็นสิ่งที่จะสร้างขึ้นในภายหลังโดยไม่ต้องเสียเงิน
แผนทรัฟเฟิร์ม
# ขวานที่สาม: การโจมตีทั้งหมดเริ่มต้นขึ้นและมีการเปิดตัวการเรียกเก็บเงินโครงสร้างพื้นฐานไปยังระบบคลาวด์อย่างแท้จริง (เพิ่ม-auto-approve เพื่อกำจัดการยืนยันโดยการเคาะเนื้อมนุษย์)
Terraform apply -- auto-approve
ภายในเวลาไม่ถึง30วินาทีเทอร์มินัลจะสว่างเป็นสีเขียว
สมัครเสร็จสิ้นแล้ว! Resources: 4 added
。ชุดสภาพแวดล้อมเครือข่ายการแยกระดับโรงงานขนาดใหญ่มาตรฐานทั้งหมดได้ทำลายโลกทางกายภาพบนคลาวด์ของ Azure อย่างสมบูรณ์แบบ
ขั้นตอนที่สี่: ประวัติการหลีกเลี่ยงเลือดและน้ำตาของโครงสร้างพื้นฐานระดับอุตสาหกรรมหรือรหัส
ด้วยรหัสทั้งสองชุดนี้คุณสามารถเพิกเฉยต่อผู้ดูแลเว็บแบบดั้งเดิมทั้งหมดที่ยังคงดิ้นรนเพื่อคลิกเมาส์บนหน้าเว็บแต่เพื่อให้อยู่รอดในสายการประกอบ DevOps ที่มีการทำงานพร้อมกันสูงในเชิงพาณิชย์ที่เข้มงวดอย่างแท้จริงในฐานะหัวหน้าสถาปนิกคุณต้องเชื่อมสองบรรทัดล่างสุดต่อไปนี้ให้กับทีมทันที:
1.โศกนาฏกรรมร้ายแรง "ไฟล์สถานะ Terraform หายไป" (State Lock)
หากคุณใช้ Terraform เมื่อคุณดำเนินการเสร็จแล้ว
Terraform apply
ต่อมาในไดเรกทอรีท้องถิ่นชื่อ
เทอร์ราฟอร์ม.ทีเอฟสเตต
ไฟล์ข้อความ
อันตรายจากภัยพิบัติ: ไฟล์นี้เป็น "สมองความจำเดียว" ที่จดจำว่าเครือข่ายคลาวด์ในปัจจุบันมีลักษณะอย่างไรหากนักพัฒนารายอื่นเรียกใช้รหัสนี้บนคอมพิวเตอร์ของตนเองเนื่องจากพวกเขาไม่มีไฟล์ tfstate ของคุณในเครื่อง Terraform จะกลายเป็นคนตาบอดโดยเข้าใจผิดคิดว่าไม่มีอะไรในระบบคลาวด์ดังนั้นในขณะที่เรียกใช้แอพพลิเคชันคุณจะอยู่ในเครือข่ายการผลิตที่สร้างขึ้นในระบบคลาวด์และเครื่องเสมือนภายในถอนรากถอนโคนอย่างไร้ความปรานีและลบออกทางกายภาพ!
การกำหนดค่าเหรียญทองมาตรฐานของผู้ผลิตรายใหญ่: ห้ามเก็บ tfstate ไว้บนคอมพิวเตอร์ในเครื่องโดยเด็ดขาด! กลยุทธ์ Backend "azurerm" ต้องได้รับการกำหนดค่าในบล็อก terraform { ... } บังคับให้ล็อกไฟล์หน่วยความจำสถานะนี้ในการเข้ารหัสอย่างเป็นทางการของ Azure Storage Acc
นับ (เก็บบัญชี Blob) และเปิด State Locking ด้วยวิธีนี้ใครก็ตามที่เรียกใช้รหัสในทุกมุมโลกจะจัดตำแหน่งข้อมูลในสมองส่วนกลางเดียวกันและเชื่อมโศกนาฏกรรมของ "การครอบคลุมและการลบโดยไม่ได้ตั้งใจ" โดยสิ้นเชิง
2.ระวังอัมพาตข้ามภูมิภาคที่เกิดจาก "ฮาร์ดโค้ด" ใน Bicep
เมื่อเขียนโค้ด Bicep มือใหม่หลายคนจะเขียนโค้ดโดยตรงเพื่อประหยัดปัญหา
Location: 'eastasia'
(ฮ่องกง).
เหตุผลในการถอดชิ้นส่วน: หากวันหนึ่งธุรกิจของบริษัทกำลังจะไปต่างประเทศในสหรัฐอเมริกาคุณจะต้องโคลนเครือข่ายแยกที่เหมือนกันทั้งหมดใน eastus (ห้องคอมพิวเตอร์ฝั่งตะวันออกของสหรัฐฯ) ทันทีที่คุณเรียกใช้โค้ดบรรทัดนี้ระบบจะรายงานข้อผิดพลาดอย่างไร้ความปรานีเนื่องจากทีมทรัพยากรของคุณถูกสร้างขึ้นอย่างชัดเจนในสหรัฐอเมริกาแต่รหัสบังคับให้ Microsoft ดึงเครือข่ายเครือข่ายในฮ่องกง
คู่มือการหลีกเลี่ยงฮาร์ดคอร์: ใช้พารามิเตอร์เสมอเพื่อรวบรวมข้อมูลทางภูมิศาสตร์แบบไดนามิกตามที่เราเขียนไว้ในเทมเพลตการสาธิต Bicep ด้านบน: Param location string = resourceGroup().location ปล่อยให้โค้ดค้นหาอย่างชาญฉลาดว่า "ตอนนี้คุณอยู่ในกลุ่มทรัพยากรใด" และกลุ่มทรัพยากรอยู่ที่ใดมันจะติดตามเถาวัลย์โดยอัตโนมัติและลงจอดโดยตระหนักถึงชุดเทมเพลตที่แท้จริงและการโคลนนิ่งทั่วโลกที่ราบรื่น
สรุป
การใช้ Bicep / Terraform เพื่อปรับใช้โครงสร้างพื้นฐานที่ทันสมัยนั่นคือรหัส (IaC) สาระสำคัญระดับอุตสาหกรรมหลักจะถูกทำให้ง่ายขึ้นเป็นสิบหกคำ:
รหัสวางโทโพโลยีการควบคุมเวอร์ชันการจัดเก็บข้อมูลส่วนกลางภูมิศาสตร์แบบไดนามิก
คุณได้อำลาสถานะการทำงานและการบำรุงรักษาดั้งเดิมของเมาส์ที่ตรวจสอบพารามิเตอร์ทุกวันกลัวว่าจะจับคู่ส่วนเครือข่ายไม่ถูกต้องและเนื้อมนุษย์หลายร้อยครั้งที่คอนโซลในตอนดึกฐานสินทรัพย์ดิจิทัลหลักทั้งหมดได้รับการรวมเป็นรหัสข้อความที่สามารถส่งไปยัง GitHub ได้นั่งอยู่หน้าคอมพิวเตอร์เปลี่ยนหมายเลขอย่างสง่างามและกด Enter ส่วนที่เหลือของการป้องกันและการขยายตัวที่สูงจะถูกส่งมอบให้กับยุคคลาวด์ดั้งเดิมของความเร็วแสงที่กระพริบอย่างปลอดภัย

