You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Terraform创建的AWS基础设施控制台变更通知?

实现Terraform创建资源的控制台修改通知方案

方案一:CloudTrail + CloudWatch Events + SNS(实时通知)

这是最直接的实时监控方案,利用AWS的操作审计和事件触发机制:

  • 步骤1:给Terraform创建的资源统一打标签
    确保所有Terraform管理的资源都添加ManagedBy: Terraform标签(可以在Terraform的provider级别设置默认标签,避免逐个资源添加):

    provider "aws" {
      region = "us-east-1"
      default_tags {
        tags = {
          ManagedBy = "Terraform"
        }
      }
    }
    

    已创建的资源可通过Terraform的import或AWS批量标签工具补打标签。

  • 步骤2:启用AWS CloudTrail
    确保CloudTrail已启用并记录目标区域的管理事件,将事件日志存储到指定S3桶中。

  • 步骤3:创建CloudWatch Events规则
    配置规则过滤符合以下条件的事件:

    1. 操作来自AWS控制台(通过userIdentity.type为IAMUser或Root过滤,排除Terraform使用的IAM角色/服务账号)
    2. 操作类型为资源修改/删除(如ModifyInstanceAttribute、UpdateBucketPolicy等,通过eventName包含Modify/Update/Delete匹配)
    3. 目标资源带有ManagedBy: Terraform标签

    示例事件模式(JSON):

    {
      "source": ["aws.ec2", "aws.s3", "aws.rds"], // 按需添加需要监控的服务
      "detail-type": ["AWS API Call via CloudTrail"],
      "detail": {
        "eventName": [{ "contains": "Modify" }, { "contains": "Update" }, { "contains": "Delete" }],
        "userIdentity": {
          "type": ["IAMUser", "Root"]
        },
        "resources": [{
          "tags": {
            "ManagedBy": "Terraform"
          }
        }]
      }
    }
    
  • 步骤4:配置SNS主题和订阅
    创建SNS主题,添加订阅(如邮箱、Slack Webhook、短信等),将CloudWatch Events规则的目标设置为该主题。当符合条件的事件触发时,你会收到包含操作详情的实时通知。

方案二:AWS Config + SNS(配置漂移检测)

如果需要关注资源配置是否偏离Terraform定义的状态,可使用AWS Config:

  • 步骤1:启用AWS Config
    开启AWS Config的资源配置记录,选择需要监控的资源类型。

  • 步骤2:创建自定义Config规则
    编写Lambda实现自定义规则,逻辑如下:

    1. 检测资源是否带有ManagedBy: Terraform标签
    2. 对比当前资源配置与Terraform状态文件中的配置(可将Terraform状态文件存储到S3,由Lambda读取后对比)
    3. 若发现配置漂移且修改来源非Terraform,触发合规失败
  • 步骤3:配置通知
    在AWS Config中设置合规规则的通知目标为SNS主题,当规则触发合规失败时发送告警通知。

方案三:Terraform漂移检测(定期校验)

作为实时监控的补充,可定期运行terraform plan检测资源漂移并发送通知:

  • 使用CI/CD工具(如GitHub Actions、GitLab CI)定期执行terraform init + terraform plan
  • 解析terraform plan的输出,若发现资源漂移(即控制台修改的内容),通过工具内置的通知功能发送告警
  • 示例GitHub Actions片段:
    name: Terraform Drift Check
    on:
      schedule:
        - cron: '0 0 * * *' # 每天凌晨执行
    jobs:
      drift-check:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - uses: hashicorp/setup-terraform@v3
          - run: terraform init
          - run: terraform plan -out=plan.out
          - run: terraform show -json plan.out > plan.json
          - name: Check for drift
            run: |
              if terraform plan | grep -q "will be changed"; then
                echo "Resource drift detected!"
                # 这里添加通知逻辑,比如调用Slack API或发送邮件
              fi
    

内容的提问来源于stack exchange,提问作者Bhavesh R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:20:28