使用映像產生器和 Terraform 建置強化容 I EC2 mage Builder 檔的管道 - AWS 方案指引

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

使用映像產生器和 Terraform 建置強化容 I EC2 mage Builder 檔的管道

創建者邁克·聖克羅斯 (AWS) 和安德魯·拉內斯 () AWS

代碼存儲庫:地形 EC2 Image Builder 容器強化管道

環境:生產

資料來源:封裝工,廚師或純安智

目標:EC2Image Builder

R 型:重新建築

工作負載:開源

技術:安全性、身分識別、合規性; DevOps

AWS服務:Amazon EC2 容器註冊表; EC2 Image Builder

Summary

此模式會建立 EC2Image Builder 管道,以產生強化的 Amazon Linux 2 基本容器映像。Terraform 用作基礎結構即程式碼 (IaC) 工具,用來設定和佈建用於建立強化容器映像的基礎結構。此配方可協助您部署以碼頭為基礎的 Amazon Linux 2 容器映像檔,該映像檔已根據 RHEL (RHEL) 7 STIG 版本 3 版本 7— 中型強化。(請參閱 Image STIGBuilder 生器文件的 Linux STIG 元件一節中的建置-Linux 中型版本 2022.2.1。) EC2 這稱為金色容器影像。

該構建包括兩個 Amazon EventBridge 規則。當 Amazon Inspector 發現項目為「」或「嚴重」時,有一個規則會啟動容器映像管道,以便取代非安全映像。此規則要求同時啟用 Amazon Inspector 和 Amazon 彈性容器註冊表(AmazonECR)增強掃描。另一個規則會在將映像成功推送至 Amazon SQS ECR 儲存庫後,將通知傳送至 Amazon 簡單佇列,以協助您使用最新的容器映像。

注意:Amazon Linux 2 即將結束支持。如需詳細資訊,請參閱 Amazon Linux 2 FAQs

先決條件和限制

先決條件

  • 您可以在其中部署基礎結構的AWS帳戶

  • AWS已安裝指令行介面 (AWSCLI),用於設定本機部署的AWS認證。

  • 按照 Terraform 文檔中的說明下載和設置地形。

  • Git(如果您是從本地計算機進行配置)。

  • AWS帳號可用來建立AWS資源的角色。

  • .tf vars 檔案中定義的所有變數。 或者,您可以在套用 Terraform 組態時定義所有變數。

限制

產品版本

  • Amazon Linux 2

  • AWSCLI1.1 版或更新版本

架構

目標技術堆疊

此模式會建立 43 個資源,包括:

  • 兩個 Amazon Simple Storage Service (Amazon S3) 儲存體:一個用於管道元件檔案,另一個用於伺服器存取和 Amazon VPC 流程日誌

  • Amazon ECR 存儲庫

  • 包含公有子網路、私有子網路、路由表、閘道和網際網路NAT閘道的虛擬私有雲端 (VPC)

  • I EC2 mage Builder 管線、配方和元件

  • 容器映像

  • 影像加密的AWS金鑰管理服務 (AWSKMS) 金鑰

  • SQS 佇列

  • 三個角色:一個用於執行 EC2 Image Builder 管線,一個用於映 EC2 Image Builder 的執行個體設定檔,另一個用於 EventBridge 規則

  • 兩 EventBridge 條規則

地形模塊結構

有關源代碼,請參閱 GitHub 存儲庫 Terraform EC2 Image Builder 容器強化管道。

├── components.tf ├── config.tf ├── dist-config.tf ├── files │ └──assumption-policy.json ├── hardening-pipeline.tfvars ├── image.tf ├── infr-config.tf ├── infra-network-config.tf ├── kms-key.tf ├── main.tf ├── outputs.tf ├── pipeline.tf ├── recipes.tf ├── roles.tf ├── sec-groups.tf ├── trigger-build.tf └── variables.tf

