自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Terraform 如何導入以及管理 AWS 現有安全組

開發(fā) 開發(fā)工具
導入配置文件并準備就緒后,轉到創(chuàng)建的任何安全組目錄并編輯main.tf文件并進行更改,例如添加新的入口規(guī)則或更改允許的端口號的 CIDR IP 地址等。

?HashiCorp Terraform 是一個IT基礎架構自動化編排工具,可以用代碼來管理維護 IT 資源。Terraform的命令行接口(CLI)提供一種簡單機制,用于將配置文件部署到 AWS 或其他任意支持的云上,并對其進行版本控制。它編寫了描述云資源拓撲的配置文件中的基礎結構,例如虛擬機、存儲賬戶和網絡接口。

Terraform是一個高度可擴展的工具,通過 Provider 來支持新的基礎架構。Terraform能夠讓您在云上輕松使用簡單模板語言來定義、預覽和部署云基礎結構。您可以使用Terraform來創(chuàng)建、修改、刪除ECS、VPC、RDS、SLB等多種資源。

在本文中,我們將了解如何使用 Terraform 管理現有和已創(chuàng)建的 AWS 安全組?;A設施革命的新時代已經開始,我們已經開始在配置管理工具(如 Ansible、Terraform、SaltStack 等)的幫助下以代碼的形式配置、管理和管理我們的基礎設施。

如果您是 Terraform 的新手并且想了解如何將 Terraform 與 AWS 基礎知識結合使用,可以參考本文。

本文的目的

我們知道 Terraform 很強大,我們可以使用 Terraform 高效的管理或創(chuàng)建整個 AWS/GCP/DigitalOcean 云基礎設施,但我們經常發(fā)現自己有一些額外的資源,這些資源通常是早期手動創(chuàng)建的,而不是由 Terraform 管理的。

將所有這些非托管資源(安全組)引入 Terraform 并使它們成為基礎設施即代碼。我們可以使用Terraform import命令。

但是將這些資源一一導入是非常麻煩的。所以我們嘗試使用 Ansible 將其自動化,結果就是這樣。

使用 Terraform 導入和管理現有 AWS 安全組

盡管如此,許多 DevOps 工程師仍在登錄 AWS 管理控制臺以手動更新安全組入站和出站流量路由,例如打開端口、啟用流量路由等。這沒有任何問題,但問題是您無法跟蹤您的團隊所做的更改除非您將其統(tǒng)一使用版本控制來管理。這就是 Infra as code 的優(yōu)勢所在。

想象一下,您將安全組作為代碼,并且您所做的每項更改都在您的 Git 存儲庫(如 BitBucket 或 Github)中正確提交和管理。每個更改都將使用 git 日志和提交消息進行跟蹤,并且還會有配置的備份,以防您想要回滾。不僅如此。

我列出了您應該將 AWS 安全組作為代碼進行管理的幾個原因。

  • 它使您能夠跟蹤所有更改,例如打開/關閉端口以及更改的原因。
  • 您可以使用 Commit 消息進行更好的安全審計
  • 輕松高效的管理
  • 使您能夠進一步自動化您的基礎架構
  • 輕松找到您的公開路線并在發(fā)生任何安全事件之前進行預防
  • 更好的業(yè)務連續(xù)性/災難恢復策略。
  • 單擊 Jenkins 作業(yè)允許/禁止 IP/端口/組

因此,將您的 AWS 安全組作為代碼來管理是非常高效的。

所以現在讓我們看看我是如何設法將我現有的 AWS 安全組(所有安全組)導入 Terraform 并對其進行管理的。

Ansible + Terraform – 提供幫助

我是 Ansible 和 Terraform 的粉絲,兩者在管理基礎設施方面都很棒,而 Ansible 是 pythonic,Terraform 有自己的語言,稱為 Hashicorp 配置語言,也支持 JSON。

我們在這里使用 Python 的原因是我們將使用 Ansible 的ec2_group_facts模塊獲取所有安全組及其信息,這也可以使用 AWS CLI 完成,但我更喜歡這種方式來更好地處理數據。

這是我們的設計將如何進行的圖示。

圖片

如果您看不懂我的圖,我在這里寫下相同的內容以供參考。

在我們的設置中。Ansible playbook 是使用模塊調用 Terraform 和 EC2 數據收集的主要組件ec2_group_facts。

為了讓 Ansible 能夠訪問 AWS,您需要在環(huán)境變量中啟用 AWS 編程訪問和身份驗證密鑰。

$ export AWS_ACCESS_KEY_ID=AK************IEVXQ
$ export AWS_SECRET_ACCESS_KEY=gbaIbK*********************iwN0dGfS

