Cloud Custodian 作為一款開源的雲端資源管理工具,提供自動化的安全策略執行與成本最佳化方案。其支援 AWS、Azure 和 GCP 等多個雲端平台,允許使用者透過 YAML 檔案定義策略,靈活管理雲端資源。透過 Cloud Custodian,使用者可以設定各種過濾條件和執行動作,例如檢查未加密的 S3 儲存桶並自動啟用加密、停止閒置的 EC2 執行個體、稽核 IAM 策略等,有效提升雲端環境的安全性並降低營運成本。此外,Cloud Custodian 提供 dryrun 功能,方便使用者在正式佈署前測試策略,確保策略的正確性和安全性。文章將探討 Cloud Custodian 的安裝、設定、策略定義以及實際應用案例,協助讀者快速上手並應用於實際環境中,強化雲端資源的管理和安全防護。
監控雲端運作與安全策略自動化
雲端監控工具的應用與重要性
在前一章中,我們探討了兩款優秀的監控工具,分別是 Netdata 和 Komiser。Netdata 提供了一個集中監控雲端與本地主機健康狀態的平台,其清晰的儀錶板設計讓使用者能夠一目瞭然地掌握各主機的運作狀況。另一方面,Komiser 則專注於即時檢查 AWS 中正在使用的資源,並提供了一個簡潔的儀錶板系統。這兩款工具雖然功能不同,但都對雲端安全態勢管理和雲端資產健康度監控具有重要作用。
自動化安全策略:Cloud Custodian
本章將介紹由英國一家銀行開源的工具——Cloud Custodian。該工具提供了先進的安全優勢,不僅能夠自動化安全策略的執行,還能夠協助降低成本。Cloud Custodian 是由 Capital One 開發的,並在近年來獲得了廣泛的關注和應用。
Cloud Custodian 的安裝與組態
Cloud Custodian 的安裝可以透過 Docker Go wrapper(名為 custodian-cask)來完成,這使得使用者可以在本地端執行 Cloud Custodian,而無需擔心 Python 相依性的安裝問題。以下是安裝 Cloud Custodian 的步驟:
使用 Docker 直接安裝
首先,您需要建立一個 policy.yml 檔案,接著可以使用以下命令執行容器化的 Cloud Custodian:
$ docker pull cloudcustodian/c7n
$ docker run -it \
-v $(pwd)/output:/home/custodian/output \
-v $(pwd)/policy.yml:/home/custodian/policy.yml \
--env-file <(env | grep "^AWS\|^AZURE\|^GOOGLE") \
cloudcustodian/c7n run -v \
-s /home/custodian/output /home/custodian/policy.yml
使用 Cask 安裝
或者,您也可以選擇使用 Cask 安裝方式,執行以下命令即可下載並安裝 Cloud Custodian:
# 安裝命令(具體命令未提供於原文,需參考官方檔案)
策略定義與執行
Cloud Custodian 的策略是以 YAML 格式編寫的,這是一種在雲原生世界中非常流行的編碼語言。使用者可以根據自己的需求定義策略,並選擇適當的方式來執行這些策略,例如使用排程指令碼(cron jobs)或無伺服器函式(AWS Lambda 等)。
策略測試的重要性
在使用 Cloud Custodian 之前,務必仔細測試所定義的策略,以避免在生產環境中造成不可挽回的錯誤。Cloud Custodian 提供了 dryrun 功能,可以在不實際執行策略的情況下測試其效果。
Cloud Custodian 的優勢
Cloud Custodian 不僅能夠幫助降低雲端資源的使用成本(據稱可以減少約 25% 的 AWS 資源),還能夠提高基礎設施的可見性和安全性。此外,它還提供了有用的快取機制,以減少對 AWS API 端點的請求壓力。
內容解密:
Cloud Custodian 的優勢在於其能夠提供自動化的安全策略執行和成本文約。透過使用 YAML 編寫策略,並支援多種執行方式(如排程指令碼和無伺服器函式),使用者可以靈活地根據自己的需求進行組態。同時,其 dryrun 功能確保了策略執行的安全性和可靠性。
Cloud Custodian:雲端資源管理的守護者
Cloud Custodian 是一款強大的開源工具,用於管理和監控雲端資源。它支援多種雲端服務提供商,包括 AWS、Azure 和 Google Cloud。本章節將介紹如何安裝和使用 Cloud Custodian,以及如何利用它來管理和最佳化雲端資源。
安裝 Cloud Custodian
安裝 Cloud Custodian 有多種方法,包括使用 Cask 安裝程式、Python 安裝和 Docker 安裝。以下是使用 Cask 安裝程式的步驟:
- 在 Linux 系統上執行以下命令:
$ sudo sh -c 'wget -q https://cloudcustodian.io/downloads/custodian-cask/linux-latest/custodian-cask -O /usr/local/bin/custodian-cask && chmod +x /usr/local/bin/custodian-cask'
- 下載完成後,執行以下命令以觸發容器映像下載:
$ custodian-cask --help
內容解密:
- 使用
wget命令下載 Cask 安裝程式。 - 將下載的檔案儲存到
/usr/local/bin/custodian-cask。 - 使用
chmod命令賦予執行許可權。 - 執行
custodian-cask --help命令以驗證安裝。
使用 Python 安裝 Cloud Custodian
另一個安裝 Cloud Custodian 的方法是使用 Python。以下是步驟:
- 在 Debian 系統上執行以下命令以安裝 Python 虛擬環境:
$ apt-get install python3-venv
- 建立一個新的虛擬環境:
$ python3 -m venv custodian
$ source custodian/bin/activate
- 在虛擬環境中安裝 Cloud Custodian:
$ (custodian) $ pip install c7n
內容解密:
- 使用
apt-get命令安裝 Python 虛擬環境。 - 建立一個新的虛擬環境並啟動它。
- 使用
pip命令安裝 Cloud Custodian。
EC2 例項管理
Cloud Custodian 可以用來管理和監控 EC2 例項。以下是如何使用 Cloud Custodian 停止一個正在執行的 EC2 例項:
- 在 EC2 例項上新增一個名為
Custodian的標籤。 - 建立一個名為
custodian.yml的檔案,並新增以下內容:
policies:
- name: stop-ec2-instance
resource: aws.ec2
filters:
- tag:"Custodian": present
內容解密:
- 使用
policies定義一個策略。 - 指定
aws.ec2資源。 - 使用
filters檢查 EC2 例項上的標籤。 - 如果標籤
Custodian存在,則停止 EC2 例項。
Cloud Custodian:雲端資源管理的守護者
Cloud Custodian 是一款強大的開源工具,用於管理和監控雲端資源。它允許使用者定義策略,以自動執行資源的管理和合規性檢查。在本篇文章中,我們將探討 Cloud Custodian 的基本用法和進階功能。
策略定義與執行
Cloud Custodian 的核心是策略定義。使用者可以透過 YAML 檔案定義策略,指定要管理的資源、過濾條件和執行動作。以下是一個簡單的範例:
policies:
- name: stop-ec2-instance
resource: aws.ec2
filters:
- "tag:Custodian": present
actions:
- stop
這個策略會停止所有標記為「Custodian」的 EC2 例項。
內容解密:
policies:定義策略的清單。name:策略的名稱。resource:要管理的資源型別(此例中為 AWS EC2)。filters:過濾條件,用於篩選要管理的資源。actions:執行動作,此例中為停止 EC2 例項。
進階過濾條件
Cloud Custodian 支援複雜的過濾條件,包括正規表示式。以下是一個範例:
filters:
or:
- "tag:CostCenter": absent
- "tag:OwnedBy": absent
- "tag:DeployedEnv": absent
not:
- "State.Name": running
這個過濾條件會篩選出未標記「CostCenter」、「OwnedBy」或「DeployedEnv」,且狀態為執行的 EC2 例項。
內容解密:
or:邏輯或運算,滿足任一條件即可。absent:檢查標籤是否存在。not:邏輯非運算,排除滿足條件的資源。
自動標記資源
Cloud Custodian 可以自動標記資源。以下是一個範例:
actions:
- type: create-ownership-tag
tag: OwnedBy
principal_id_tag: CreatorId
這個動作會自動將建立資源的使用者 ID 標記到資源的「OwnedBy」標籤。
內容解密:
type:動作型別,此例中為建立擁有權標籤。tag:要建立的標籤名稱。principal_id_tag:用於取得建立資源的使用者 ID 的標籤名稱。
執行 Cloud Custodian
執行 Cloud Custodian 需要提供 AWS 憑證。可以使用環境變數或設定檔來提供憑證。以下是一個範例:
$ AWS_ACCESS_KEY_ID="AKXXXXXXXXXXXXXXXX"
$ AWS_SECRET_ACCESS_KEY="koNB7XXXXXXXXXXXXXX"
$ custodian run --output-dir=. custodian.yml
這個指令會執行 Cloud Custodian,並將輸出結果儲存到目前目錄。
IAM 許可權設定
執行 Cloud Custodian 需要適當的 IAM 許可權。以下是一個範例 IAM 策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ec2:*"],
"Resource": ["*"]
}
]
}
這個策略允許 Cloud Custodian 對 EC2 資源執行任何動作。
內容解密:
Version:IAM 策略版本。Statement:策略陳述式清單。Effect:效果,允許或拒絕。Action:允許或拒絕的動作。Resource:適用於該策略的資源。
此圖示說明:
- 定義策略:使用者定義 YAML 策略檔案。
- 執行 Cloud Custodian:執行指令以啟動 Cloud Custodian。
- 篩選資源:根據策略中的過濾條件篩選資源。
- 執行動作:對篩選出的資源執行動作。
- 輸出結果:輸出執行結果到指定目錄。
圖表重點解說:
- 此圖示清晰地呈現了 Cloud Custodian 的工作流程,從策略定義到結果輸出的整個過程。
- 每一步驟都與 Cloud Custodian 的核心功能相符,幫助讀者理解其運作機制。
雲端守護者進階策略
Cloud Custodian 的檔案詳盡且呈現方式良好,提供了多種與 AWS、Azure 和 GCP 雲端平台互動的有用方法。官方檔案中的場景範例大多可以稍加修改就套用到您的需求上,其語法清晰且在串聯多個條件之前,工作流程相當明確。
為避免重複介紹範例,建議您先確定要達成的合規目標,然後參考官方提供的範例,像是檢測帳戶登入來源 IP 地址的條件測試,並透過 Lambda 函式處理(https://cloudcustodian.io/docs/aws/examples/accountinvalidiplogin.html)。
更複雜的策略
官方檔案提供了豐富的範例,從檢查 Auto Scaling Groups (ASGs) 的組態是否合理(https://cloudcustodian.io/docs/aws/examples/asginvalidconfig.html),到驗證 Elastic Load Balancers (ELBs) 使用的 TLS 加密協定和版本(https://cloudcustodian.io/docs/aws/examples/elbsslwhitelist.html)。
VPC 流量日誌
一個值得推薦的策略是啟用 AWS VPC 流量日誌(https://cloudcustodian.io/docs/aws/examples/vpcflowlog.html)。此策略可以找出當前 AWS 區域中未啟用流量日誌的 VPC,並傳送電子郵件提醒團隊進行修復。VPC 流量日誌能夠捕捉到 VPC 內網路介面的所有流量(或僅接受/拒絕的流量),對於進行網路鑑識和故障排除至關重要。如果不儲存 VPC 流量日誌至 S3 或 CloudWatch,則無法對 VPC 資源有足夠的可視性。
跨雲平台支援
除了 AWS,Cloud Custodian 也為 Azure 和 GCP 提供了豐富的範例(分別位於 https://cloudcustodian.io/docs/azure/gettingstarted.html 和 https://cloudcustodian.io/docs/gcp/gettingstarted.html),以便更順暢地採用。
IAM 策略範例
在探討之前,讓我們先看看一個 IAM 策略範例,以瞭解 Cloud Custodian 如何與其他 AWS 資源互動。以下範例(Listing 14.3)展示瞭如何分離附加到 IAM 角色的特定 IAM 策略。
policies:
- name: delete-an-insecure-iam-policy
resource: iam-role
filters:
- type: has-specific-managed-policy
value: specific-insecure-policy
actions:
- type: set-policy
state: detached
arn: arn:aws:iam::123456789012:policy/specific-insecure-policy
程式碼解析
此 YAML 程式碼定義了一個 Cloud Custodian 策略,用於分離附加到 IAM 角色的特定不安全 IAM 策略。
policies: 定義策略列表。name: 策略名稱為delete-an-insecure-iam-policy。resource: 指定資源型別為iam-role,表示此策略針對 IAM 角色。filters: 設定篩選條件,此處使用has-specific-managed-policy型別來檢查是否附加了名為specific-insecure-policy的託管策略。actions: 定義執行動作,此處使用set-policy型別來分離指定的 IAM 策略,state: detached表示要分離該策略,而arn指定了要操作的 IAM 策略 ARN。
策略應用場景
此類別策略可用於:
- 當某個舊有策略正在被重構或即將從多個雲端帳戶中刪除時,防止它被繼續使用,可能是出於安全原因。
- 當某個服務即將被棄用時,自動清理並移除透過 IAM 對該服務的所有存取許可權。
小技巧
除了 name 欄位外,您可以簡單地反轉 actions 的過程。例如,若要強制此策略附加到所有 IAM 角色,只需將 state 的值從 detached 改為 attached。但請務必小心測試,以避免鎖定自己或其他使用者對 AWS 帳戶的存取權。
S3 資料靜態儲存
接下來,我們將快速瀏覽一個關於儲存策略的範例。AWS 的儲存服務中,S3 是備受信賴的選擇,提供高用性的物件儲存服務。AWS 在其官方網站上宣稱(https://www.amazonaws.cn/en/s3/faqs):「Amazon S3 的設計目標是在給定的年份內提供 99.999999999% 的物件耐久性。」
S3 安全最佳實踐
為了確保 S3 資料的安全,應考慮以下最佳實踐:
- 啟用版本控制:保留多個版本的物件,以防止意外刪除或覆寫。
- 使用伺服器端加密:自動加密儲存在 S3 中的資料,以保護靜態資料的安全。
- 設定存取控制:透過 IAM 策略和 S3 存取控制列表 (ACL) 來控制誰可以存取您的 S3 資源。
- 監控和稽核:使用 AWS CloudTrail 和 S3 存取日誌來監控和稽核對 S3 資源的存取。
Cloud Custodian 與 S3
Cloud Custodian 可以幫助您自動執行 S3 安全最佳實踐,例如檢查未加密的 S3 儲存桶並自動啟用加密,或是檢查公開可存取的 S3 儲存桶並調整其存取許可權。
policies:
- name: ensure-s3-bucket-encryption
resource: aws.s3
filters:
- type: check-server-side-encryption
enabled: true
actions:
- type: encrypt-bucket
crypto: AES256
程式碼解析
此範例定義了一個 Cloud Custodian 策略,用於檢查 S3 儲存桶是否啟用了伺服器端加密,如果沒有,則自動啟用。
resource: 指定資源型別為aws.s3,表示此策略針對 S3 儲存桶。filters: 使用check-server-side-encryption篩選條件檢查 S3 儲存桶是否啟用了伺服器端加密。actions: 使用encrypt-bucket動作自動啟用伺服器端加密,crypto: AES256指定了使用的加密演算法。
透過使用 Cloud Custodian,您可以有效地管理和維護您的雲端資源安全合規狀態,確保您的 AWS 環境始終符合最佳實踐和規範要求。