รักษาความปลอดภัยพารามิเตอร์ของคุณ
บางครั้งคุณจําเป็นต้องส่งผ่านค่าที่ละเอียดอ่อนไปยังการปรับใช้ของคุณ เช่น รหัสผ่านและคีย์ API แต่คุณจําเป็นต้องตรวจสอบให้แน่ใจว่าค่าเหล่านี้ได้รับการป้องกัน ในบางสถานการณ์ คุณไม่ต้องการให้บุคคลที่สร้างการปรับใช้ทราบค่าข้อมูลลับ บางครั้ง บางคนจะป้อนค่าพารามิเตอร์เมื่อพวกเขาสร้างการปรับใช้ แต่คุณจําเป็นต้องตรวจสอบให้แน่ใจว่าไม่มีการบันทึกค่าข้อมูลลับ ในหน่วยนี้ คุณจะได้เรียนรู้เกี่ยวกับวิธีการปกป้องพารามิเตอร์ของคุณ
เคล็ดลับ
วิธีที่ดีที่สุดคือการหลีกเลี่ยงการใช้ข้อมูลประจําตัวทั้งหมด ข้อมูลประจําตัวที่มีการจัดการสําหรับทรัพยากร Azure สามารถเปิดใช้งานคอมโพเนนต์ของโซลูชันของคุณในการสื่อสารกับอีกอันอย่างปลอดภัยโดยไม่มีข้อมูลประจําตัวใด ๆ ข้อมูลประจําตัวที่มีการจัดการจะไม่พร้อมใช้งานสําหรับทุกทรัพยากร แต่คุณควรใช้ข้อมูลประจําตัวทุกที่ที่คุณสามารถทําได้ ซึ่งคุณไม่สามารถคุณสามารถใช้วิธีการที่อธิบายไว้ที่นี่
หมายเหตุ
คําสั่งในหน่วยนี้จะแสดงเพื่อแสดงตัวอย่างแนวคิด อย่าเพิ่งเรียกใช้คําสั่ง คุณจะได้ฝึกฝนในสิ่งที่คุณได้เรียนรู้ที่นี่ในเร็ว ๆ นี้
กําหนดพารามิเตอร์ความปลอดภัย
คอนสตรักเตอร์ @secure สามารถนําไปใช้กับพารามิเตอร์สตริงและวัตถุที่อาจมีค่าลับ เมื่อคุณกําหนดพารามิเตอร์เป็น @secureAzure จะไม่ทําให้ค่าพารามิเตอร์พร้อมใช้งานในบันทึกการปรับใช้ นอกจากนี้ ถ้าคุณสร้างการปรับใช้แบบโต้ตอบโดยใช้ Azure CLI หรือ Azure PowerShell และคุณจําเป็นต้องป้อนค่าในระหว่างการปรับใช้ เทอร์มินัลจะไม่แสดงข้อความบนหน้าจอของคุณ
ในฐานะที่เป็นส่วนหนึ่งของการโยกย้ายแอปพลิเคชัน HR คุณจําเป็นต้องปรับใช้เซิร์ฟเวอร์และฐานข้อมูลเชิงตรรกะของ Azure SQL คุณจะเตรียมใช้งานเซิร์ฟเวอร์แบบลอจิคัลด้วยการเข้าสู่ระบบและรหัสผ่านของผู้ดูแลระบบ เนื่องจากข้อมูลเหล่านี้มีความสําคัญ คุณจําเป็นต้องมีค่าเหล่านี้เพื่อความปลอดภัย นี่คือตัวอย่างการประกาศเพื่อสร้างพารามิเตอร์สตริงสองรายการสําหรับรายละเอียดผู้ดูแลระบบของ SQL Server:
@secure()
param sqlServerAdministratorLogin string
@secure()
param sqlServerAdministratorPassword string
โปรดสังเกตว่าไม่มีพารามิเตอร์ใดที่มีการระบุค่าเริ่มต้น การหลีกเลี่ยงการระบุค่าเริ่มต้นสําหรับชื่อผู้ใช้ รหัสผ่าน และข้อมูลลับอื่นๆ เป็นแนวทางปฏิบัติที่ดี มิฉะนั้น ถ้ามีคนปรับใช้เทมเพลตของคุณ และไม่ทราบว่าควรแทนที่ค่าพวกเขาจะอ่อนแอความปลอดภัยของพวกเขาเพราะพวกเขาจะได้รับค่าเริ่มต้นแทนที่จะเป็นบางสิ่งที่พวกเขาเลือกด้วยตนเอง
เคล็ดลับ
ตรวจสอบให้แน่ใจว่าคุณไม่ได้สร้างเอาต์พุตสําหรับข้อมูลที่ละเอียดอ่อน ค่าผลลัพธ์สามารถเข้าถึงได้โดยทุกคนที่มีสิทธิ์เข้าถึงประวัติการปรับใช้ ซึ่งไม่เหมาะสมสําหรับการจัดการความลับ
หลีกเลี่ยงการใช้ไฟล์พารามิเตอร์สําหรับข้อมูลลับ
ตามที่คุณได้เรียนรู้ในหน่วยก่อนหน้า ไฟล์พารามิเตอร์เป็นวิธีที่ยอดเยี่ยมในการระบุชุดของค่าพารามิเตอร์ คุณมักจะสร้างไฟล์พารามิเตอร์สําหรับแต่ละสภาพแวดล้อมที่คุณกําลังปรับใช้ โดยทั่วไป คุณควรหลีกเลี่ยงการใช้ไฟล์พารามิเตอร์เพื่อระบุค่าลับ ไฟล์พารามิเตอร์มักจะถูกบันทึกลงในระบบควบคุมเวอร์ชันแบบรวมศูนย์ เช่น Git หลายคนอาจสามารถเข้าถึงได้ในอนาคต อย่าบันทึกข้อมูลที่สําคัญลงในระบบควบคุมเวอร์ชัน เนื่องจากไม่ได้ออกแบบมาเพื่อจัดเก็บข้อมูลเช่นนี้
รวมกับ Azure Key Vault
Azure Key Vault เป็นบริการที่ออกแบบมาเพื่อจัดเก็บและให้การเข้าถึงข้อมูลลับ คุณสามารถรวมเทมเพลต Bicep ของคุณเข้ากับชุดเก็บคีย์ได้โดยใช้ไฟล์พารามิเตอร์ที่มีการอ้างอิงไปยังข้อมูลลับชุดเก็บคีย์
คุณสามารถใช้คุณลักษณะนี้ได้โดยอ้างอิงถึงชุดเก็บคีย์และความลับในไฟล์พารามิเตอร์ของคุณ ค่าจะไม่ถูกแสดงเนื่องจากคุณอ้างอิงตัวระบุเท่านั้น ซึ่งโดยตัวเองไม่ใช่ข้อมูลลับใด ๆ เมื่อคุณปรับใช้เทมเพลต Azure Resource Manager จะติดต่อ Key Vault และดึงข้อมูล
เคล็ดลับ
คุณสามารถอ้างอิงถึงข้อมูลลับในชุดเก็บคีย์ที่อยู่ในกลุ่มทรัพยากรหรือการสมัครใช้งานอื่นจากชุดเก็บคีย์ที่คุณกําลังปรับใช้
นี่คือไฟล์พารามิเตอร์ที่ใช้การอ้างอิงชุดเก็บคีย์เพื่อค้นหาการเข้าสู่ระบบและรหัสผ่านผู้ดูแลระบบตรรกะ SQL ที่ใช้:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"sqlServerAdministratorLogin": {
"reference": {
"keyVault": {
"id": "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets"
},
"secretName": "sqlAdminLogin"
}
},
"sqlServerAdministratorPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets"
},
"secretName": "sqlAdminLoginPassword"
}
}
}
}
โปรดสังเกตว่า แทนที่จะระบุ value สําหรับแต่ละพารามิเตอร์ ไฟล์นี้มีวัตถุ reference ซึ่งประกอบด้วยรายละเอียดของชุดเก็บคีย์และความลับ
สําคัญ
ชุดเก็บคีย์ของคุณต้องได้รับการกําหนดค่าเพื่อให้ Resource Manager สามารถเข้าถึงข้อมูลใน Key Vault ในระหว่างการปรับใช้เทมเพลตได้ นอกจากนี้ ผู้ใช้ที่ปรับใช้เทมเพลตต้องมีสิทธิ์ในการเข้าถึง Key Vault คุณจะได้เรียนรู้วิธีการทํางานเหล่านี้ในหน่วยถัดไป
ใช้ชุดเก็บคีย์กับโมดูล
โมดูลช่วยให้คุณสามารถสร้างไฟล์ Bicep ที่นํามาใช้ใหม่ได้ซึ่งห่อหุ้มชุดทรัพยากร เป็นเรื่องปกติที่จะใช้โมดูลเพื่อปรับใช้ส่วนต่างๆ ของโซลูชันของคุณ โมดูลอาจมีพารามิเตอร์ที่ยอมรับค่าลับ และคุณสามารถใช้การรวมชุดเก็บคีย์ของ Bicep เพื่อให้ค่าเหล่านี้ได้อย่างปลอดภัย นี่คือตัวอย่างไฟล์ Bicep ที่ปรับใช้โมดูลและให้ค่าของพารามิเตอร์ลับ ApiKey โดยรับโดยตรงจากชุดเก็บคีย์:
resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
name: keyVaultName
}
module applicationModule 'application.bicep' = {
name: 'application-module'
params: {
apiKey: keyVault.getSecret('ApiKey')
}
}
โปรดสังเกตว่า ในไฟล์ Bicep นี้ ทรัพยากรชุดเก็บคีย์ถูกอ้างอิงโดยใช้คําสําคัญ existing คําสําคัญจะบอก Bicep ว่ามีชุดเก็บคีย์อยู่แล้ว และโค้ดนี้เป็นการอ้างอิงถึงชุดเก็บคีย์ Bicep จะไม่ปรับใช้ใหม่ นอกจากนี้ โปรดสังเกตว่ารหัสของโมดูลใช้ฟังก์ชัน getSecret() ในค่าสําหรับพารามิเตอร์ apiKey ของโมดูล นี่คือฟังก์ชัน Bicep พิเศษที่สามารถใช้ได้กับพารามิเตอร์โมดูลความปลอดภัยเท่านั้น ภายใน Bicep แปลนิพจน์นี้เป็นการอ้างอิงชุดเก็บคีย์ชนิดเดียวกันที่คุณเรียนรู้เกี่ยวกับก่อนหน้านี้