ใช้ Azure Key Vault สำหรับจัดการ Terraform Secret Variable

โดยปกติแล้ว Terraform เราจะเก็บ Secret ไว้ในไฟล์ .tfvars
ซึ่งเป็นสิ่งที่ถูกต้องแล้ว แต่เราสามารถ Improve เรื่อง Security ได้มากขึ้นไปอีกโดยการเอา Secret ไปเก็บไว้ใน Vault แทน
ซึ่งใน Blog นี้เราจะใช้ Azure Key Vault ในการจัดการกับ Terraform Secret Variable นั่นเอง
(ถ้าอยากรู้ว่าทำไมต้องใช้ Azure Key Vault ให้อ่านนี่ Why use Azure Key Vault?)
ตอนนี้ผมมี Azure Resources ประมาณนี้ที่ถูกสร้างผ่าน Terraform
ซึ่งถ้าดูจาก Terraform Code จะเห็นว่า Web App มีการใช้ Terraform Variable ที่เป็นข้อมูลประเภท Sensitive Data (Secret) ซึ่งถูกกำหนดค่าไว้ที่ไฟล์ terraform.tfvars
สิ่งที่ผมต้องการคือ ผมจะไม่เก็บ Secret ใน terraform.tfvars
แล้ว แต่จะไปเก็บที่ Azure Key Vault แทน
งั้นเรามาสร้าง Azure Key Vault กันก่อน
ผมจะสร้างผ่าน Azure Portal เลย ส่วนใครอยากสร้างผ่าน Terraform ก็ได้ ไม่มีปัญหา
กรอกข้อมูล ตั้งค่าอะไรตามใจเลย
ของผมก็ประมาณนี้ กด Create เลย
สร้างเสร็จแล้ว
เพื่อให้เราสามารถจัดการ Secret ใน Azure Key Vault ได้ เราจำเป็นจะต้องมีสิทธิ์ “Key Vault Secrets Officer”
งั้นมาเพิ่มสิทธิ์กัน
กดเข้าไปที่ Azure Key Vault ที่เราสร้างเมื่อกี้ แล้วกด Add role assignment
ค้นหา Role ชื่อ Key Vault Secrets Officer > กดเลือก > กด Next
กด Select members > ค้นหาชื่อตัวเองหรือคนที่ต้องการให้สิทธิ์แล้วกดเลือก > กด Select > กด Review + assign
อ่านทบทวนการตั้งค่าอีกรอบ ถ้าถูกต้องแล้วก็กด Review + assign ได้เลย
เรียบร้อย ตอนนี้ผมก็ให้สิทธิ์ตัวเองในการจัดการ Azure Key Vault Secret แล้ว
มาสร้าง Secret กัน
ไปที่แท็บ Secrets > กด Generate/Import
ใส่ชื่อ ใส่ค่า แล้วกด Create เลย
เยี่ยมเลย สร้างเสร็จแล้ว
ต่อมาเราจะแก้ Terraform Code ให้ไปอ่าน Secret จาก Azure Key Vault แทน
สำหรับการดึงค่า Secret เราจะใช้ azurerm_key_vault_secret
Data Block (https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/key_vault_secret)
ทดสอบรัน terraform plan
แล้วได้ No Changes ตามที่ต้องการ สุดยอดมาก 🎉
เพียงเท่านี้ เราก็สามารถใช้ Azure Key Vault สำหรับจัดการ Terraform Secret Variable ได้แล้ว
ส่วน Source Code ที่ใช้ใน Blog นี้ผมเก็บไว้ที่ https://github.com/ChaiyoKung/azure-key-vault-secret-tfvars นะครับ ใครสนใจไปส่องได้ กดดาวได้ ⭐
ขอบคุณครับ