返回文章列表

AWS CloudTrail 日誌記錄最佳實務

本文介紹如何在 AWS 帳戶中啟用和管理 CloudTrail 日誌記錄,涵蓋 S3 儲存桶政策設定、使用 sed 命令替換範本值、啟用多區域日誌記錄以及驗證和清理步驟。同時也探討了 CloudTrail 在安全監控和應用程式除錯中的重要性,並提供了一些進階設定的挑戰,例如設定 AWS Organizations 和

雲端服務 資安

CloudTrail 作為 AWS 的核心服務,能完整記錄所有 API 呼叫,是安全稽核和事件追蹤的根本。本文詳細說明如何設定 S3 儲存桶策略,允許 CloudTrail 將日誌安全地寫入指定的儲存桶,並示範如何使用 sed 命令有效地管理設定檔。同時,也涵蓋了多區域日誌記錄的啟用方式,確保所有 AWS 區域的活動都被記錄。最後,文章提供了驗證 CloudTrail 設定的步驟和清理資源的最佳實務,並延伸討論了在 AWS Organizations 和 Single Sign-On 環境下的進階設定,例如設定根使用者登入通知和 MFA,以提升整體安全性。

在 AWS 帳戶中啟用 CloudTrail 日誌記錄

CloudTrail 是 AWS 提供的一種服務,用於記錄和監控 AWS 帳戶中的所有事件。這些事件包括對 AWS API 的所有呼叫,無論是透過控制檯、命令列還是應用程式進行的。

啟用 CloudTrail 的步驟

  1. 建立 S3 儲存桶:用於存放 CloudTrail 日誌。
  2. 更新 S3 儲存桶政策:確保 CloudTrail 可以將日誌寫入 S3 儲存桶。
  3. 啟用 CloudTrail:為所有 AWS 區域啟用 CloudTrail,並組態 S3 儲存桶以接收日誌。
  4. 啟動日誌記錄:開始記錄 CloudTrail 軌跡。

1. 更新 S3 儲存桶政策

