ใช้ IAM Policy และ Tag ป้องกันเผลอลบ Resource บน AWS โดยไม่ตั้งใจ
Use IAM Policy and Tag to Prevent Accidental Deletion of AWS Resources
สมมุติผมสร้าง ECS cluster ขึ้นมา จะทำยังไงได้บ้างเพื่อป้องกันไม่ให้คนที่ “มีสิทธิ์ลบ” ไป “เผลอลบ” มันโดยไม่ตั้งใจ หรือภาษาชาวบ้านเรียกมือลั่น (อ้อ resource อื่นก็ใช้หลักการเดียวกันครับ)
— — — — — — — — —
บทความทั้งหมดของผม
— — — — — — — — —
ใช้ IAM Policy และ Tag ร่วมกัน
1. สร้าง IAM Policy
ใส่ชื่อเป็น DenyDeleteProtectedECSClusters และใส่ policy ตามนี้
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyDeleteProtectedECSClusters",
"Effect": "Deny",
"Action": [
"ecs:DeleteService",
"ecs:DeleteCluster",
"ecs:DeleteCapacityProvider"
],
"Resource": [
"arn:aws:ecs:*:*:service/*/*",
"arn:aws:ecs:*:*:cluster/*",
"arn:aws:ecs:*:*:capacity-provider/*"
],
"Condition": {
"StringEquals": {
"ecs:ResourceTag/DeleteProtection": "true"
}
}
}
]
}
ป.ล. อันนี้เป็นเพียงตัวอย่าง สามารถแก้ไขตามสะดวก
2. ใส่ Tag ให้กับ Resource
ตัวอย่างของผมเป็น ECS cluster ใช่มั้ยครับ ผมก็ไปใส่ tag ตามนี้
- Key = DeleteProtection
- Value = true
3. นำ Policy ไปใช้งาน
สามารถเลือก apply ได้หลายที่ตามสะดวกเลย เช่น
- IAM User
- IAM Group
- IAM Role
- OU บน AWS Organizations (ผ่าน SCP - Service Control Policy)
หรืออย่างของผมมีหลาย account อยู่ใน AWS Organizations ผมก็ไปสร้าง SCP แล้ว apply ไปที่ root เลย เพราะฉะนั้นทุก account/OU ที่ผมมีจะโดน policy นี้หมด
4. ผลลัพธ์ที่ได้
ตอนนี้จะไม่มีใครสามารถลบ resource ที่ติด tag เป็น DeleteProtection = true ได้แม้จะมี permission ก็ตาม ถ้าหากต้องการลบก็จะต้องแก้ไขหรือลบ tag ออกก่อน
5. แล้วจะบังคับให้ใส่ Tag ตอนสร้าง Resource ได้มั้ย?
ได้ครับ เมื่อเป็นแบบนี้แล้วก็ควรบังคับให้ต้องใส่ tag ดังกล่าวทุกครั้งที่สร้าง resource เลยจะดีกว่า ซึ่งตรงนี้ผมขอรวบไปว่ากันในบทความนี้เลย
ถ้าคิดว่าบทความนี้มีประโยชน์ ฝากกด clap, follow และ share บทความนี้ให้ผมด้วยนะครับ ขอบคุณมากครับ ^_^
— — — — — — — — —
บทความทั้งหมดของผม
— — — — — — — — —