关于云计算:Terraform-使用入门以及在云上攻防中的作用

36次阅读

共计 4425 个字符,预计需要花费 12 分钟才能阅读完成。

文章首发于:前线 Zone 社区(https://zone.huoxian.cn/)
作者:TeamsSix

0x00 前言

Terraform 是一种资源编排工具,通过它能够很不便的去构建云服务资源,本文将以「在腾讯云上创立一个 COS 存储桶」为例进行演示。

0x01 Terraform 概述

Terraform 官网下载页面:https://www.terraform.io/down…,在这里找到本人的零碎进行装置即可。

目前 Terraform 根本曾经反对了大部分支流的云服务厂商,在 https://registry.terraform.io… 中能够看到其所反对的云服务厂商。

[upl-image-preview url=https://huoxian-community.oss…]

本文中将应用腾讯云作为演示,在平时应用 Terraform 时会频繁的去参考官网文档,其腾讯云的官网文档地址为:https://registry.terraform.io…

0x02 开始编写

首先创立一个文件夹(这里文件夹名称为 cos_bucket_demo),并新建以下文件。

.
└── cos_bucket_demo
    ├── README.md
    ├── main.tf
    ├── output.tf
    ├── terraform.tfvars
    ├── variables.tf
    └── version.tf
  • README.md 形容文件
  • main.tf Terraform 主体代码文件
  • output.tf 内容输入代码文件
  • terraform.tfvars 参数文件
  • variables.tf 变量申明文件
  • version.tf 版本信息文件

能够看到在 cos_bucket_demo 文件夹中,有多个 tf 后缀的文件,其实这些 tf 文件里的代码都能够写到一个 tf 文件里,但个别为了标准些,还是倡议分多个 tf 文件去写,一个文件夹对应一个 tf 场景。

接下来,咱们来看看每个 tf 文件里都有哪些内容。

version.tf

version.tf 个别是放和版本信息无关的代码,例如这里就是申明了 Provider 起源为 tencentcloud 且版本为 1.72.5,Provider 在这里能够了解成「提供云服务的厂商」的意思。

terraform {
  required_providers {
    tencentcloud = {
      source  = "tencentcloudstack/tencentcloud"
      version = "1.72.5"
    }
  }
}

如果常常应用某个云的 Provider,倡议指定固定的版本,这样在开启插件缓存后,每次初始化 Terraform 时,就不会因为 Provider 有更新了而要从新下载它,同时还会防止因为 Provider 更新导致代码不可用或者呈现告警的状况。

开启插件缓存办法能够参考:https://wiki.teamssix.com/Clo…

variables.tf

variables.tf 里个别会写上变量的申明,例如这里须要申明腾讯云的 secret id 和 secret key 变量。

variable "tencentcloud_secret_id" {
  type        = string
  description = "Set Tencent Cloud secret id."
  sensitive   = true
  nullable    = false
}

variable "tencentcloud_secret_key" {
  type        = string
  description = "Set Tencent Cloud secret key."
  sensitive   = true
  nullable    = false
}

其中 variable 前面的是变量名称,type 指定变量类型,description 用来形容变量的用处,sensitive 用来指定变量是不是敏感信息,nullable 用来指定变量是不是能够为空。

terraform.tfvars

terraform.tfvars 文件比较简单,在这里能够写上变量的值,这样在运行 Terraform 的时候,就不必从命令行中去指定变量了。

如果没有该文件,那么在执行 Terraform 代码时,Terraform 就会在命令行中提醒输出这些变量。

tencentcloud_secret_id  = "xxx"
tencentcloud_secret_key = "xxx"

output.tf

output.tf 文件里个别会指定要输入的内容,这里要输入的是 COS Bucket 的地址。

output "tencent_cloud_cos_bucket_name" {value       = "https://${tencentcloud_cos_bucket.cos_bucket_demo.cos_bucket_url}"
  description = "This is the bucket name of Tencent Cloud COS."
}

main.tf

最初 main.tf 一个就是最外围的文件了。

provider "tencentcloud" {
  secret_id  = var.tencentcloud_secret_id
  secret_key = var.tencentcloud_secret_key
  region     = "ap-beijing"
}

resource "tencentcloud_cos_bucket" "cos_bucket_demo" {bucket = "teamssix-${random_string.random_suffix.result}-${data.tencentcloud_user_info.foo.app_id}"
}

resource "random_string" "random_suffix" {
  length  = 7
  special = false
  upper   = false
}

data "tencentcloud_user_info" "foo" {}

首先在 provider 块中指定了腾讯云的 secret id 和 secret key 以及 region,接着应用 tencentcloud_cos_bucket resource 块用来创立存储桶。

因为腾讯云的 Bucket 名称中蕴含了使用者的 APP ID,所以这里还应用了 tencentcloud_user_info data 块,用来获取以后用户的 APP ID,同时为了防止 Bucket 名称反复,这里应用了 random_string resource 块用来生成一个随机数。

最初,就能够执行这些代码了。

0x03 执行代码

首先,将终端门路切到 cos_bucket_demo 文件夹下,运行初始化命令。

terraform init

该命令会辨认以后文件夹里的 tf 文件中所应用到的 Provider,而后去下载它。

如果提醒 Error: Failed to install provider,大多数状况是因为网络的问题,能够在终端里设置代理后再次尝试。

而后运行以下命令,该命令会查看以后代码是否存在问题,如果没问题就会给出接下来将要执行的打算。

terraform plan

最初,确认没问题后,就能够利用这个代码了。

terraform apply

在执行该命令的时候,会提醒 Enter a value,这时如果确认无误,就输出 yes 即可,最初就能够在 Outputs 中看到 Bucket 的 URL 了。

[upl-image-preview url=https://huoxian-community.oss…]

这时,在腾讯云控制台的存储桶列表中,就能够看到咱们方才创立的存储桶了。

[upl-image-preview url=https://huoxian-community.oss…]

这样,咱们就实现了利用 Terraform 创立云服务资源的过程,如果想要销毁这个资源也很容易,间接运行以下命令即可。

terraform destroy

0x04 在云上攻防中的作用

通过下面的内容,能够看到 Terraform 能够调用云厂商的 AK、SK 进行云服务资源的创立与获取,作为平安人员,咱们能够利用这个个性进行云上服务的批量信息收集,上面以 COS、CVM、CAM 的信息收集为例。

将 output.tf 改为以下内容

output "tencent_cloud_cos_bucket_list" {value = data.tencentcloud_cos_buckets.cos_buckets.bucket_list}

output "tencent_cloud_cvm_instances_list" {value = data.tencentcloud_instances.cvm_instances.instance_list}

output "tencent_cloud_cam_users_list" {value = data.tencentcloud_cam_users.cam_users.user_list}

将 main.tf 改为以下内容

provider "tencentcloud" {
  secret_id  = var.tencentcloud_secret_id
  secret_key = var.tencentcloud_secret_key
  region     = "ap-beijing"
}

data "tencentcloud_cos_buckets" "cos_buckets" {
}

data "tencentcloud_instances" "cvm_instances" {
}

data "tencentcloud_cam_users" "cam_users" {}

而后利用代码,就能够获取到 COS、CVM、CAM 的相干信息了,如果想获取其余的信息,能够在 Provider 腾讯云官网文档中找到。

[upl-image-preview url=https://huoxian-community.oss…]

从站在平安人员的角度来说,咱们齐全能够通过 Terraform 打造一个独属于本人的全云场景笼罩的 AK、SK 利用工具,而且咱们不必本人调取、调试任何 SDK,能够说是后劲有限了。

通过 Terraform 进行信息收集的这个想法来自 tanger 徒弟

0x05 最初

Terraform 的内容远远不止下面说的这些,官网文档对它的介绍也足够具体,同时当初也有了由第三方翻译的中文文档:https://lonegunmanb.github.io…

另外在 T Wiki 中,还有一些 Terraform 其余材料,比方 Terraform 可视化、代码安全检查的办法等等,也能够作为扩大浏览:https://wiki.teamssix.com/Clo…

如果你在编写 Terraform 代码的时候,想找一些其他人写的代码进行参考,那么无妨看看 TerraformGoat 这个我的项目:https://github.com/HuoCorp/Te…

最初倡议本人在编写 Terraform 代码的时候,多看官网文档,多用英文去搜寻,多用官网文档的代码,能够在很大水平上进步本人的效率。

正文完
 0