模組詳情

  • components.tf包含用於上傳/files目錄內容的 Amazon S3 上傳資源。您也可以在此處模塊化添加自定義組YAML件文件。

  • /files包含定義中使用之元件的.yml檔案components.tf

  • image.tf包含基本映像作業系統的定義。您可以在此處修改不同基礎影像管線的定義。

  • infr-config.tfdist-config.tf包含啟動和分發映像所需的最小AWS基礎架構的資源。

  • infra-network-config.tf包含要將容器映像部署到的最小VPC基礎結構。

  • hardening-pipeline.tfvars包含要在套用時使用的地形變數。

  • pipeline.tf在 Terraform 中建立和管理 EC2 Image Builder 管線。

  • recipes.tf是您可以指定組件的不同混合物以創建容器配方的地方。

  • roles.tf包含 Amazon 彈性運算雲端 (AmazonIAM) 執行個體設定檔和管道部署角色的AWS身分和存取管理 (EC2) 政策定義。

  • trigger-build.tf包含規 EventBridge 則和SQS佇列資源。

目標架構

建立強化容器映像檔管道的架構和工作流程

圖表說明了下列工作流程:

  1. EC2Image Builder 器使用定義的配方建立容器映像,該配方會安裝作業系統更新,並STIG將RHEL媒體套用至 Amazon Linux 2 基本映像。

  2. 強化的映像會發佈到私有 Amazon ECR 登錄,而當映像成功發佈時, EventBridge 規則會將訊息傳送至SQS佇列。

  3. 如果將 Amazon Inspector 設定為增強型掃描,它會掃描 Amazon ECR 註冊表。

  4. 如果 Amazon Inspector 為映像產生重性或嚴重性發現項目, EventBridge 則規則會觸發 EC2 Image Builder 管道再次執行,並發佈新強化的映像。

自動化和規模

  • 此模式說明如何佈建基礎結構,並在您的電腦上建置管道。但是,它旨在大規模使用。您可以在多帳戶環境中使用它們,例如具有 Terraform 環境的 Account FactoryAWSControl Tower,而不是在本地部署 Terraform 模塊。在這種情況下,您應該使用後端狀態 S3 儲存貯體來管理 Terraform 狀態檔案,而不是在本機管理組態狀態。

  • 若要擴展使用,請從 Control Tower 或 landing zone 帳戶模型將解決方案部署到一個中央帳戶 (例如共用服務或一般服務帳戶),並授予消費者帳戶存取 Amazon ECR 儲存庫和AWSKMS金鑰的權限。有關設置的更多信息,請參閱 Re:POST 文章如何允許輔助帳戶在 Amazon ECR 映像存儲庫中推送或提取圖像? 例如,在帳戶自動售貨機或 Terraform 的 Account Factory 中,為每個帳戶基準或帳戶自訂基準新增許可,以提供對該 Amazon ECR 儲存庫和加密金鑰的存取權。

  • 部署容器映像管線之後,您可以使用 EC2 Image Builder 功能 (例如元件) 來修改它,這可協助您將更多元件封裝到 Docker 組建中。

  • 用於加密容器映像檔的AWSKMS金鑰應該在映像檔預定用於其中的帳戶之間共用。

  • 您可以複製整個 Terraform 模組並修改下列屬性,以新增對其他影像的支援:recipes.tf

    • 修改parent_image = "amazonlinux:latest"為其他影像類型。

    • 修改repository_name以指向現有的 Amazon ECR 儲存庫。這會建立另一個管道,將不同的父映像類型部署到您現有的 Amazon ECR 儲存庫。

工具

工具

  • 地形表單(IaC 配置)

  • Git(如果在本地佈建)

  • AWSCLI版本 1 或版本 2 (如果在本機佈建)

代碼

此模式的程式碼位於 GitHub 儲存庫 Terraform EC2 Image Builder 容器強化管線中。若要使用範例程式碼,請遵循下一節中的指示。

史诗

任務描述所需技能

設定本機認證。

設定您的AWS臨時登入資料。

  1. 查看AWSCLI是否已安裝:

    $ aws --version aws-cli/1.16.249 Python/3.6.8...
    • AWSCLI版本應為 1.1 或更高版本。

    • 如果找不到命令,請安裝 AWS CLI.

  2. 執行aws configure並提供下列值:

    $ aws configure AWS Access Key ID [*************xxxx]: <Your AWS access key ID> AWS Secret Access Key [**************xxxx]: <Your AWS secret access key> Default region name: [us-east-1]: <Your desired Region for deployment> Default output format [None]: <Your desired output format>
AWS DevOps

