我尝试使用Terraform在AWS上构建/销毁ASAv

这是Fujitsu冒险日历的第十天。
因为这是我今年最引以为傲的事件,所以我想总结一下。

背景 – 就是一件事、一個人以及一個地方的環境和條件。

“嗯,我想要快速地设置并验证一下ASAv。”

「连许可证和形象都准备不好。
如果可能的话,我不想意识到公司的防火墙之类的东西,所以不用CML、GNS3和EVE-NG。」
「好吧。就在AWS上建立吧。哎呀,我忘记了怎么做。
又得从头开始查找并构建了吗……」

有时会有这种情况对吧?我曾经也遇到过。

因此,我将在本次文章中介绍如何轻松在AWS上构建ASAv。

简而言之

①在AWS上使用ASAv。
②使用Terraform进行配置/构建。
③使用terraform destroy确认AWS上计费的资源已消失。
按照这个步骤进行。

undefined

环境

我正在Windows 10企业版上运行WSL2。
我使用Ubuntu和Python。

版本

$cat
 /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"

$python3 -V
Python 3.8.10

>wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

Terraform 是什么?

Terraform 是由 HashiCorp 创建的开源配置即基础设施的软件工具。

可以自动化在多云环境中构建计算机和网络。

使用Terraform,你就不会再遇到「暂时在AWS上启动了ASAv,但无法联网…是什么缺少了…」这样的问题了。
这次使用Terraform可以预先准备好ASAv和AWS的设置,涉及到“连接到互联网所需的设置”。一旦设置完成,下次使用时就是完整的设置,所以不会有设置不足的情况。
哎呀,真是精神上很好呢。

由于我认为阅读本文章的人大多数都是希望快速构建的人,所以我将省略详细解释。

 

这个问题很严肃。

如果没有AWS账号的人,首先需要创建一个。

 

使ASAv在AWS上可用。

我将使用AWS服务中的[AWS Marketplace]。

只需一个选项,将以下内容以中国式的方式进行转述:
在[产品检测]中,如果您搜索”ASAv”,将会出现一个最顶部的选项,您需要选择Cisco Secure Firewall ASA Virtual – BYOL。

undefined
undefined

我认为会出现上述的画面。
保持现状

选择“继续订阅”
同意“接受条款”

如果您能看到“感谢您的订阅”,我认为就没有问题了。

虽然写着“订阅”,但并不会立即产生费用。这似乎意味着同意Cisco定义的条件。当ASAv作为实例启动时,当然会计费。

生成ASA的SSH密钥

undefined

在您自己的设备上使用SSH时,请将之前生成的pem文件存放在.ssh目录中,以免遭到责备。

hmasayuk@:Downloads$ cp cisco_asav_keypair.pem ~/.ssh/cisco_asav_keypair.pem
hmasayuk@:Downloads$
hmasayuk@:Downloads$ cd ~/.ssh
hmasayuk@:.ssh$
hmasayuk@:.ssh$ ls
cisco_asav_keypair.pem  id_git_rsa      id_rsa      known_hosts
config                  id_git_rsa.pub  id_rsa.pub  known_hosts.old

hmasayuk@:.ssh$ sudo chmod 0400 cisco_asav_keypair.pem
hmasayuk@:.ssh$

创建IAM用户

在[身份及访问管理]中,您可以通过[添加用户]来添加用户。创建一个具有管理员权限的身份及访问管理。

请确认通过访问密钥程序进行访问。
我们将为与Terraform通信的AWS生成访问密钥和秘钥。
用户名已设为“TerraformAdminUser”。

rapture_202212081705202.jpg
rapture_20221208170600s.jpg

tag的部分可以直接进行下一步操作而无需更改。(留空)

继续进行下一步操作后,会显示以下内容。

・访问密钥ID
・秘密访问密钥

要么保持关闭,或者悄悄地记下来。

让我们给IAM分配尽可能有限的权限!!!

在终端中设置环境变量。
将刚才获取的值导出到终端。

hmasayuk@:$ export AWS_ACCESS_KEY_ID="アクセスキーID"
hmasayuk@:$ export AWS_SECRET_ACCESS_KEY="シークレットアクセスキー"
hmasayuk@:$ export AWS_DEFAULT_REGION="us-east-1"

我选择将区域设为us-east的原因是为了与所参考的代码相匹配。
虽然可以通过更改代码中的区域和设置来使其正常工作,但我决定继续保持当前设置。

你现在可以在本地的终端上准备好执行Terraform了。

②使用Terraform进行配置/构建。

我使用了这段代码。

 

使用venv在虚拟环境中执行。

hmasayuk@:Codes$ python3 -m venv Terraform
hmasayuk@:Codes$
hmasayuk@:Codes$
hmasayuk@:Codes$ source Terraform/bin/activate
(Terraform) hmasayuk@:Terraform$ git clone https://github.com/KyMidd/AWSCiscoASAvTerraform.git
Cloning into 'AWSCiscoASAvTerraform'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 16 (delta 6), reused 14 (delta 4), pack-reused 0
Unpacking objects: 100% (16/16), 3.71 KiB | 14.00 KiB/s, done.
hmasayuk@:Codes$

