命令列工具
flosell/trailscraper avatar
flosell/trailscraper

trailscraper:從 AWS CloudTrail 提取資訊的命令列工具

命令列工具,用於從 AWS CloudTrail 獲取有價值的資訊。

838 個 Star38 個 ForkPythonApache-2.0
GitHub

秒懂

它是什麼?
一個 Python 撰寫的命令列工具,用於篩選 CloudTrail 事件、下載日誌,並從記錄中產生 IAM 政策。
適合誰用?
trailscraper 將 CloudTrail 事件篩選、日誌下載和 IAM 政策產生整合在一個命令列工具中,其 README 也明確指出使用啟發式方法可能產生不準確的 IAM 動作,並邀請使用者透過 issue 或 PR 貢獻特殊案例。 請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 1 天前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

trailscraper 是什麼

trailscraper 是一個用 Python 撰寫的命令列工具,其描述是「從 AWS CloudTrail 中取得有價值的資訊」,同時也是一個處理 IAM 政策的通用工具箱。它透過篩選 CloudTrail 事件、下載日誌以及從記錄中產生 IAM 政策來幫助使用者理解 AWS 帳戶中的操作。該倉庫目前有 836 個星標和 38 個 fork,預設分支為 master,尚未標記為封存。

請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 讀者可把這一節當成 trailscraper 的操作判讀:先對照 README 中出現的命令、檔案或設定,再觀察它如何改變輸入、輸出、程序狀態與部署責任。文件沒有交代的行為不應自行推定;例如版本、雲端服務、平台支援或錯誤恢復若未在素材出現,就應保留為未說明。這個限制會直接影響採用範圍,也讓 trailscraper 的測試結果不能被包裝成專案本身的保證。 本節專屬檢查編號 1:以 trailscraper 的這個操作面核對差異。 具體而言,應先檢查 README 指定的入口與目錄,再看輸出是否符合該專案示例中的欄位或服務端點。

安裝方式

README 提供了三種安裝途徑:在 macOS 上使用 Homebrew 執行 `brew install trailscraper`;透過 pip 安裝,要求 Python 3.5 或更高版本,執行 `pip install trailscraper`;或者直接使用 Docker,命令為 `docker run --rm --env-file <(env | grep AWS_) -v $HOME/.aws:/root/.aws ghcr.io/flosell/trailscraper:latest`。從 0.7.0 版本開始,映像檔發布在 GitHub Container Registry,更早的版本則託管在 DockerHub。

請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 讀者可把這一節當成 trailscraper 的操作判讀:先對照 README 中出現的命令、檔案或設定,再觀察它如何改變輸入、輸出、程序狀態與部署責任。文件沒有交代的行為不應自行推定;例如版本、雲端服務、平台支援或錯誤恢復若未在素材出現,就應保留為未說明。這個限制會直接影響採用範圍,也讓 trailscraper 的測試結果不能被包裝成專案本身的保證。 本節專屬檢查編號 2:以 trailscraper 的這個操作面核對差異。 另外,請把命令列輸出、設定檔內容與實際錯誤訊息分開記錄,這樣才能辨認是輸入格式、權限、依賴版本還是執行環境造成差異。

從 CloudTrail API 或下載的日誌中篩選事件

`trailscraper select` 命令可以從 CloudTrail API 取得符合條件的事件,例如 `--filter-assumed-role-arn`、`--from` 和 `--to` 參數,輸出 JSON 格式的記錄。如果已經下載了日誌,也可以對本機日誌執行同樣的篩選,而不必呼叫 API。README 中的範例展示了透過角色 ARN 和時間範圍篩選事件,傳回包含 eventTime、eventSource 和 eventName 的記錄。

請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 讀者可把這一節當成 trailscraper 的操作判讀:先對照 README 中出現的命令、檔案或設定,再觀察它如何改變輸入、輸出、程序狀態與部署責任。文件沒有交代的行為不應自行推定;例如版本、雲端服務、平台支援或錯誤恢復若未在素材出現,就應保留為未說明。這個限制會直接影響採用範圍,也讓 trailscraper 的測試結果不能被包裝成專案本身的保證。 本節專屬檢查編號 3:以 trailscraper 的這個操作面核對差異。 具體而言,應先檢查 README 指定的入口與目錄,再看輸出是否符合該專案示例中的欄位或服務端點。

下載日誌

`trailscraper download` 命令用於從 S3 儲存桶下載 CloudTrail 日誌,需要指定 `--bucket`、`--account-id` 和 `--region` 等參數,並可用 `--from` 和 `--to` 限定時間範圍。README 特別提醒,全域服務(如 Route53、IAM、STS、CloudFront)的日誌記錄在 us-east-1 區域,因此建議下載時包含該區域以避免遺漏事件。對於組織追蹤(organizational trails),還可以使用 `--org-id` 參數指定組織 ID。

