使用 Step Functions 數使用 IAM 存取分析器動態產生 IAM 政策 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Step Functions 數使用 IAM 存取分析器動態產生 IAM 政策

創建者:托馬斯·斯科特 (AWS)、阿迪爾·卡納比 (AWS)、公園·凡·布利德芬 (AWS) 和拉法爾·波拉塞克 (AWS)

程式碼儲存庫:自動 IAM 存取分析器角色政策產生

環境:PoC 或試點

技術:安全性、身分識別、合規性;無伺服器

AWS 服務:AWS IAM 存取分析器;AWS Lambda;AWS Step Functions;AWS Identity and Access Management

Summary

低權限是授與執行工作所需的最低權限的安全性最佳作法。在已經使用中的 Amazon Web Services (AWS) 帳戶中實作最低權限存取可能具有挑戰性,因為您不想透過變更其許可,無意中阻止使用者執行其任務。您必須先了解帳戶使用者正在執行的動作和資源,才能實作 AWS Identity and Access Management (IAM) 政策變更。

此模式旨在協助您套用最低權限存取原則,而不會阻塞或降低團隊生產力。本文說明如何使用 IAM 存取分析器和 AWS Step Functions 根據帳戶中目前執行的動作,為您的角色動態產生 up-to-date IAM 政策。新政策旨在允許目前的活動,但會移除任何不必要的提升權限。您可以透過定義允許和拒絕規則來自訂產生的原則,而解決方案會整合您的自訂規則。

此模式包括使用 AWS Cloud Development Kit (AWS CDK) 或 HashiCorp 地形用 CDK (CDKTF) 實作解決方案的選項。然後,您可以使用持續整合和持續傳遞 (CI/CD) 管線,將新原則與角色相關聯。如果您有多帳戶架構,則可以在任何想要為角色產生更新 IAM 政策的帳戶中部署此解決方案,從而提高整個 AWS 雲端環境的安全性。

先決條件和限制

先決條件

限制

  • 此模式不會將新的 IAM 政策套用至角色。在此解決方案結束時,新的 IAM 政策會儲存在儲存 CodeCommit 庫中。您可以使用 CI/CD 管線將原則套用至帳戶中的角色。

架構

目標架構

「Step Functions」工作流程會產生新原則並將其儲存在中 CodeCommit。
  1. 定期排程的 Amazon EventBridge 事件規則會啟動 Step Functions 工作流程。您可以將此再生排程定義為設定此解決方案的一部分。

  2. 在 Step Functions 數工作流程中,Lambda 函數會產生日期範圍,以便在分析 CloudTrail 記錄中的帳戶活動時使用。

  3. 下一個工作流程步驟會呼叫 IAM 存取分析器 API 以開始產生政策。

  4. IAM 存取分析器使用您在設定期間指定的角色的 Amazon 資源名稱 (ARN),分析指定日期費率內的活動 CloudTrail 記錄。IAM 存取分析器會根據活動產生 IAM 政策,該政策僅允許角色在指定日期範圍內使用的動作和服務。完成此步驟後,此步驟會產生作業 ID。

  5. 下一個工作流程步驟會每隔 30 秒檢查一次工作 ID。偵測到工作 ID 時,此步驟會使用工作 ID 呼叫 IAM 存取分析器 API 並擷取新的 IAM 政策。IAM 存取分析器會以 JSON 檔案的形式傳回政策。

  6. 下一<IAM role name>個工作流程步驟會將 /policy.json 檔案放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中。您可以將此 S3 儲存貯體定義為設定此解決方案的一部分。

  7. Amazon S3 事件通知會啟動 Lambda 函數。

  8. Lambda 函數會從 S3 儲存貯體擷取政策、整合您在允許 .json 和拒絕 .json 檔案中定義的自訂規則,然後將更新的政策推送至。 CodeCommit您可以將 CodeCommit 存放庫、分支和資料夾路徑定義為設定此解決方案的一部分。

工具

AWS 服務

  • AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。

  • AWS CDK 工具組是命令列 Cloud Development Kit,可協助您與 AWS 雲端開發套件 (AWS CDK) 應用程式互動。

  • AWS 可 CloudTrail協助您稽核 AWS 帳戶的管理、合規和營運風險。

  • AWS CodeCommit 是一種版本控制服務,可協助您以私密方式存放和管理 Git 儲存庫,而無需管理自己的原始檔控制系統。

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。

  • AWS Identity and Access Management (IAM) 可透過控制誰經過身份驗證和授權使用 AWS 資源,協助您安全地管理對 AWS 資源的存取。此模式使用 IAM Access Analyzer (IAM 的一項功能) 來分析您的 CloudTrail 日誌,以識別 IAM 實體 (使用者或角色) 已使用的動作和服務,然後根據該活動產生 IAM 政策。

  • AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

  • AWS Step Functions 是一種無伺服器協調服務,可協助您結合 AWS Lambda 函數和其他 AWS 服務來建立關鍵業務應用程式。在此模式中,您可以使用 Step Functions 中的 AWS SDK 服務整合,從工作流程呼叫服務 API 動作。

