翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
EC2 Image Builder と Terraform を使用して、強化されたコンテナイメージのパイプラインを構築する
作成者: Mike Saintcross (AWS) と Andrew Ranes (AWS)
コードリポジトリ: Terraform EC2 Image Builder コンテナ強化パイプライン | 環境:本稼働 | ソース: パッカー、シェフ、または Pure Ansible |
ターゲット: EC2 Image Builder | R タイプ: リアーキテクト | ワークロード: オープンソース |
テクノロジー: セキュリティ、アイデンティティ、コンプライアンス DevOps | AWS サービス: Amazon EC2 Container Registry、EC2Image Builder |
[概要]
このパターンは、強化された Amazon Linux 2
ビルドには 2 つの Amazon EventBridge ルール が含まれています。1 つ目のルールは、Amazon Inspector の検出結果が「高」または「重要」の場合にコンテナイメージパイプラインを開始し、セキュアでないイメージが置き換えられるようにします。このルールでは、Amazon Inspector と Amazon Elastic Container Registry (Amazon ECR) の両方の拡張スキャンを有効にする必要があります。もう 1 つのルールは、Amazon ECRリポジトリへのイメージのプッシュが成功すると、Amazon Simple Queue Service (Amazon SQS) キューに通知を送信し、最新のコンテナイメージを使用するのに役立ちます。
注: Amazon Linux 2 のサポートは間もなく終了します。詳細については、「Amazon Linux 2FAQs
前提条件と制限
前提条件
機能制限
このソリューションは、プライベートサブネットからのインターネット接続用のNATゲートウェイとインターネットゲートウェイを含む Amazon Virtual Private Cloud (Amazon VPC) インフラストラクチャを作成します。AWS Task Orchestrator と Executor () によるブートストラッププロセスAWSTOE
がインターネットからAWSCLIバージョン 2 をインストールするため、VPCエンドポイント を使用することはできません。
製品バージョン
Amazon Linux 2
AWS CLI バージョン 1.1 以降
アーキテクチャ
ターゲットテクノロジースタック
このパターンでは、以下を含む 43 個のリソースが作成されます。
2 つの Amazon Simple Storage Service (Amazon S3) バケット: 1 つはパイプラインコンポーネントファイル用、もう 1 つはサーバーアクセスと Amazon VPCフローログ用
パブリックサブネット、プライベートサブネット、ルートテーブル、NATゲートウェイ、インターネットゲートウェイを含む仮想プライベートクラウド (VPC)
EC2 Image Builder パイプライン、レシピ、コンポーネント
コンテナイメージ
イメージ暗号化用の AWS Key Management Service (AWSKMS) キー
SQS キュー
3 つのロール: 1 つは EC2 Image Builder パイプラインを実行するロール、1 つは EC2 Image Builder のインスタンスプロファイル、もう 1 つは EventBridge ルールを実行するロール
2 つの EventBridge ルール
Terraform モジュール構造
ソースコードについては、「Terraform EC2 Image Builder Container Hardening Pipeline
├── 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
には、components.tf
で使用されるコンポーネントを定義する.yml
ファイルが含まれています。image.tf
には、基本的なイメージオペレーティングシステムの定義が含まれています。ここで、別のベースイメージパイプラインの定義を変更できます。infr-config.tf
およびdist-config.tf
には、イメージのスピンアップと配布に必要な最小限のAWSインフラストラクチャのリソースが含まれています。infra-network-config.tf
には、コンテナイメージをデプロイする最小VPCインフラストラクチャが含まれています。hardening-pipeline.tfvars
の適用時に使用される Terraform 変数が含まれています。pipeline.tf
は、Terraform で EC2 Image Builder パイプラインを作成および管理します。recipes.tf
では、さまざまなコンポーネントの組み合わせを指定してコンテナレシピを作成できます。roles.tf
には、Amazon Elastic Compute Cloud (Amazon IAM) インスタンスプロファイルとパイプラインデプロイロールの AWS Identity and Access Management (EC2) ポリシー定義が含まれています。trigger-build.tf
には、 EventBridge ルールとSQSキューリソースが含まれています。
ターゲット アーキテクチャ
![強化されたコンテナイメージのパイプラインを構築するためのアーキテクチャとワークフロー](images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)
この図は、次のワークフローを示しています。
EC2 Image Builder は、オペレーティングシステムの更新をインストールし、Amazon Linux 2 ベースイメージSTIGに RHEL Medium を適用する定義済みレシピを使用してコンテナイメージを構築します。
強化されたイメージはプライベート Amazon ECRレジストリに公開され、イメージが正常に公開されると、 EventBridge ルールはSQSキューにメッセージを送信します。
Amazon Inspector が拡張スキャン用に設定されている場合、Amazon ECRレジストリをスキャンします。
Amazon Inspector がイメージの重大度が「重大」または「高」の検出結果を生成すると、 EventBridge ルールによって EC2 Image Builder パイプラインが再度実行され、新しく強化されたイメージが公開されます。
自動化とスケール
このパターンでは、インフラストラクチャをプロビジョニングしてコンピュータにパイプラインを構築する方法を説明しています。 ただし、これは大規模な構築を目的としています。Terraform モジュールをローカルにデプロイする代わりに、Account Factory for Terraform 環境を備えた AWS Control Tower などのマルチアカウント環境で使用できます。 https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/
その場合は、設定状態をローカルで管理するのではなく、バックエンド状態の S3 バケット を使用して Terraform 状態ファイルを管理する必要があります。 スケーリングされた使用のために、Control Tower またはランディングゾーンアカウントモデルから、共有サービスアカウントや共通サービスアカウントなどの 1 つの中央アカウントにソリューションをデプロイし、Amazon ECRリポジトリとAWSKMSキーにアクセスする許可をコンシューマーアカウントに付与します。セットアップの詳細については、「re:Post」の記事「Amazon イメージリポジトリでセカンダリアカウントがECRイメージをプッシュまたはプルできるようにするにはどうすればよいですか?」を参照してください。
例えば、アカウント自動販売機 または Account Factory for Terraform で、各アカウントベースラインまたはアカウントカスタマイズベースラインにアクセス許可を追加して、その Amazon ECRリポジトリと暗号化キーへのアクセスを提供します。 コンテナイメージパイプラインがデプロイされたら、コンポーネント などの EC2 Image Builder 機能を使用して変更できます。これにより、より多くのコンポーネントを Docker ビルドにパッケージ化できます。
コンテナイメージの暗号化に使用されるAWSKMSキーは、イメージの使用が意図されているアカウント間で共有する必要があります。
Terraform モジュール全体をコピーし、次の
recipes.tf
属性を変更することで、他のイメージのサポートを追加できます:別の画像タイプを
parent_image = "amazonlinux:latest"
に変更します。既存の Amazon ECRリポジトリを指す
repository_name
ように を変更します。これにより、別の親イメージタイプを既存の Amazon ECRリポジトリにデプロイする別のパイプラインが作成されます。
ツール
ツール
テラフォーム (IaC プロビジョニング)
Git (ローカルでプロビジョニングする場合)
AWS CLI バージョン 1 またはバージョン 2 (ローカルでプロビジョニングする場合)
コード
このパターンのコードは、 GitHub リポジトリ Terraform EC2 Image Builder Container Hardening Pipeline
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
ローカルの認証情報を設定します。 | AWS 一時的な認証情報を設定します。
| AWS DevOps |
リポジトリをクローン作成します。 |
| AWS DevOps |
変数を更新します。 | 環境と必要な構成に合わせて、
以下に、各変数の説明を示します。
| AWS DevOps |
Terraform を初期化します。 | 変数値を更新した後、Terraform 設定ディレクトリを初期化できます。設定ディレクトリを初期化すると、設定で定義されているAWSプロバイダーがダウンロードされてインストールされます。
Terraform が正常に初期化され、インストールされたプロバイダのバージョンを示すメッセージが表示されます。 | AWS DevOps |
インフラストラクチャをデプロイし、コンテナイメージを作成します。 | 以下の
| AWS DevOps |
コンテナをカスタマイズします。 | EC2 Image Builder がパイプラインと初期レシピをデプロイした後、コンテナレシピの新しいバージョンを作成できます。 EC2 Image Builder で使用可能な 31 以上のコンポーネントのいずれかを追加して、コンテナビルドをカスタマイズできます。詳細については、EC2Image Builder ドキュメントの「コンテナレシピの新しいバージョンを作成する」の「コンポーネント」セクションを参照してください。 | AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS インフラストラクチャのプロビジョニングを検証します。 | 最初の Terraform
| AWS DevOps |
個々のAWSインフラストラクチャリソースを検証します。 | ローカルでプロビジョニングする場合、デプロイされた個々のリソースを検証するために、次のコマンドを実行します。
このコマンドは、43 個のリソースのリストを返します。 | AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
インフラストラクチャとコンテナイメージを削除します。 | Terraform の設定が完了した後、次のコマンドを実行してリソースを削除できます。
| AWS DevOps |
トラブルシューティング
問題 | ソリューション |
---|---|
プロバイダー認証情報の検証中にエラーが発生しました。 | ローカルマシンから Terraform
このエラーは、ローカルマシンの設定で使用されている認証情報のセキュリティトークンの有効期限が切れていることが原因です。 エラーを解決するには、 AWSCLIドキュメントの「設定の設定と表示」を参照してください。 |
関連リソース
Terraform EC2 Image Builder コンテナ強化パイプライン
(GitHub リポジトリ) AWS Control Tower Account Factory for Terraform
(AWS ブログ記事) 「バックエンドステート S3 バケット
」 (Terraform ドキュメント) の最新バージョンのインストールまたは更新 AWS ( CLICLIドキュメント)AWS