Google Cloudとコンテナの継続的なセキュリティ
本文の内容は、2020年9月29日にVicente Herrera Garcíaが投稿したブログ(https://sysdig.com/blog/fargate-image-scanning/)を元に日本語に翻訳・再構成した内容となっております。
AWS環境でAWS Fargateのイメージスキャンを直接自動化し、本番環境への脆弱性の到達をブロックする方法をご紹介します。
AWS FargateとECSを利用することで、コンテナ化されたワークロードを迅速にデプロイすることができます。Fargateはインフラのお世話をする必要がないので、さらに便利です。これらのサービスはあまりにも便利なので、多くの人がこれらのサービスを放置しているため、秘密を流出させたり、ビジネスデータを危険にさらしたり、パフォーマンスに影響を与えたり、AWSのコストを増加させたりする可能性のあるコンテナ内部の脆弱性にさらされる危険性があります。
例えば、イメージに誤って含まれていたいくつかの資格情報が、後にFargateにデプロイされたとします。これらの認証情報は、イメージ(リポジトリ上にあると考えてください)やFargateサービスにアクセスできる誰にでも公開されてしまいます。
既知の脆弱性を考えてみましょう。あなたのAPIを管理するためにFargateタスクをデプロイし、それがリクエストサイズを制限する設定を無視する古いHTTPライブラリのバージョンを使用していることを想像してみてください。それは壊滅的な可能性があります。あなたは1MB以下のリクエストを期待していますが、悪意のあるアクターがこの脆弱性を悪用して80GBのリクエストを送信したとしましょう。これはAWSの請求額に絶対的な打撃を与え、サービスのスロットルを引き起こす可能性があります。
これは深刻な脅威です。
ECSでFargateを使おうと決めたときに求めていた柔軟性を奪うのではないかと考えて、さらなるセキュリティチェックの実施に消極的になるかもしれません。
この記事では、イメージスキャンは、あなたが望む柔軟性のレベルに影響を与えることなく、あなたが必要とするセキュリティの洞察力を提供することができる方法を学びます。
具体的には、Sysdig SecureでECS Fargateイメージスキャンを実装する方法をご案内します。結果として得られるソリューションは、実行されるすべてのコンテナイメージインスタンスを自動的にスキャンし、ワークロードの脆弱性や設定ミスに関するレポートで警告します。これはAWSのワークフローから離れることなく、データがAWSインフラから離れることなく実行されます。
AWS Fargateは、Amazon Elastic Container Service(ECS)とAmazon Elastic Kubernetes Service(EKS)の両方で動作するコンテナ向けのサーバーレスコンピュートエンジンです。適切な量のコンピュートリソースを割り当て、インスタンスタイプの選択やクラスターキャパシティのスケーリングの必要性を排除します。Fargateを使用すると、コンテナの実行に必要な最低限のリソースを支払うことになります。
Amazon Elastic Container Service(ECS)は、完全に管理されたコンテナオーケストレーションサービスです。ECSはAmazonの主要サービスの基盤となる柱であるため、他のAWSサービスとネイティブに統合されています。
少し前に、Amazon Elastic Kubernetes Service (EKS) のセキュリティについても取り上げました。
イメージスキャナはコンテナの内容を検査して、先に紹介したような脅威を検出します。イメージスキャンのベストプラクティスを DevOpsパイプラインのいくつかのフェーズに実装することで、脅威が本番環境にデプロイされる前にブロックすることができ、余分なオーバーヘッドを追加することもありません。
イメージスキャンのポリシーを定義して、脆弱性データベースに対してコンテナのコンテンツを検証し、特権ユーザとして実行されている、不要なポートが開いている、または漏洩した資格情報などの誤った設定を検索することができます。
スキャンが行われる場所に関しては、イメージスキャナーには2つのアプローチがあります。
伝統的に、イメージスキャナーは別のバックエンドで実行されます。この方法では、スキャナーはレジストリからコンテナイメージを取得する必要があります。これは、スキャナーのバックエンドにアクセス可能なレジストリ上のすべてのイメージを公開する必要があることを意味します。イメージスキャナーがSaaSソリューションである場合、セキュリティ上の問題に対処しなければならない場合があります。
より高度なアプローチとしては、コンテナイメージが既に存在する場所にローカルでスキャンを実行するインラインスキャンがあります。このアプローチでは、一部のメタデータのみがバックエンドに送信されます。
これがインラインスキャンの主な利点です。コンテナの内容がインフラストラクチャーから離れることはありません。これにより、プライバシーが保護され、クレデンシャルの漏洩を防ぐことができます。また、セキュリティ上の懸念からエアギャップ環境(インターネット接続が無い環境)が必要な場合にも必要です。
インライン・スキャンにはいくつかのコンポーネントが含まれますが、実際には、その構成はバックエンド・スキャナーに似ています。
ここでは、インラインイメージスキャンに焦点を当て、Sysdigを使ったECS Fargateイメージスキャンがどのように機能するのかを見ていきましょう。
ECS Fargateに向けられたデプロイコマンドはすべてイメージスキャンをトリガーします。特にデプロイコマンドはAmazon EventBridgeによって検出され、AWS Lambda関数を介してCodeBuildパイプラインをトリガーします。イメージスキャンが実行されるのは、このCodeBuildパイプライン内です。
Sysdigインラインイメージスキャナーはデプロイされるイメージを検査し、そのメタデータをSysdigバックエンドに送信します。実際のイメージの内容は、CodeBuildパイプラインからは出てきません。
その後、Sysdigバックエンドはコンテナのメタデータをセキュリティポリシーに照らし合わせて評価します。イメージがセキュリティ要件を満たしていない場合はスキャンレポートを生成するので、対策を講じることができます。
Sysdigのアプローチにはいくつかのポイントがあります。
イメージごとに特定のパイプラインを構築する必要はありません。スキャンは、インフラストラクチャ全体にわたってECS Fargateで実行されるすべてのワークロードに対して自動的にトリガーされます。
コンテナのメタデータはSysdigのバックエンドに保持されるため、イメージを再スキャンする必要はありません。脆弱性データベースの更新やポリシーの変更は、最終的にスキャンレポートを更新します。
Sysdigバックエンドは、実行中のすべてのワークロードのセキュリティ態勢のための単一の真実のソースとして機能します。すべてのセキュリティレポートを一元化し、同じツールからコンプライアンスステータスや実行時のセキュリティイベントをチェックすることができます。
このアプローチはソリューションの一部に過ぎないことを覚えておいてください。CI/CDパイプラインやレジストリなど、DevOps ライフサイクルの他の場所にイメージスキャンを実装することで、セキュリティをさらに強化することができます。また、ランタイムセキュリティ、コンプライアンスチェック、アクティビティ監査のような他のセキュリティコントロールも実装する必要があります。Sysdigは、AWSコンテナサービス全体にセキュリティ管理を拡張するのに役立ちますが、インフラストラクチャー全体のセキュリティ姿勢を把握するための単一の情報源として機能します。
Sysdigのイメージスキャナー(インラインまたはバックエンド)をデプロイするには、AWS CloudFormationを使用します。
AWS CloudFormationは、アプリケーションに必要なすべてのリソースを自動化された安全な方法でモデル化し、プロビジョニングするための共通言語を提供します。
SysdigのCloudFormationテンプレートを適用するには、リンクをたどっていくつかの設定を選択するだけです。最新の手順は、Sysdig Fargateのスキャニングインストールページにあります。
それでは、さっそくやってみましょう
まず、ブラウザでAWS Consoleアカウントにログインしていることを確認します。
そして、このリンク「CloudFormation template for ECS Fargate image scanning with Sysdig」に移動し、CloudFormationテンプレートをプレビューします。
「スタックの作成」で「次へ」ボタンをクリックすると、テンプレートのセットアップデプロイが開始されます。
「スタックの詳細を指定する」ステップでは、いくつかの設定オプションを設定することができます。例えば、インラインスキャンかバックエンドスキャンかを選択することができます。
また、Sysdig Secure API Tokenを提供する必要があり、SaaSではなくSysdigをオンプレミスでインストールしている場合は、デフォルトのhttps://secure.sysdig.comではなく、エンドポイントを指定する必要があります。エアギャップされたAWSインフラ環境をお持ちの場合は、その中からエンドポイントにアクセスできるようにする必要があります。
API トークンは、Sysdig Secure のダッシュボードにアクセスして確認できます。左下のプロフィールアイコンをクリックし、「Settings」を選択します。最初のセクションにAPIトークンが表示されます。それをコピーしてAWS Stackの設定に貼り付け、Nextをクリックします。
「スタックオプションの設定」には、追加のタグやパーミッションを追加するためのセクションが表示されます。追加のタグやパーミッションを追加する必要がある場合は、ここをクリックします。
準備ができたら、次へをクリックします。
最後のステップでは、先ほど紹介したすべてのパラメータの概要が表示されます。
すべてが正しいことを確認してください。
スキャンを実行するために専用のIAMロールが作成されることに注意してください。これらのロールは、このデプロイメントが動作するために必要です。IAMはデリケートなサービスであることを知っているので、最大のセキュリティを強化するために「最小特権の原則」に従ってこれらのロールを設計しました。
プランに満足したら、チェックボックスにマークを付けて確認し、スタックの作成ボタンをクリックします。
CloudFormationスタックが作成され、すぐに必要なリソースのプロビジョニングを開始します。終了するまで待ちましょう、数分はかかります。AWSのCloudFormationセクションを再訪して、デプロイの状況を確認することができます。
すべてのスタックが作成されたら、デプロイするすべてのイメージが自動的にスキャンされるので、安全にFargateクラスターにECSタスクをデプロイする準備ができています。
これがどのように動作するかを掘り下げてみましょう。
Fargateのタスクが実行を開始すると、イベントは自動的にLambda関数に送信されます。そして、このLambda関数はイメージスキャンをトリガーします。インラインスキャンの場合、スキャンレポートはCodeBuildパイプラインで利用可能になります。スキャンレポートは常にSysdig Secureで利用可能になります。
インラインスキャンとバックエンドスキャンのもう一つの違いは、作成されるLambda関数の数です。選択されたスキャンモードがインラインの場合、Lambda関数はタスクの各イメージのCodeBuildパイプラインを起動します。選択されたモードがBackendの場合、Lambda関数はSysdig Secureのバックエンドへの単一APIコールをトリガーします。その後、Sysdigはすべてのイメージを引っ張ってきて、それぞれのイメージに対してスキャンを実行します。
AWS ECS Fargateを利用することで、DevOpsエンジニアは非常に迅速にアプリケーションをデプロイできるようになります。
最初はセキュリティ対策を課すことは柔軟性を奪うように思えるかもしれませんが、適切な自動化ツールはワークフローと統合してくれるので、ペースを落とすことはありません。
ECS Fargate用のSysdigインラインおよびバックエンドスキャンは、すべてのワークロードを自動でスキャンする簡単な方法なので、プロジェクトごとに追加の設定をする必要はありません。検出された脆弱性や設定ミスに関する情報を含め、すべてのセキュリティレポートはSysdigプラットフォーム上で一元管理されます。
今すぐトライアルアカウントをリクエストして、ECS FargateのセキュリティにSysdigの使用を開始してください。