Azure Blob Storage ตั้งเวลา Enable/Disable SFTP แบบ Automation

Azure Blob Storage ตั้งเวลา Enable:Disable SFTP

Azure Blob Storage เป็นบริการเก็บข้อมูลแบบออบเจ็กต์ที่มีความยืดหยุ่นสูงบนแพลตฟอร์ม Azure สามารถใช้เก็บข้อมูลประเภทต่างๆ ได้อย่างปลอดภัย ไม่ว่าจะเป็น รูปภาพ วิดีโอ เอกสารต่างๆ รวมถึงไฟล์แอปพลิเคชัน และแน่นอนว่าเทื่อมีการจัดเก็บข้อมูลแบบนี้ การเชื่อมต่อที่นิยมนั้นคือ SFTP (SSH File Transfer Protocol) ซึ่งเจ้านี้เป็นโปรโตคอลที่ใช้สำหรับการถ่ายโอนไฟล์อย่างปลอดภัยผ่าน SSH (Secure Shell) ผู้ใช้สามารถเข้าถึงข้อมูลบน Azure Blob Storage ผ่าน SFTP เช่นเดียวกับการเชื่อมต่อกับ FTP Server ทั่วไป ซึ่งบทความจะไม่ได้มาพูดถึงเพียงแค่สร้างเจ้า Blob Storage หรือ SFTP เพียงอย่างเดียว แต่จะมาชี้จุดสำคัญของการ เปิด/ปิด บริการนี้ ให้ผู้อ่านที่หลงเข้ามาได้รู้มากกว่าเพียงแค่ Enable/Disable SFTP บน Azure Blob Storage

ทำไมต้องคอย Enable/Disable SFTP

ก่อนอื่นเลย ต้องทำความเข้าใจก่อนว่า เอาเจ้า Azure Blob Storage เนี่ย มันคิดเงินยังไง โดยสามารถเข้าไปกดจิ้มเล่นได้ที่

https://azure.microsoft.com/en-us/pricing/calculator/?service=storage

ซึ่งดูแล้วก็ไม่น่าจะเกี่ยวอะไรกับ SFTP แต่ที่ไหนได้ !! จากการที่ผู้เขียนได้ทดลองเปิด SFTP มาแล้ว เจ้า Service นี้คิดเงินจากการเปิดทิ้งไว้ด้วย โดยเฉลี่ยจะตกวันละ 1.4 เหรียญ ($0.06 per hour per core) ก็ลองคิดดูว่าถ้าเปิดไว้ตลอด 24/7 เดือนนึงก็เท่ากับ 42 เหรียญ พอเห็นตัวเลขทั้งเดือนแล้ว ผู้เขียนก็สรุปได้ว่า เปิดเมื่อจะใช้ และปิดเมื่อไม่ได้ใช้ ดีที่สุด ด้วยเหตุนี้เอง บทความนี้จึงได้ถือกำเนิดขึ้น

สร้าง Azure Blob Storage

อย่างแรกเลยก็ต้องทำการสร้าง Azure Blob Storage กันก่อน

  • เข้า Azure Portal
  • เลือก Service : Storage Accounts
  • คลิก “Create”
  • Redundancy เลือก Locally -redundant storage ให้มันอยู่ในโซนเดียวกันกับ ResourceGroup
  • ในส่วนของ Tabs : Advanced ให้ Enable hierarchical namespace
  • หลังจากนั้นจะมี Check-box ของ SFTP มาให้ติ๊ก ทำการติ๊ก Enable ได้เลย

หลังจากนั้น Next ไปต่อ โดยที่เหลือจะเป็นการ Config ในเรื่องอื่นๆ ซึ่งถ้าเกี่ยวข้องกับบทความไหน จะนำมา แปะย้อนหลังให้นะ

Containers

เมื่อทำการสร้าง Storage Accounts แล้วให้ทำการเข้ามาสร้าง Containers ต่อ โดยเจ้า Containers ให้มองเป็นเหมือนกับ Folders (แต่มันไม่ใช่นะ) อยากให้ใครเข้ามาแล้วเห็น Folders ไหน และอยากให้ User ไหน SFTP เข้ามาถึงตรงไหน ก็วาง Containers กันให้ดี ได้เลยตรงนี้