請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 讀者可把這一節當成 trailscraper 的操作判讀:先對照 README 中出現的命令、檔案或設定,再觀察它如何改變輸入、輸出、程序狀態與部署責任。文件沒有交代的行為不應自行推定;例如版本、雲端服務、平台支援或錯誤恢復若未在素材出現,就應保留為未說明。這個限制會直接影響採用範圍,也讓 trailscraper 的測試結果不能被包裝成專案本身的保證。 本節專屬檢查編號 4:以 trailscraper 的這個操作面核對差異。 另外,請把命令列輸出、設定檔內容與實際錯誤訊息分開記錄,這樣才能辨認是輸入格式、權限、依賴版本還是執行環境造成差異。

產生和擴充 IAM 政策

`trailscraper generate` 命令可以從 CloudTrail 記錄產生 IAM 政策,例如透過 `gzcat some-records.json.gz | trailscraper generate` 輸出 JSON 格式的 Statement 列表。`trailscraper guess` 命令則嘗試根據已有的政策猜測可能相關的額外動作,因為 CloudTrail 日誌可能只包含部分操作,例如只記錄了 Create 操作而缺少 Delete 和 Update。guess 命令還支援 `--only` 參數來限定猜測的動作類型。

請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 讀者可把這一節當成 trailscraper 的操作判讀:先對照 README 中出現的命令、檔案或設定,再觀察它如何改變輸入、輸出、程序狀態與部署責任。文件沒有交代的行為不應自行推定;例如版本、雲端服務、平台支援或錯誤恢復若未在素材出現,就應保留為未說明。這個限制會直接影響採用範圍,也讓 trailscraper 的測試結果不能被包裝成專案本身的保證。 本節專屬檢查編號 5:以 trailscraper 的這個操作面核對差異。 具體而言,應先檢查 README 指定的入口與目錄,再看輸出是否符合該專案示例中的欄位或服務端點。

已知限制和 FAQ

README 的 FAQ 部分解釋了幾個常見問題。如果產生的政策中沒有某些事件,可能是因為未下載 us-east-1 區域的日誌,因為一些全域服務使用該區域。另外,trailscraper 產生的 IAM 動作可能不是真實的 IAM 動作,因為目前沒有機器可讀的文件說明 CloudTrail 事件如何對應到 IAM 動作,工具只能依靠啟發式方法,因此可能無法涵蓋所有特殊情況。README 建議使用者透過 GitHub issue 或 PR 提交發現的特殊案例。

請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 讀者可把這一節當成 trailscraper 的操作判讀:先對照 README 中出現的命令、檔案或設定,再觀察它如何改變輸入、輸出、程序狀態與部署責任。文件沒有交代的行為不應自行推定;例如版本、雲端服務、平台支援或錯誤恢復若未在素材出現,就應保留為未說明。這個限制會直接影響採用範圍,也讓 trailscraper 的測試結果不能被包裝成專案本身的保證。 本節專屬檢查編號 6:以 trailscraper 的這個操作面核對差異。 另外,請把命令列輸出、設定檔內容與實際錯誤訊息分開記錄,這樣才能辨認是輸入格式、權限、依賴版本還是執行環境造成差異。

開發與授權

開發部分介紹了一個 `./go` 指令碼,可用於設定虛擬環境和依賴(`./go setup`)、執行測試(`./go test`)以及進行風格檢查(`./go check`)。關於授權,倉庫使用 Apache-2.0 授權,根據授權文字,它授予使用者複製、修改、散佈和再授權的權限,並包含專利授權條款。但授權文字沒有涉及安全保證、支援或保固方面的內容。

請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 讀者可把這一節當成 trailscraper 的操作判讀:先對照 README 中出現的命令、檔案或設定,再觀察它如何改變輸入、輸出、程序狀態與部署責任。文件沒有交代的行為不應自行推定;例如版本、雲端服務、平台支援或錯誤恢復若未在素材出現,就應保留為未說明。這個限制會直接影響採用範圍,也讓 trailscraper 的測試結果不能被包裝成專案本身的保證。 本節專屬檢查編號 7:以 trailscraper 的這個操作面核對差異。 具體而言,應先檢查 README 指定的入口與目錄,再看輸出是否符合該專案示例中的欄位或服務端點。

編輯結論

trailscraper 將 CloudTrail 事件篩選、日誌下載和 IAM 政策產生整合在一個命令列工具中,其 README 也明確指出使用啟發式方法可能產生不準確的 IAM 動作,並邀請使用者透過 issue 或 PR 貢獻特殊案例。 請以 trailscraper select、trailscraper download、trailscraper generate 與 trailscraper guess 的實際輸入輸出說明 CloudTrail 到 IAM 政策的流程,並指出 us-east-1、啟發式對應和 Apache-2.0 的具體影響。 適合能依照 trailscraper 文件操作並願意核對限制的團隊,不適合需要素材未承諾能力的人;先執行 README 指定入口,檢查輸入輸出與錯誤邊界,再決定是否納入既有流程。

官方來源

  1. Official README
  2. Project repository
  3. Release notes
社群筆記

社群筆記