這足以使 Ansible 和 Terraform 能夠訪問您的 AWS 基礎設施。但是,您可能會遇到一些隱藏的細節(jié)和問題(就像我遇到的那樣)如果您遇到困難或在評論中讓我知道,您可以參考以下文章,我會盡快提供幫助

  • 為 Ansible AWS 設置 Boto python:(https://www.middlewareinventory.com/blog/ansible-aws-ec2/#Environment_Setup_for_Ansible_to_work_with_AWS_EC2_module)
  • 為 AWS 設置編程訪問——密鑰和秘密:(https://www.middlewareinventory.com/blog/terraform-aws-example-ec2/#Setup_Programmatic_Access)
  • 安裝和配置 AWS CLI:(https://www.middlewareinventory.com/blog/aws-cli-ec2/#Install_AWS_CLI)
  • Terraform AWS 配置基礎知識:(https://www.middlewareinventory.com/blog/terraform-aws-example-ec2/)

為 Ansible 和 Terraform 準備好您的環(huán)境后,我們可以繼續(xù)進行。

圖片

"

Ansible 和 Terraform 如何協(xié)同工作

完成 AWS 和 Ansible 集成的訪問設置后,您將能夠從 ansible 訪問您的 AWS 帳戶并執(zhí)行所有 AWS 相關模塊。

在本 playbook 中,我們還將使用這樣一個名為的模塊ec2_group_facts,它可以幫助我們獲取有關安全組的所有信息。那將是我們的第一步。

然后我們將為從 AWS 帳戶獲取的每個安全組創(chuàng)建一個目錄,并使用terraform import命令和安全組 ID創(chuàng)建 Terraform 配置文件。

導入完成后,我們需要刪除 terraform 配置文件中的一些配置元素,例如ownerid、arn、group id等,這些值/元素應該由 Terraform 自動填充,因此 terraform 不會讓您事先定義它。

從配置文件中刪除這些自動生成的元素/變量后,我們將使用以下terraform validate命令驗證文件。

因此,這些是我們要執(zhí)行的四個步驟,以使您的所有安全組都由 Terraform 管理。

Ansible Playbook導入所有安全組并添加到 Terraform

所以,是時候編寫一些代碼了,理論就夠了。

執(zhí)行劇本之前要記住的幾點:

  • 您需要更新destdir變量,ansible 將為它正在獲取的每個安全組創(chuàng)建新目錄。目錄名稱將與安全組名稱相同(如果安全組名稱中有空格,它將被轉換為-連字符)
  • 你需要替換你對應vpc的vpc-id變量

The Playbook

---
- name: Security Group Playbook
hosts: localhost
vars:
destdir: /apps/gritfy/Terraform/SecGroups
itemstochange: ['arn\s+=.+$','\sid\s+=.+$','owner_id\s+=.+$']


tasks:
- name: ec2 security group information fetch
ec2_group_facts:
filters:
vpc-id: vpc-0a8ae2c90f5ca6cfa
register: result


- name: Creating a dictionary of Security Group IDs and Names
set_fact:
secdict: "{{ secdict | default ([]) + [ { 'name': item.group_name.replace(' ','-'), 'id': item.group_id } ] }} "
with_items: "`result`.`security_groups`"
loop_control:
label: "` item`.`group_name`"


- name: Create the Directory
file:
path: "`destdir`/`item`.`name`{{item.id[0:7]}}" # required. Path to the file being managed.
state: directory
register: dircrt
loop: "`secdict`"


- name: Terraform Import
shell: |
git init
echo 'provider "aws" {\n\tregion = "us-east-1"\n} \n\nresource "aws_security_group" "elb_sg" {\n\n}' > main.tf
terraform init
terraform import aws_security_group.elb_sg {{item.id}}
echo 'provider "aws" {\n\tregion = "us-east-1"\n} \n' > main.tf
terraform show -no-color >> main.tf
git add .
git status
git commit -m "Updated Git"
pwd && ls -lrt
args:
chdir: "`destdir`/`item`.`name`{{item.id[0:7]}}"
loop: "`secdict`"
when: dircrt is changed


- name: Change config
lineinfile:
path: "`destdir`/`item`.`0`.`name`{{item.0.id[0:7]}}/main.tf"
regexp: "` item`.`1 `"
state: absent
backup: yes
with_nested:
- "` secdict `"
- "` itemstochange `"


- name: Terraform Validate
shell: |
terraform validate
args:
chdir: "`destdir`/`item`.`name`{{item.id[0:7]}}"
loop: "`secdict`"
register: tfvalidate
failed_when: "'Success' not in tfvalidate.stdout"

Ansible Playbook 任務說明

讓我們?yōu)g覽一下劇本,了解每項任務的設計目的。

1.任務 :EC2 信息獲取

此任務使用名為的模塊ec2_group_facts?,它使用您環(huán)境中的 AWS 訪問密鑰和秘密直接連接到您的 AWS 帳戶并獲取所有屬于vpc?參數中提到的特定的安全組。確保vpc-id在運行劇本之前更新過濾器值。

2?.任務 :使用收集的值創(chuàng)建字典

ec2_group_facts 模塊會產生很多關于安全組的信息,但我們只需要一個security group name和security group id

因此,我們正在遍歷上一個任務收集的輸出并創(chuàng)建一個名為secdict?我們正在使用set_fact模塊在運行時創(chuàng)建變量的字典

3.任務 :為每個安全組創(chuàng)建一個目錄——命名約定

如前所述,我們將為每個安全組創(chuàng)建專用目錄,其中將保存相應安全組的 Terraform 配置文件。

此目錄的名稱將是安全組名稱和安全組 ID 的前 7 個字符的組合,這是為了避免重復。AWS 對安全組的命名沒有唯一名稱約束,因此可以有多個同名的安全組。

4.任務 :Terraform 導入任務

在此任務中,我們正在一個接一個地運行多個命令,就像我們在 shell 提示符下鍵入一樣。使用ansible shell 模塊  

這些是我們將要完成的任務列表:

  1. 我們在新建的sec組目錄下初始化一個git repo
  2. 創(chuàng)建一個main.tf以 AWS 供應商規(guī)范命名的 Terraform 配置文件
  3. 執(zhí)行terraform init以在目錄上初始化 terraform
  4. terraform import使用命令和相應安全組的 id執(zhí)行導入過程
  5. 將導入的配置寫回到main.tf我們在第 2 步創(chuàng)建的配置文件中
  6. 其余步驟用于版本控制更改,如添加、提交等。

5.任務 :Terraform 文件更正并刪除不需要的字

在此任務中,我們將從創(chuàng)建的main.tf配置文件中刪除不需要的行,否則會使文件在語法上不正確。

6.任務 :驗證更改后的配置

最后,我們可以使用將在所有安全組目錄中執(zhí)行的命令來驗證 Terraform 配置文件main.tf?是否對每個安全組有效。當驗證命令使用ansible failed_whenterraform validate?返回失敗消息時,則為失敗(https://www.middlewareinventory.com/blog/ansible-changed_when-and-failed_when-examples/)

playbook 執(zhí)行和結果

如果你做的一切都是正確的。您將能夠在您的 AWS 賬戶中導入屬于特定 VPC 的所有安全組,并且能夠使用Terraform 進行管理。

您將在 playbook 中定義的 workspace(destdir) 目錄下使用安全組名稱創(chuàng)建目錄。

圖片

在 Terraform 文件中進行更改并應用它來驗證

導入配置文件并準備就緒后,轉到創(chuàng)建的任何安全組目錄并編輯main.tf文件并進行更改,例如添加新的入口規(guī)則或更改允許的端口號的 CIDR IP 地址等。

完成更改后。我們就可以使用terraform plan?然后terraform apply它

我們將能夠看到我們的安全組已由 Terraform 成功管理。

責任編輯:武曉燕 來源: 新鈦云服
相關推薦

2020-10-26 07:40:17

Terraform

2018-12-19 08:00:24

Terraform開源

2015-03-20 17:29:04

密鑰管理AWS云安全

2017-06-19 09:44:15

OpenStack安全組規(guī)則

2015-03-12 10:38:49

2010-03-16 14:32:51

Java系統(tǒng)線程組

2010-10-20 15:41:30

Windows安全全局安全組

2015-01-13 10:01:03

AWS市場亞馬遜云平臺

2016-06-16 17:22:49

云計算公有云

2016-09-12 13:34:52

云計算

2023-03-01 13:52:00

TerraformOpenStack運維

2022-09-02 08:28:44

AWS多云云提供商

2011-07-19 16:11:36

組策略安全模板

2019-12-23 10:47:54

ICS安全物聯(lián)網安全物聯(lián)網

2022-09-15 10:42:21

API安全網絡攻擊

2015-03-24 17:29:40

AWS密鑰管理云安全

2021-10-14 06:51:55

云原生AWS安全

2022-07-27 12:20:14

云原生應用安全DevOps

2021-11-12 15:42:34

MySQL數據庫權限

2010-05-13 13:53:43

點贊
收藏

51CTO技術棧公眾號