複製儲存庫。

  1. 複製此模式提供的存放庫。您可以使用HTTPS或安全外殼(SSH)。

    HTTPS:

    git clone https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline

    SSH:

    git clone git@github.com:aws-samples/terraform-ec2-image-builder-container-hardening-pipeline.git
  2. 導航到包含此解決方案的本地目錄:

    cd terraform-ec2-image-builder-container-hardening-pipeline
AWS DevOps

更新變數。

更新hardening-pipeline.tfvars檔案中的變數,以符合您的環境和您想要的組態。您必須提供自己的account_id。不過,您也應該修改其餘的變數,以符合您想要的部署。所有變量都是必需的。

account_id = "<DEPLOYMENT-ACCOUNT-ID>" aws_region = "us-east-1" vpc_name = "example-hardening-pipeline-vpc" kms_key_alias = "image-builder-container-key" ec2_iam_role_name = "example-hardening-instance-role" hardening_pipeline_role_name = "example-hardening-pipeline-role" aws_s3_ami_resources_bucket = "example-hardening-ami-resources-bucket-0123" image_name = "example-hardening-al2-container-image" ecr_name = "example-hardening-container-repo" recipe_version = "1.0.0" ebs_root_vol_size = 10

以下是每個變量的描述:

  • account_id‒ 您要部署解決方案的AWS帳戶號碼。

  • aws_region‒ 您要AWS部署解決方案的地區。

  • vpc_name‒ 您VPC基礎設施的名稱。

  • kms_key_alias‒ EC2 Image Builder 基礎結構組態要使用的AWSKMS金鑰名稱。

  • ec2_iam_role_name‒ 將作為EC2執行個體設定檔使用的角色名稱。

  • hardening_pipeline_role_name‒ 將用於部署強化管線的角色名稱。

  • aws_s3_ami_resources_bucket‒ 將託管構建管道和容器映像所需的所有文件的 S3 存儲桶的名稱。

  • image_name‒ 容器映像名稱。此值必須介於 3 到 50 個字元之間,且只能包含英數字元和連字號。

  • ecr_name‒ 用於存儲容器映像的 Amazon ECR 註冊表的名稱。

  • recipe_version‒ 圖像配方的版本。預設值為 1.0.0。

  • ebs_root_vol_size‒ Amazon 彈性區塊存放區 (Amazon) 根磁碟區的大小 (以 GB 為單位EBS)。預設值為 10 GB。

AWS DevOps

初始化地形。

更新變數值之後,您可以初始化 Terraform 組態目錄。初始化組態目錄會下載並安裝在組態中定義的AWS提供者。

terraform init

您應該會看到一則訊息,指出 Terraform 已成功初始化,並識別已安裝的提供者版本。

AWS DevOps

部署基礎結構並建立容器映像。

使用下列指令來初始化、驗證 Terraform 模組,並使用檔.tfvars案中定義的變數將 Terraform 模組套用至環境:

terraform init && terraform validate && terraform apply -var-file *.tfvars -auto-approve
AWS DevOps

自訂容器。

您可以在 EC2 Image Builder 器部署管線和初始配方之後,建立新版本的容器方案。

您可以在 EC2 Image Builder 器中新增任何可用的 31+ 元件,以自訂容器組建。如需詳細資訊,請參閱映像產生器文建立新版本的容器方案EC2中的元件一節。

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

驗證AWS基礎結構佈建。

成功完成第一個 Terraform apply 命令後,如果您在本機佈建,您應該會在本機電腦的終端機中看到以下程式碼片段:

Apply complete! Resources: 43 added, 0 changed, 0 destroyed.
AWS DevOps

驗證個別AWS基礎結構資源。

若要驗證已部署的個別資源,如果您在本機佈建,您可以執行下列命令:

terraform state list

此命令會傳回 43 個資源的清單。

AWS DevOps
任務描述所需技能

移除基礎結構和容器映像。

當您完成使用 Terraform 組態時,您可以執行下列命令來移除資源:

terraform init && terraform validate && terraform destroy -var-file *.tfvars -auto-approve
AWS DevOps

故障診斷

問題解決方案

驗證提供者認證時出錯

當您從本機電腦執行 Terraform applydestroy命令時,可能會遇到類似下列內容的錯誤:

Error: configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.

此錯誤是由於本機電腦組態中使用的認證的安全性 Token 到期所造成。

若要解決錯誤,請參閱AWSCLI文件中的設定和檢視組態設定

相關資源