首先,需要更新 S3 儲存桶的政策,以允許 CloudTrail 將日誌寫入儲存桶。以下是一個範例政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3CloudTrail",
            "Effect": "Allow",
            "Principal": {"Service": "cloudtrail.amazonaws.com"},
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::BUCKET_NAME"
        },
        {
            "Sid": "S3CloudTrail",
            "Effect": "Allow",
            "Principal": {"Service": "cloudtrail.amazonaws.com"},
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::BUCKET_NAME/AWSLogs/AWS_ACCOUNT_ID/*",
            "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}}
        }
    ]
}

內容解密:

  • "Version": "2012-10-17" 指定了政策的版本。
  • 第一個宣告允許 CloudTrail 檢索 S3 儲存桶的 ACL。
  • 第二個宣告允許 CloudTrail 將日誌寫入指定的 S3 儲存桶路徑。
  • "Condition" 確保物件被寫入時具有適當的 ACL。

2. 使用 sed 命令替換範本中的值

使用以下命令快速替換 cloudtrail-s3policy-template.json 檔案中的值:

sed -e "s/BUCKET_NAME/awscookbook903-$RANDOM_STRING/g" \
-e "s|AWS_ACCOUNT_ID|${AWS_ACCOUNT_ID}|g" \
cloudtrail-s3policy-template.json > cloudtrail-s3policy.json

內容解密:

  • sed 命令用於流編輯文字。
  • -e 選項允許執行多個命令。
  • 這裡替換了 BUCKET_NAMEAWS_ACCOUNT_ID 為實際的值。

3. 將 S3 儲存桶政策新增到 S3 儲存桶

aws s3api put-bucket-policy \
--bucket awscookbook903-$RANDOM_STRING \
--policy file://cloudtrail-s3policy.json

內容解密:

  • 此命令使用 AWS CLI 將更新後的政策應用到指定的 S3 儲存桶。

4. 為所有 AWS 區域啟用 CloudTrail

aws cloudtrail create-trail --name AWSCookbook903Trail \
--s3-bucket-name awscookbook903-$RANDOM_STRING \
--is-multi-region-trail

內容解密:

  • 此命令建立了一個名為 AWSCookbook903Trail 的 CloudTrail 軌跡。
  • --is-multi-region-trail 引數確保 CloudTrail 在所有 AWS 區域中記錄事件。

5. 啟動 CloudTrail 日誌記錄

aws cloudtrail start-logging --name AWSCookbook903Trail

內容解密:

  • 此命令啟動了 AWSCookbook903Trail 軌跡的日誌記錄。

驗證檢查

  1. 描述軌跡

    aws cloudtrail describe-trails --trail-name-list AWSCookbook903Trail
    

    內容解密:

    • 此命令顯示了指定軌跡的詳細資訊。
  2. 取得軌跡狀態

    aws cloudtrail get-trail-status --name AWSCookbook903Trail
    

    內容解密:

    • 此命令顯示了軌跡的當前狀態,包括是否正在記錄日誌。

清理

請按照本章節程式碼倉函式庫中的配方資料夾中的步驟進行清理。

討論

CloudTrail 不僅對於安全監控至關重要,也對於應用程式除錯非常有用。例如,它可以幫助您除錯根據事件驅動的應用程式,特別是在與 Lambda 函式和 S3 事件相關的場景中。

挑戰

如果您有一個包含多個帳戶的 AWS 組織,請組態一個組織軌跡。請參閱配方 9.6 以設定 AWS 組織。

9.4 設定根使用者登入通知機制

問題

您需要設定一個機制,以便在根使用者登入您的AWS帳戶時接收通知。

解決方案

  1. 建立一個CloudTrail來記錄根使用者的登入活動。
  2. 建立一個SNS主題來接收通知。
  3. 建立一個EventBridge規則來監控CloudTrail中的根使用者登入事件,並將通知傳送到SNS主題。

步驟

  1. 使用以下命令建立一個CloudTrail:
aws cloudtrail create-trail --name AWSCookbook904Trail --is-multi-region-trail
  1. 使用以下命令建立一個SNS主題:
aws sns create-topic --name AWSCookbook904Topic
  1. 使用以下命令建立一個IAM角色供EventBridge使用:
aws iam create-role --role-name AWSCookbook904RuleRole --assume-role-policy-document file://trust-policy.json
  1. 將必要的許可權政策附加到IAM角色:
aws iam put-role-policy --role-name AWSCookbook904RuleRole --policy-name AWSCookbook904RulePolicy --policy-document file://role-policy.json
  1. 建立一個EventBridge規則來監控CloudTrail中的根使用者登入事件:
aws events put-rule --name "AWSCookbook904Rule" --role-arn "arn:aws:iam::$AWS_ACCOUNT_ID:role/AWSCookbook904RuleRole" --event-pattern file://event-pattern.json
  1. 將SNS主題設定為EventBridge規則的目標:
aws events put-targets --rule AWSCookbook904Rule --targets "Id"="1","Arn"="$TOPIC_ARN"

程式碼解密:

上述命令用於建立CloudTrail、SNS主題、IAM角色和EventBridge規則。其中,EventBridge規則的event-pattern.json檔案定義了要監控的事件模式,例如根使用者的登入活動。

驗證檢查

使用根帳戶登入您的AWS帳戶,等待幾分鐘,然後檢查您的電子郵件是否收到來自SNS的通知訊息。

清理

請按照本章程式碼儲存函式庫中本配方資料夾中的步驟進行清理。

9.5 為根使用者設定多因素驗證

問題

您需要為根使用者啟用多因素驗證。

解決方案

使用根使用者憑證登入您的AWS帳戶,並在IAM控制檯中啟用多因素驗證。

步驟

  1. 使用與根使用者相關聯的電子郵件地址登入AWS控制檯。
  2. 在IAM控制檯中選擇「我的安全憑證」。
  3. 展開「多因素驗證」窗格並點選「啟用MFA」按鈕。
  4. 依照提示完成MFA設定。

程式碼解密:

此步驟不需要程式碼,但需要遵循AWS控制檯中的指示來啟用MFA。

驗證檢查

登出您的AWS帳戶,然後使用根使用者重新登入,並輸入虛擬裝置產生的程式碼以完成登入程式。

清理

您應該始終為根使用者保持MFA啟用狀態。

9.6 設定AWS Organizations和AWS Single Sign-On

問題

您需要一種可擴充套件的方式來集中管理用於存取AWS帳戶的使用者名稱和密碼。

解決方案

啟用AWS Organizations,設定AWS Single Sign-On,建立群組,建立許可權集,並在AWS SSO目錄中建立使用者。

步驟

  1. 在AWS控制檯中導航到AWS Organizations並點選「建立組織」。

程式碼解密:

此步驟不需要程式碼,但需要遵循AWS控制檯中的指示來建立組織和設定AWS Single Sign-On。

圖表說明

此圖示展示了AWS SSO中許可權和使用者的檢視。

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title AWS CloudTrail 日誌記錄最佳實務

package "安全架構" {
    package "網路安全" {
        component [防火牆] as firewall
        component [WAF] as waf
        component [DDoS 防護] as ddos
    }

    package "身份認證" {
        component [OAuth 2.0] as oauth
        component [JWT Token] as jwt
        component [MFA] as mfa
    }

    package "資料安全" {
        component [加密傳輸 TLS] as tls
        component [資料加密] as encrypt
        component [金鑰管理] as kms
    }

    package "監控審計" {
        component [日誌收集] as log
        component [威脅偵測] as threat
        component [合規審計] as audit
    }
}

firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成

@enduml

此圖表展示了AWS Organizations和AWS Single Sign-On之間的關係,以及如何在AWS SSO中建立群組、許可權集和使用者。

設定 AWS Organizations 和 AWS Single Sign-On

AWS Organizations 和 AWS Single Sign-On(SSO)是兩個強大的工具,可以幫助您管理和治理您的 AWS 環境。在本篇文章中,我們將介紹如何設定 AWS Organizations 和 AWS SSO,以及如何使用它們來簡化您的 AWS 管理。

建立 AWS Organizations

  1. 登入您的 AWS 帳戶並導航到 AWS Organizations 主控台。
  2. 點選「建立組織」按鈕,並按照提示完成組織的建立。
  3. 建立組織後,您將收到一封電子郵件,要求您驗證您的電子郵件地址。點選「驗證您的電子郵件地址」按鈕以完成驗證。

設定 AWS Single Sign-On

  1. 導航到 AWS SSO 主控台並點選「啟用 SSO」按鈕。
  2. 在「群組」部分,點選「建立群組」並輸入所需的群組名稱。
  3. 在「使用者」部分,點選「新增使用者」並輸入所需的使用者資訊。將使用者新增到您在步驟 2 中建立的群組中。
  4. 在「AWS 帳戶」部分,選擇「許可權集」標籤並點選「建立許可權集」。選擇「使用現有的作業功能政策」選項並選擇 PowerUserAccess。

程式碼示例:使用 AWS CLI 建立 AWS SSO 許可權集

aws sso-admin create-permission-set --instance-arn <instance-arn> --name PowerUserAccess --description "PowerUserAccess permission set"

內容解密:

此程式碼使用 AWS CLI 建立一個名為 PowerUserAccess 的許可權集。--instance-arn 引數指定了 AWS SSO 例項的 ARN,--name 引數指定了許可權集的名稱,--description 引數指定了許可權集的描述。

將許可權集指派給群組

  1. 在「AWS 帳戶」部分,選擇您的 AWS 帳戶並點選「指派使用者」。
  2. 選擇您在步驟 2 中建立的群組,並點選「下一步:許可權集」。
  3. 選擇您在步驟 4 中建立的許可權集,並點選「完成」。

驗證設定

  1. 導航到 AWS SSO 主控台儀錶板頁面提供的 URL,並使用您在步驟 3 中建立的使用者名稱和密碼登入。
  2. 選擇「管理主控台」或「命令列或程式設計存取」以獲得對您的 AWS 帳戶的 PowerUserAccess 存取許可權。

清理

  1. 導航到 AWS SSO 主控台並選擇「設定」。
  2. 向下捲動到設定頁面的底部,並選擇「刪除 AWS SSO 設定」。
  3. 導航到 AWS Organizations 主控台並選擇您的組織。
  4. 開啟組織的設定並選擇「刪除組織」。

AWS環境的安全管理與高效操作

使用AWS Control Tower建立安全登入區

在AWS上擴充套件使用規模時,建立一個安全、可管理的環境至關重要。AWS Control Tower提供了一種簡便的方法來組態完全託管的登入區(Landing Zone),無需自行搭建。這不僅簡化了多賬戶環境的管理,還增強了安全性與合規性。

利用AWS Single Sign-On(SSO)實作集中式身份管理

AWS SSO提供了一種安全、可擴充套件的方式來管理使用者對AWS賬戶的存取。可以選擇與外部身份提供者(IdP)整合,或使用AWS SSO內建的目錄服務。這取決於需要管理的使用者數量以及是否已經擁有外部使用者目錄。

成功驗證後,使用者可以根據許可權集(Permission Sets)選擇存取級別。許可權集使用IAM策略定義,SSO利用這些定義來管理角色,使用者登入成功後即可承擔相應角色。AWS提供了與常見工作職能相符的許可權集,同時也支援建立自定義許可權集,以滿足特定的需求。

程式碼範例:設定AWS賬戶ID為bash變數

export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

內容解密:

此命令使用aws sts get-caller-identity查詢當前呼叫者的賬戶ID,並將結果輸出為文字格式,然後將其指定給AWS_ACCOUNT_ID環境變數。這樣可以在後續的命令中直接使用該變數,簡化操作流程。

強化AWS環境的安全性

隨著使用者數量和賬戶數量的增加,以及授權層級的擴充套件,確保AWS環境的安全成為一項挑戰。AWS SSO提供了一種機制,可以在AWS環境中實施大規模的安全措施。由於透過AWS SSO啟動的會話是臨時的,因此無需建立長期有效的IAM存取金鑰,從而減少了金鑰輪換和管理的負擔。此外,還可以將多因素認證(MFA)與AWS SSO結合使用,要求使用者在登入時進行MFA驗證。

實用程式碼片段(Fast Fixes)

本文匯集了一些實用的小程式碼片段,可以幫助您節省時間並充分利用AWS的功能。

取得最近建立的CloudWatch日誌組名稱

aws logs describe-log-groups --output=yaml --query 'reverse(sort_by(logGroups,&creationTime))[:1].{Name:logGroupName}'

內容解密:

此命令查詢CloudWatch日誌組,按建立時間排序並反轉順序,以取得最近建立的日誌組名稱。--query引數用於過濾和格式化輸出結果。

挑戰與實踐

  1. 將AWS SSO與外部身份提供者整合:嘗試將AWS SSO與現有的身份提供者(如Active Directory或Okta)整合,以實作統一身份管理。

  2. 應用服務控制策略(SCP)限制可用區域:透過SCP限制組織內AWS賬戶可使用的區域,以增強安全性和合規性。

AWS 雲端技術深度解析與實務應用

AWS 賬戶管理與安全強化

AWS 賬戶管理是雲端基礎架構的核心環節,涉及多項安全與資源管理措施。為了確保賬戶安全,需要實施多因素身份驗證(MFA)、設定電子郵件警示以及使用 AWS Organizations 和 Single Sign-On 進行集中管理。

啟用 CloudTrail 日誌記錄

啟用 CloudTrail 是監控 AWS 賬戶活動的關鍵步驟,能夠記錄所有 API 呼叫和資源變更。透過 CloudTrail,可以實作對賬戶活動的全面稽核和監控。

步驟解析
  1. 進入 AWS 管理控制檯,導航至 CloudTrail 服務。
  2. 建立新的追蹤,選擇要監控的事件型別(管理事件或資料事件)。
  3. 組態日誌儲存,將日誌儲存在指定的 S3 儲存桶中。
  4. 啟用日誌記錄,確保所有相關事件都被記錄。

使用 EC2 Global View 進行資源分析

EC2 Global View 提供了一個集中式的檢視,用於檢視和管理跨多個區域的 EC2 資源。這有助於簡化資源管理和監控。

實務建議
  • 定期審查資源使用情況,最佳化成本和效能。
  • 使用標籤管理資源,提高資源組織和搜尋效率。

AI/ML 服務與應用

AWS 提供了一系列人工智慧(AI)和機器學習(ML)服務,用於處理和分析各種資料型別,包括文字、影像和音訊。

使用 Amazon Comprehend 進行文字分析

Amazon Comprehend 是一項自然語言處理(NLP)服務,能夠從文字中提取洞察,包括情感分析、實體識別等。

程式碼範例
import boto3

comprehend = boto3.client('comprehend')

text = "您的文字內容"
response = comprehend.detect_sentiment(Text=text, LanguageCode='zh')

print(response['Sentiment'])

內容解密

  1. 匯入 boto3 函式庫,用於與 AWS 服務互動。
  2. 建立 Comprehend 客戶端,初始化服務連線。
  3. 呼叫情感分析介面,傳入待分析的文字和語言程式碼。
  4. 列印分析結果,輸出情感傾向(正面、負面或中立)。

網路與安全組態

在 AWS 中,網路和安全組態是確保應用和資料安全的基礎。涉及 VPC 組態、安全組設定以及使用 AWS WAF 等。

組態 VPC 與子網

VPC 是 AWS 中的虛擬網路環境,用於隔離和保護資源。正確組態 VPC 和子網對於網路安全至關重要。

最佳實踐
  • 規劃合理的 CIDR 區塊,避免 IP 地址衝突。
  • 使用多個子網,提高應用可用性和容錯能力。

大資料處理與分析

AWS 提供了一系列大資料服務,包括 Amazon S3、Glue 和 Athena,用於儲存、處理和分析大規模資料集。

使用 Amazon Athena 查詢 S3 資料

Amazon Athena 是一種無伺服器的查詢服務,能夠直接在 S3 上執行 SQL 查詢。

SQL 範例
SELECT * FROM "s3_data"."my_table" 
WHERE dt = '2023-01-01';

內容解密

  1. 指定資料來源,選擇 S3 中的資料集。
  2. 編寫 SQL 查詢,篩選特定日期的資料。
  3. 執行查詢,取得結果。