其他工具

  • CDK 對於地形表單(CDKTF)可幫助您通過使用常見的編程語言(如 Python 和打字稿)將基礎設施定義為代碼(IaC)。

  • Lerna 是一個構建系統,用於管理和從同一個存儲庫發布多個 JavaScript 或 TypeScript 包。

  • Node.js 是一個事件驅動的 JavaScript 運行時環境,旨在構建可擴展的網絡應用程序。

  • npm 是一個在 Node.js 環境中運行的軟件註冊表,用於共享或借用軟件包以及管理私有軟件包的部署。

代碼存儲庫

GitHub 自動化 IAM 存取分析器角色政策產生器存放庫中提供此模式的程式碼。

史诗

任務描述所需技能

克隆回購。

下列命令會複製自動 IAM 存取分析角色政策產生器 (GitHub) 存放庫。

git clone https://github.com/aws-samples/automated-iam-access-analyzer.git
應用程式開發人員

安裝萊納。

下面的命令安裝萊納。

npm i -g lerna
應用程式開發人員

設置依賴關係。

以下命令安裝存儲庫的依賴關係。

cd automated-iam-access-advisor/ npm install && npm run bootstrap
應用程式開發人員

建置程式碼。

下列命令會測試、建置及準備 Lambda 函數的 zip 套件。

npm run test:code npm run build:code npm run pack:code
應用程式開發人員

建置建構。

下列命令會針對 AWS CDK 和 CDKTF 建立基礎設施合成應用程式。

npm run build:infra

設定任何自訂權限。

在複製存放庫的 repo 資料夾中,編輯允許.json 和 deny.json 檔案,以定義角色的任何自訂權限。如果允許 .json 和拒絕的 .json 檔案包含相同的權限,則會套用拒絕權限。

AWS 管理員、應用程式開發
任務描述所需技能

部署 AWS CDK 堆疊。

以下命令透過 AWS CloudFormation 部署基礎設施。定義下列參數:

  • <NAME_OF_ROLE>— 您要為其建立新政策之 IAM 角色的 ARN。

  • <TRAIL_ARN>— 儲存角色活動之 CloudTrail 追蹤的 ARN。

  • <CRON_EXPRESSION_TO_RUN_SOLUTION>— 定義策略再生排程的 Cron 運算式。「Step Functions」工作流程會依此排程執行。

  • <TRAIL_LOOKBACK>— 評估角色權限時回溯追蹤的期間 (以天為單位)。

cd infra/cdk cdk deploy —-parameters roleArn=<NAME_OF_ROLE> \ —-parameters trailArn=<TRAIL_ARN> \ --parameters schedule=<CRON_EXPRESSION_TO_RUN_SOLUTION> \ [ --parameters trailLookBack=<TRAIL_LOOKBACK> ]

注意 — 方括號代表選擇性參數。

應用程式開發人員

(選擇性) 等待新原則。

如果追蹤不包含合理數量的角色歷史活動,請等到您確信 IAM Access Analyzer 有足夠的記錄活動,才能產生正確的政策。如果該角色在帳戶中已啟用一段足夠的時間,則可能不需要此等待期。

AWS 管理員

手動檢閱產生的策略。

在 CodeCommit 存放庫中,檢閱產生的 .json <ROLE_ARN>檔案,以確認允許和拒絕權限適用於該角色。

AWS 管理員
任務描述所需技能

合成地形範本。

下列指令會合成地形範本。

lerna exec cdktf synth --scope @aiaa/tfm
應用程式開發人員

部署地形範本。

下列命令會導覽至包含 CDKTF 定義基礎結構的目錄。

cd infra/cdktf

下列命令會在目標 AWS 帳戶中部署基礎設施。定義下列參數:

  • <account_ID>— 目標帳戶的識別碼。

  • <region>-目標 AWS 區域。

  • <selected_role_ARN>— 您要為其建立新政策之 IAM 角色的 ARN。

  • <trail_ARN>— 儲存角色活動之 CloudTrail 追蹤的 ARN。

  • <schedule_expression>— 定義策略再生排程的 Cron 運算式。「Step Functions」工作流程會依此排程執行。

  • <trail_look_back>— 評估角色權限時回溯追蹤的期間 (以天為單位)。

TF_VAR_accountId=<account_ID> \ TF_VAR_region=<region> \ TF_VAR_roleArns=<selected_role_ARN> \ TF_VAR_trailArn=<trail_ARN> \ TF_VAR_schedule=<schedule_expression> \ [ TF_VAR_trailLookBack=<trail_look_back> ] \ cdktf deploy

注意 — 方括號代表選擇性參數。

應用程式開發人員

(選擇性) 等待新原則。

如果追蹤不包含合理數量的角色歷史活動,請等到您確信 IAM Access Analyzer 有足夠的記錄活動,才能產生正確的政策。如果該角色在帳戶中已啟用一段足夠的時間,則可能不需要此等待期。

AWS 管理員

手動檢閱產生的策略。

在 CodeCommit 存放庫中,檢閱產生的 .json <ROLE_ARN>檔案,以確認允許和拒絕權限適用於該角色。

AWS 管理員

相關資源

AWS 資源

其他資源