Add local User (SFTP)

หลังจากทำการสร้าง Containers เรียบร้อยแล้ว ให้มาที่เมนู SFTP ใน Storage Accounts ที่เราสร้างมานี้แหละ แล้วทำการ Add local user

Username + Authentication

  • Username คือ User Login ที่จะทำการ SFTP
  • Authentication methods ให้เลือก Enable ที่ SSH Password

Container permissions

  • Containers ให้ทำการเลือก Path, Folders หรือก็คือ Containers ที่เราอยากให้ User นี้ SFTP เข้ามาถึงนั้นเอง
  • Permissions ก็ตรงตัวเลย ว่าอยากให้เข้ามาแล้วทำอะไรได้บ้าง

ทดสอบ SFTP (port 22)

หลังจากทำทุกอย่างเสร็จแล้ว ให้ทำการทดสอบ SFTP และโยนไฟล์เข้ามา ซึ่งตรงจุดนี้ ไม่ควรจะไม่พบปัญหาใดๆ

host : <storage-acc-name>.blob.core.windows.net
user : <storage-acc-name>.<container-name>.<username>
password : ให้ไปเอาที่ Authentication method

ในภาพตัวอย่าง ผู้เขียนใช้โปรแกรม Termius ในการทดสอบต่อ SFTP

Enable/Disable SFTP แบบ Automation

หลังจากมี blob storage เป็นพื้นที่โยนไฟล์หรือเก็บไฟล์แล้ว และทำการเปิด SFTP เป็นที่เรียบร้อยแล้ว ต่อมาก็มาทำความรู้จักกับเจ้า Automation ที่จะมาเป็นพระเอกในบทความนี้ ซึ่งเดี๋ยวเราจะทำการตั้งเวลาและใช้ PowerShell ทำการ เปิด/ปิด Enable/Disable ซึ่งเจ้า PowerShell นี้สามารถอะไรต่อมิอะไรได้แทบจะทุก Service ของ Azure เลยก็ว่าได้

สร้าง Azure Automation Accounts

โดยอย่างแรกก็ทำการสร้างเจ้า Automation Accounts โดยการ Config ในบทความนี้จะ Setting แบบง่ายๆ

  • Advanced : ให้เลือก System assigned
  • Network : ก็เลือกเป็น Public access

กำหนดสิทธิ์ Role assignments กับ Automation Identity

แน่นอนว่าเมื่อมีการทำอะไรที่เป็น Automation มันก็จะมากับการสร้าง Role และ Permission (เหมือนกับการตั้งค่าว่า Automation ตัวนี้ เข้าถึงหรือทำอะไรได้บ้าง) โดยบทความนี้เราจะสร้างให้ Subscription ได้ Role เป็น Contributor

จุดนี้จริงๆ สามารถสร้างเป็นราย User เลยก็ได้นะ และให้ User ไหน สร้าง Runbook และทำอะไรได้แค่ไหน คือมันละเอียดได้มากๆ

สร้าง Runbook

ใน Azure Automation Accounts เราจะต้องทำการสร้าง Runbook เปรียบเสมือนกับชุดคำสั่ง โดยใน 1 Automation Accounts ก็จะสามารถมี Runbook ได้หลายๆ Runbook นั้นเอง

โดยการสร้าง Runbook ก็ง่ายแสนง่าย โดยมีจุดให้เรากรอกไม่เยอะเลย ณ ที่นี่เราจะใช้ Runbook Type -> PowerShell

Enable/Disable SFTP

$PSVersionTable

$resourceGroupName = "RC-DEMO172"
$storageAccountName = "storagehitit"
$automationAccount = "automation-sftp"

Connect-AzAccount -Identity -Force

$sub = Get-AzSubscription -ErrorAction SilentlyContinue
if(-not($sub))
{
    Write-Output "Not Connect-AzAccount"
}else{
    Write-Output "Connect-AzAccount Success"
    Set-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName -EnableSftp $false
}