让我们看一下存储在main.tf文件中第12至17行的部分。
· my_pyblic_ip(与AWS安全组相关)
· ssh_key_name
请根据各自的配置进行编辑。

请不用多言,只需研究代码,然后就会明白“哦,这就是那个设定”了。

locals {
  cisco_asav_name       = "CiscoASAv_hmasayuk"  # Just for fun, name your ASAv anything you'd like!
  my_public_ip          = "自端末のIP"  # Update this to your public IP when deploying
  ssh_key_name          = "cisco_asav_keypair"  # Update only if you've created an SSH key with a different name than cisco_asav_keypair
  asav_public_facing_ip = "172.16.20.10"
}

如果想要更改设置,请编辑此文件。这个文件中记录了关于ASA的设置和区域信息。

aws_cisco_asav_config.txt
此文件包含 Day0 的配置信息。
当查看内容时,可以看到用户名为 admin ,无密码,权限为 15。
由于涉及登录信息,请记住它。

开始执行Terraform!

在存储main.tf的目录中运行terraform init。

(Terraform) hmasayuk@:AWSCiscoASAvTerraform$ terraform init
terraform: command not found

如果忘记安装,就会被这样生气地提醒。
让我们安装吧。
我使用brew在我的电脑上安装了terraform。

 

重新执行,terraform init。

(Terraform) hmasayuk@:AWSCiscoASAvTerraform$ terraform init

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 2.36.0"...
- Installing hashicorp/aws v2.36.0...
- Installed hashicorp/aws v2.36.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

╷
│ Warning: Version constraints inside provider configuration blocks are deprecated
│
│   on main.tf line 9, in provider "aws":
│    9:   version = "~> 2.36.0"
│
│ Terraform 0.13 and earlier allowed provider version constraints inside the provider
│ configuration block, but that is now deprecated and will be removed in a future version of
│ Terraform. To silence this warning, move the provider version constraint into the
│ required_providers block.
╵

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
(Terraform) hmasayuk@:AWSCiscoASAvTerraform$

如果输出了 “Terraform 初始化成功!” 的话,看起来应该没问题了。

警告已经出现了,但是说的是“这是一个不推荐的设置,将来的版本会取消,所以请小心”。 是关于main.tf中provider “aws”的version部分。 如果您担心的话,请将其注释掉。

# Download any stable version in AWS provider of 2.36.0 or higher in 2.36 train
#provider "aws" {
#  region  = "us-east-1a"
#  version = "~> 2.36.0"
#}

紧接着执行Terraform apply。Terraform将解析配置并准备在AWS上构建内容。回答以下问题,并输入“yes”,即可开始构建。

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes ?自分で入力!!

正常运行后,将输出公共IP地址。

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_instance.cisco_asav: Creating...
aws_instance.cisco_asav: Still creating... [10s elapsed]
aws_instance.cisco_asav: Still creating... [20s elapsed]
aws_instance.cisco_asav: Creation complete after 20s [id=i-018b5564b6b2d0fdf]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

asav_public_ip = "34.194.120.227"

因为需要花费一些时间,所以我们继续向公共IP地址发送Ping命令,并等待回应。

(Terraform) hmasayuk@:AWSCiscoASAvTerraform$ ping 34.194.120.227
PING 34.194.120.227 (34.194.120.227) 56(84) bytes of data.
64 bytes from 34.194.120.227: icmp_seq=249 ttl=232 time=186 ms
64 bytes from 34.194.120.227: icmp_seq=250 ttl=232 time=183 ms
64 bytes from 34.194.120.227: icmp_seq=251 ttl=232 time=188 ms
64 bytes from 34.194.120.227: icmp_seq=252 ttl=232 time=189 ms
64 bytes from 34.194.120.227: icmp_seq=253 ttl=232 time=187 ms

来了━(゚∀゚)━!

在AWS的一方自动为我们创建了。

ASAv的SSH似乎没有问题。

(Terraform) hmasayuk@:AWSCiscoASAvTerraform$ ssh -i ~/.ssh/cisco_asav_keypair.pem admin@34.194.120.227
User admin logged in to AwsCiscoASAv
Logins over the last 1 days: 2.  Last login: 09:08:39 UTC Dec 8 2022 from 64.104.44.104
Failed logins since the last login: 0.
Type help or '?' for a list of available commands.
AwsCiscoASAv>

确保通过使用”terraform destroy”命令销毁的AWS资源已经消失。

rapture_20221209181828.jpg

让我们确认一下是否已经删除了此次创建的所有资源。
执行terraform destroy命令。

(Terraform) hmasayuk@:AWSCiscoASAvTerraform$ terraform destroy
・
・(省略)
・
Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes?自分で入力

・
・(省略)
・

Destroy complete! Resources: 12 destroyed.
rapture_20221209182715.jpg

太容易了…

总结

AWS的资源有一定的删除顺序,有时会因为忘记删除而产生费用,这让人很担心。很多人可能都有在查看账单后才意识到这一点。

希望这篇文章能对某人有所帮助。

bannerAds