Hermes-HCN-IAC: aliyun-test

基于 Terraform 的阿里云基础设施即代码(IAC)项目,用于自动化部署和管理阿里云资源。


📋 目录


项目概述

本项目提供标准化的阿里云基础设施部署框架,采用模块化设计,通过 GitLab CI/CD 实现持续集成和持续部署,并使用 Azure China Storage Account 存储 Terraform 状态文件。


技术栈

组件 版本 说明
Terraform >= 1.13.0 基础设施即代码工具
Alibaba Cloud Provider ~> 1.273.0 阿里云 Terraform 提供商
Azure Storage Account - 远程状态存储(中国区)
GitLab CI/CD - 持续集成与持续部署
OIDC - GitLab OIDC 认证阿里云

项目结构

aliyun-test/
├── .cicd/                                         # CI/CD 配置目录
│   ├── Jobs_config/                               # 环境配置文件
│   │   ├── config_dev.yml                         # 开发环境配置
│   │   ├── config_prd.yml                         # 生产环境配置
│   │   └── config_uat.yml                         # UAT 环境配置
│   ├── Jobs_template/                             # CI/CD 任务模板
│   │   ├── template_alicloud_oidc.yml             # 阿里云 OIDC 认证模板
│   │   ├── template_terraform_alicloud_mirror.yml # 阿里云镜像配置
│   │   ├── template_terraform_backend.yml         # Azure 状态存储模板
│   │   ├── template_terraform_change_rule.yml     # 变更规则模板
│   │   ├── template_terraform_remote_module.yml   # 远程模块配置
│   │   ├── terraform_apply.yml                    # Apply 任务
│   │   ├── terraform_lint.yml                     # TFLint 检查
│   │   ├── terraform_plan.yml                     # Plan 任务
│   │   ├── terraform_scan_checkov.yml             # Checkov 安全扫描
│   │   ├── terraform_scan_gitleaks.yml            # Gitleaks 敏感信息扫描
│   │   ├── terraform_scan_wizcli.yml              # Wizcli 安全扫描
│   │   ├── terraform_test.yml                     # 基础设施测试
│   │   └── terraform_validate.yml                 # 配置验证
│   └── .gitlab-ci.yml                             # GitLab CI/CD 主配置
├── backend.tf                                     # Terraform 后端配置
├── main.tf                                        # 主配置文件(模块引用)
├── outputs.tf                                     # 输出定义
├── variables.tf                                   # 变量定义
├── versions.tf                                    # 版本约束
├── terraform.dev.tfvars                           # 开发环境变量
├── terraform.uat.tfvars                           # UAT 环境变量
└── terraform.prd.tfvars                           # 生产环境变量

前置要求

  1. Terraform >= 1.13.0
  2. 阿里云 OIDC 认证(推荐)或 Access Key
  3. Azure China Storage Account(用于状态存储)
  4. GitLab CI/CD 配置相应变量

快速开始

1. 克隆项目

git clone https://gitlab.com/hermes-hcn-iac/aliyun-test.git
cd aliyun-test

2. 配置环境变量

选择对应环境的变量文件:

环境 变量文件
开发 terraform.dev.tfvars
UAT terraform.uat.tfvars
生产 terraform.prd.tfvars

3. 初始化 Terraform

# 设置 Azure China 环境变量
export ARM_ENVIRONMENT="china"
export ARM_ACCESS_KEY=""
# 初始化
terraform init

4. 切换工作空间(多环境管理)

# 创建工作空间
terraform workspace new dev   # 开发环境
terraform workspace new uat   # UAT 环境
terraform workspace new prd   # 生产环境
# 切换工作空间
terraform workspace select dev

5. 查看执行计划

terraform plan -var-file=terraform.dev.tfvars

6. 应用配置

terraform apply -var-file=terraform.dev.tfvars

CI/CD 流程

项目集成了完整的 GitLab CI/CD 流水线:

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐    ┌──────────────┐    ┌──────────────┐
│  Gitleaks扫描   │ -> │   安全扫描阶段    │ -> │   质量检查阶段    │ -> │   Plan阶段   │ -> │   Apply阶段  │
│ (敏感信息检测)   │    │ (Checkov+Wiz)    │    │(Validate+Lint)  │    │ (生成计划)    │    │ (应用配置)   │
└─────────────────┘    └──────────────────┘    └─────────────────┘    └──────────────┘    └──────────────┘
阶段 任务 说明
terraform_scan_gitleaks terraform_scan_gitleaks 敏感信息扫描
terraform_scan_security terraform_scan_checkov Checkov 安全扫描
terraform_scan_security terraform_scan_wizcli Wizcli 安全扫描
terraform_quality terraform_validate Terraform 配置验证
terraform_quality terraform_lint TFLint 代码检查
terraform_quality terraform_test 基础设施测试
terraform_plan terraform_plan 生成执行计划
terraform_apply terraform_apply 应用配置(手动触发)