ในส่วน Code PowerShall นั้น Enable หรือ Disable ให้มาเปลี่ยนค่า Boolean $true และ $false เอาได้เลย และอย่าลืมเปลี่ยนตัวแปรด้านบนด้วยนะ

ซึ่งเราจะทำการสร้าง Runbook ทั้ง Enable SFTP และ Disable SFTP ทั้ง 2 แบบ

  • Runbook-Enable-SFTP
  • Runbook-Disable-SFTP

แล้วก็อย่าลืมทำการ ทดสอบ Run ด้วยนะ ว่าถึงจุดนี้แล้ว สามารถ Enable และ Disable เจ้า SFTP ได้แล้วจริงๆ

ตั้งเวลา Schedules

หลังจากที่ทดสอบ Enable/Disable แบบ Manual แล้วใช้งานได้ปกติ ต่อมาก็จะเป็นการตั้งเวลาให้มันทำงานตามเวลาที่เราต้องการ ซึ่งการตั้ง Schedules นั้นจะเป็นเหมือนรูปแบบ Link กับ Schedules ที่เราสร้างไว้ในระบบ เพื่อไม่ให้เราต้องสร้างใหม่ทุกครั้ง เช่น เราสร้างให้มีการ Trigger ทุกๆ 11:00 AM ของทุกวัน ไม่ว่าจะ Runbook ไหน ก็สามารถที่จะหยิบ Schedules นี้ไปใช้ได้นั้นเอง

ซึ่งผู้เขียนขอใช้ตัวอย่างเป็น Runbook ของ Action Enable SFTP ทุกๆ ตี 1:00 AM (ทำงานกับต่างชาติ ก็แบบนี้แหละ) โดยไปที่เมนู Schedules และคลิ๊กปุ่ม Add a schedules และทำการเลือก Link a schedule to your runbook

  • Name : ตั้งชื่อของ Schedules นี้ เช่น 0-11-x-x-x ผู้เขียนตั้งให้เข้าใจเหมือนกับ crontab format
  • Description : คำอธิบาย ในส่วนนี้อาจจะใส่รายละเอียดอื่นๆ ให้เข้าใจง่ายขึ้นไปอีก เช่น ทำงานทุกๆ 11:00 AM ของทุกวัน เป็นต้น
  • Starts : จะให้ Schedules นี้เริ่มทำงานครั้งแรกเมื่อไหร่
  • Time zone : เลือกโซนที่จะยึดเวลาเอาไว้ได้เลย ซึ่งของเราก็ +7 Thailand – Indochina Tim
  • Recurrence : ให้ทำงานแบบครั้งเดียวหรือทำไปเรื่อยๆ ในบทความนี้ ให้เลือกเป็น Recurring คือทำไปเรื่อยๆ
  • Recur every : เมื่อเลือก Recurring ก็จะปรากฏให้เลือกว่าจะให้ทำทุกๆ กี่วัน หรือกี่เดือน ซึ่งเราเลือก 1 Day
  • Set expiration : จะให้หยุดหรือยกเลิกเมื่อถึงวันที่เท่าไหร่ ผู้เขียนเลือก No

หลังจาก Set Schedules และทำการ Link กับ Runbook ทั้ง Enable และ Disable เป็นที่เรียบร้อยแล้ว ก็แค่รอเวลาให้ถึงช่วงเวลาที่เราตั้งค่าไว้ หลังจากนั้นก็กลับมาดู ผลงานอันยอดเยี่ยมของเรา ว่า Azure Blob Storage ในส่วนของ SFTP เปิด-ปิด ตามที่เรากำหนดหรือไหม


จะเห็นว่าการตั้ง Schedules แบบนี้จะช่วยให้เรานั้นประหยัดค่า SFTP ของ Azure Blob Storage ไปได้เดือนนึงเยอะมากๆ รวมถึงป้องกันช่องโหว่เล็กๆ ในการเปิด SFTP ทิ้งไว้อีกด้วย ผู้เขียนหวังเป็นอย่างยิ่งว่าบทความนี้จะช่วยเหลือเพื่อนๆ ได้ไม่มากก็น้อย หรือจะนำไปต่อยอดทำ Automation กับ Service อื่นๆ อีกก็ได้

0