在大型企業云環境中,EC2實例的標簽(Tag)是資源分類、成本分攤和權限管理的核心依據。然而,實際運維中常出現未標注標簽的“孤兒實例”,導致資源歸屬模糊、賬單難以追溯,甚至因長期運行產生意外成本。為解決這一問題,需設計一套自動化方案:通過 AWS 原生工具定期掃描未標簽的 EC2實例,并自動終止不符合規范的資源,同時確保關鍵業務實例不受影響。
采用的服務為:AWS Systems Manager + Amazon EventBridge。本方案無需編寫代碼,僅通過 AWS 控制臺配置即可實現。
AWS Systems Manager(SSM)自動化文檔:定義掃描和終止實例的標準操作流程。
Amazon EventBridge:設置定時觸發規則(如每天凌晨執行)。
IAM 權限控制:通過角色策略限制僅掃描特定標簽鍵值(如 Environment=Production 外的實例)。
終止保護機制:排除已設置 TerminateProtection=true 的實例,避免誤刪關鍵資源。
本次采用AWS Console界面完成作業。
注意:根據項目的具體情況,可以采用不同的實施方法。比如使用命令行(CLI)部署、代碼部署 (CloudFomation、Terraform等)、以及其它開發語言(SDK)完成作業。
步驟一:創建 SSM 自動化文檔
登錄 AWS 控制臺,進入 Systems Manager > Automation > Create automation。
選擇 Amazon EC2 API actions 模板,輸入文檔名稱(如 TerminateUntaggedInstances)。
在 Steps 中添加以下操作:
aws:ec2DescribeInstances:篩選未標簽實例(條件:TagFilters=[{Key="*", Values=[]}])。
aws:ec2TerminateInstances:終止符合條件的實例(需通過 InstanceIds 參數動態傳入)。
保存文檔并記錄 ARN(后續 EventBridge 調用需使用)。
步驟二:配置 EventBridge 定時觸發
進入 EventBridge > Create rule,選擇 Schedule 模式。
設置觸發頻率(如 cron(0 3 * * ? *)表示每天凌晨3點執行)。
在 Targets 中添加 SSM Automation,選擇剛創建的文檔,并配置輸入參數(如 InstanceIds="{{ automation:OUTPUT_S3_URI }}")。
步驟三:設置 IAM 權限與終止保護
為 SSM 執行角色附加策略,限制僅允許終止未標簽實例。
{
"Effect": "Deny",
"Action": "ec2:TerminateInstances",
"Resource": "*",
"Condition": {
"StringEquals": {"ec2:ResourceTag/Environment": "Production"},
"Bool": {"ec2:TerminateProtected": "false"}
}
}
對關鍵實例手動啟用終止保護:在 EC2控制臺選中實例 > Actions > Instance Settings > Change Termination Protection。
1. 手動觸發測試:在 SSM 控制臺選擇文檔 > Start execution,觀察實例終止日志。
2. 檢查 CloudTrail 記錄:確認終止操作由 AWSServiceRoleForSSM 角色發起,且僅針對未標簽實例。