雲端環境中的基礎設施管理往往需要反覆進行許多設定工作,而自動化這些流程不僅能提高效率,還能減少人為錯誤。在與 AWS 互動時,Ansible 憑藉其簡單易用的特性成為一個理想的自動化工具。本文將探討如何使用 Ansible 在 AWS 環境中設定和管理基礎設施,特別是 VPC 環境和安全遠端存取。
在跳板機上安裝 Ansible
在雲端環境中,跳板機(Jump Box)是管理其他節點的重要工具。首先,讓我們建立 Ansible 角色來安裝 Ansible 在跳板機上:
---
- name: upgrade all packages
yum: name=* state=latest
- name: install the 'Development tools' package group
yum: name="@Development tools" state=present
- name: install required packages
yum: name={{ item }} state=present
with_items:
- epel-release.noarch
- python-pip
- python-devel
- name: install setuptools
pip: name=setuptools extra_args='--upgrade'
- name: install ansible
pip: name=ansible
這段 Ansible playbook 任務實作了幾個關鍵功能:首先更新所有套件,確保系統處於最新狀態;接著安裝「Development tools」套件組,這是編譯和開發所需的基本工具集;然後安裝 epel-release(提供額外套件)、python-pip(Python 套件管理工具)和 python-devel(Python 開發函式庫最後升級 setuptools 並安裝 Ansible。這個順序很重要,因為後續步驟依賴於前面步驟安裝的元件。
接下來,我們需要建立一個 playbook 來執行這個角色:
---
- hosts: tag_class_jumpbox
become: yes
roles:
- ansible
執行此 playbook:
ansible-playbook -i ec2.py install_ansible.yml
這個 playbook 針對所有帶有 tag_class_jumpbox
標籤的 EC2 例項執行操作,become: yes
表示使用提升許可權(相當於 sudo)執行命令,這對於安裝套件是必要的。透過 -i ec2.py
引數,Ansible 使用動態清單指令碼從 AWS 取得例項訊息,無需手動維護主機列表。
設定安全群組規則
在 AWS 中,安全群組(Security Group)控制著流量的進出。當你想從跳板機管理私有子網中的資源時,需要修改相應的安全群組規則:
- name: modify sg_database rules
ec2_group:
region: "{{ region }}"
vpc_id: "{{ vpc_id }}"
name: "{{ prefix }}_sg_database"
description: security group for databases
rules:
# allow ssh from the jump box
- proto: tcp
from_port: 22
to_port: 22
group_name: "{{ prefix }}_sg_jumpbox"
# allow mysql access from web servers
- proto: tcp
from_port: 3306
to_port: 3306
group_name: "{{ prefix }}_sg_web"
rules_egress:
- proto: tcp
from_port: 80
to_port: 80
cidr_ip: 0.0.0.0/0
- proto: tcp
from_port: 443
to_port: 443
cidr_ip: 0.0.0.0/0
這段設定為資料函式庫群組定義了入站和出站規則。入站規則允許來自跳板機的 SSH 連線(連線埠 22)和來自網頁伺服器的 MySQL 連線(連線埠 3306)。出站規則允許資料函式庫器存取外部的 HTTP(連線埠 80)和 HTTPS(連線埠 443)服務。這種設定遵循最小許可權原則,只允許必要的流量透過,增強了安全性。
佈署 Open虛擬私人網路 伺服器實作安全遠端存取
在企業環境中,安全地存取私有資源是一個常見需求。Open虛擬私人網路 Access Server 提供了一個全功能的 SSL 虛擬私人網路 解決方案,支援各種設定和精細的存取控制。
建立 Open虛擬私人網路 安全群組
首先,我們需要建立一個適合 Open虛擬私人網路 伺服器的安全群組:
---
- hosts: localhost
connection: local
gather_facts: no
vars_files:
- staging_vpc_info
vars:
region: ap-southeast-2
allowed_ip: 123.xxx.xxx.xxx/32
prefix: staging
vpc_id: "{{ staging_vpc }}"
tasks:
- name: create security group for openvpn instance
ec2_group:
region: "{{ region }}"
vpc_id: "{{ vpc_id }}"
name: "{{ prefix }}_sg_openvpn"
description: security group for openvpn
rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: "{{ allowed_ip }}"
- proto: tcp
from_port: 443
to_port: 443
cidr_ip: 0.0.0.0/0
- proto: tcp
from_port: 943
to_port: 943
cidr_ip: 0.0.0.0/0
- proto: udp
from_port: 1194
to_port: 1194
cidr_ip: 0.0.0.0/0
rules_egress:
- proto: all
cidr_ip: 0.0.0.0/0
這個安全群組設定專為 Open虛擬私人網路 伺服器設計,開放了幾個關鍵連線埠:
- 連線埠 22 (SSH):僅允許從特定 IP 地址存取,提高安全性
- 連線埠 443 (HTTPS):Open虛擬私人網路 主要服務連線埠,允許全球存取
- 連線埠 943:Open虛擬私人網路 Web 介面連線埠,用於管理
- 連線埠 1194 (UDP):Open虛擬私人網路 的標準 UDP 通訊連線埠
出站規則允許所有流量,使 虛擬私人網路 伺服器可以連線到任何目標。這種設定為 Open虛擬私人網路 提供了必要的連通性,同時限制了管理存取。
啟動 Open虛擬私人網路 例項
接下來,我們將在公共子網中啟動 Open虛擬私人網路 伺服器例項:
---
- hosts: localhost
connection: local
gather_facts: no
vars_files:
- staging_vpc_info
vars:
region: ap-southeast-2
key: yan-key-pair-apsydney
instance_type: t2.micro
image: ami-a17f199b
prefix: staging
vpc_subnet_id: "{{ staging_subnet_public_0 }}"
tasks:
- name: openvpn server instance provisioning
ec2:
region: "{{ region }}"
key_name: "{{ key }}"
instance_type: "{{ instance_type }}"
image: "{{ image }}"
source_dest_check: no
wait: yes
group: "{{ prefix }}_sg_openvpn"
instance_tags:
Name: "{{ prefix }}_openvpn"
class: openvpn
environment: "{{ prefix }}"
id: openvpn_launch_01
vpc_subnet_id: "{{ vpc_subnet_id }}"
register: ec2
- name: associate new EIP for the instance
ec2_eip:
region: "{{ region }}"
instance_id: "{{ item.id }}"
with_items: ec2.instances