环境分支策略

分支 环境 部署方式 变量文件
dev 开发环境 自动部署 terraform.dev.tfvars
feature/* 功能分支 自动部署 terraform.dev.tfvars
uat UAT 测试环境 自动部署 terraform.uat.tfvars
prod 生产环境 手动确认 terraform.prd.tfvars

认证方式

OIDC 认证(推荐)

使用 GitLab OIDC 向阿里云获取临时凭证,避免持久化 Access Key:

  1. 在阿里云创建 OIDC Provider
  2. 创建 RAM 角色并配置信任策略
  3. 在 GitLab CI/CD 中配置变量:

Access Key 认证(备用)

export ALICLOUD_ACCESS_KEY_ID=""
export ALICLOUD_ACCESS_KEY_SECRET=""

状态管理

Azure China Storage Account

Terraform 状态文件存储在 Azure China Storage Account:

# backend.tf
terraform {
  backend "azurerm" {
    resource_group_name  = "wb-poc-rg"
    storage_account_name = "wbtfstate"
    container_name       = "wbtf"
    key                  = "network.tfstate"
  }
}

CI/CD 变量:

export VAR_TF_STATE_FILE_CREDENTIAL=""

变量说明

变量名 类型 描述 默认值
resource_group_name string 资源组名称 ""
resource_group_display_name string 资源组显示名称 ""
security_group_name string 安全组名称 ""
environment string 环境名称 (dev/uat/prd) ""

输出说明

输出名称 描述
security_group_id 安全组 ID

核心模块

项目使用以下远程 Terraform 模块:

模块 仓库地址
网络模块 git::https://gitlab.com/hermes-hcn-iac/aliyun-pattern/wb-terraform-alicloud-network.git?ref=dev

模块引用示例

module "network" {
  source = "git::https://gitlab.com/hermes-hcn-iac/aliyun-pattern/wb-terraform-alicloud-network.git?ref=dev"
  resource_group_name         = var.resource_group_name
  resource_group_display_name = var.resource_group_display_name
  security_group_name         = var.security_group_name
}

最佳实践

  1. 使用变量文件: 避免直接在命令行传递敏感信息
  2. 状态管理: 使用 Azure China Storage Account 进行远程状态存储
  3. OIDC 认证: 使用 GitLab OIDC 获取临时凭证,避免使用持久化 Access Key
  4. 代码审查: 所有变更必须经过代码审查
  5. 环境隔离: 使用 Terraform Workspaces 保持环境独立
  6. 最小权限原则: 限制 Terraform 执行账户的权限

故障排除

问题 排查方向
OIDC 认证失败 检查 ALICLOUD_ROLE_ARNALICLOUD_OIDC_PROVIDER_ARN 是否正确
状态存储连接失败 确认 ARM_ACCESS_KEY 包含正确的 Azure Connection String
远程模块下载失败 检查 CI_JOB_TOKEN 是否有权限访问私有模块仓库
权限不足 检查阿里云 RAM 角色是否具备创建资源的权限

CI/CD 变量配置

需要在 GitLab CI/CD 中配置以下变量:

变量名 说明 敏感
VAR_ALICLOUD_REGION 阿里云区域
VAR_ENVIRONMENT 环境名称
VAR_TF_VARIABLE_FILE Terraform 变量文件路径
VAR_TF_STATE_FILE_CREDENTIAL Azure Storage Connection String
VAR_WIZCLI_CLIENT_ID Wizcli 客户端 ID
VAR_WIZCLI_CLIENT_SECRET Wizcli 客户端密钥
VAR_WIZCLI_SCAN_POLICY Wizcli 扫描策略
VAR_WIZCLI_DOWNLOAD_URL Wizcli 下载地址
VAR_TF_CLI_DOWNLOAD_URL Terraform CLI 下载地址
VAR_TFLINT_DOWNLOAD_URL TFLint 下载地址

贡献指南

欢迎提交 Pull Request!请遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支 (feature/*)
  3. 提交代码
  4. 创建 Merge Request

许可证

MIT License


作者

Wenbo Yang


项目状态

Active Development