In this article
CaaS:コンテナ・アズ・ア・サービスを解説
多くの組織が、アプリケーションの可搬性、効率性、俊敏性、さらにはセキュリティの向上を目指して、コンテナ化を進めています。現代のアプリケーションは規模も複雑さも増しており、アプリケーション自体を基盤となるインフラから切り離す新しいアプローチが求められています。コンテナ・アズ・ア・サービス(CaaS)は、コンテナベースのアプリケーションの管理とデプロイをさらに容易にする、クラウドベースのサービスです。
コンテナセキュリティは多くのチームにとって継続的な課題ですが、DevSecOpsのツールチェーンに適切なソリューションを導入すれば、コンテナイメージとその中にパッケージ化されたソフトウェアの両方を保護できます。まずは、コンテナ・アズ・ア・サービスについて詳しく見ていきましょう。
コンテナ・アズ・ア・サービス(CaaS)とは
コンテナ・アズ・ア・サービス(CaaS)とは?
CaaSは、コンテナ化されたアプリケーションの管理とデプロイを支援する、サードパーティプロバイダーがホストするクラウドベースのサービスです。CaaSプラットフォームを利用しない場合、コンテナやマイクロサービスを活用するDevOpsチームは、コンテナオーケストレーションシステムに加えて、その基盤となるクラウドリソースも管理する必要があり、アプリケーションの開発、テスト、リリースに注力しにくくなります。
CaaSを利用すると、開発者は基盤となるインフラの管理を気にすることなく、コンテナのホスティングとデプロイを自動化できます。CaaSはコードスタックやプログラミング言語に依存しないことが多く、マルチクラウド環境でのコンテナのデプロイを容易にします。
DevSecOpsでCaaSを利用するメリット
DevSecOpsチームにとって、CaaSはセキュアなアプリケーションの開発から本番環境へのリリースまでの時間短縮に役立ちます。インフラの設定や管理に伴うボトルネックを軽減することで、コンテナベースのアプリケーションのデプロイ、管理、スケーリングを容易にします。
コンテナ化されたアプリケーションは、環境内の他のコンテナから実質的に隔離されているため、悪意のある攻撃者が攻撃対象領域内を横方向に移動しにくくなります。それでも、コンテナセキュリティについて考慮すべき重要な点は数多くあります。コンテナ化されたワークロードが増えるなか、コンテナスキャンで脆弱性を特定するだけでなく、開発者が簡単に修正できる方法も提供するコンテナセキュリティソリューションを導入することが重要です。
CaaSにおけるセキュリティ上の考慮事項
コンテナ・アズ・ア・サービスのアーキテクチャでは、基盤となるインフラのコントロールプレーン(ここではコンテナオーケストレーター)が抽象化されますが、コンテナイメージや、最終的にアプリケーションを実行するコンポーネントのセキュリティは、引き続きユーザーの責任です。CaaSは通常、より広範なIaaSプラットフォーム(AWS、GCP、Azureなど)の一部として提供されるため、基盤となるプラットフォームのセキュリティ上の影響を理解することも重要です。
コンテナをデプロイする際は、潜在的な問題を排除できるよう、セキュリティガイドラインに沿ってコンテナイメージを適切に構築する必要があります。コンテナイメージに含まれるセキュリティ上の問題は、本番環境で発生する問題のリスクと深刻度を高めます。そのため、本番環境の監視も重要です。脆弱性がなく、過剰な権限も持たない最適なイメージを使っていても、本番環境で起きていることを監視する必要がなくなるわけではありません。
コンテナはオペレーティングシステムの要素とアプリケーションコードを組み合わせるため、OSコンポーネントやパッケージの保守責任は開発者やDevOpsチームに移ります。この責任の変化に加え、コンテナは数秒で更新・デプロイできることから、新たなセキュリティ手法が求められます。
CaaSとPaaS、IaaS、FaaSの違い
クラウドサービスの世界にあふれる略語の多さに、圧倒されることもあるでしょう。これらのサービスはどれも、インフラ管理の複雑さを抽象化するために設計されています。CaaSがコンテナの開発とデプロイを簡素化すること(多くの場合、IaaSプラットフォームの一部として)を見てきました。ここでは、クラウドサービスに関するその他の主要な略語を解説します。
PaaS
プラットフォーム・アズ・ア・サービス(PaaS)は、クラウド上での開発とデプロイに必要な環境を一式提供するサービスです。クラウドサービスプロバイダーが提供するPaaSプラットフォームには、インフラ、ミドルウェア、開発ツール、分析サービス、データベース管理システムなどが含まれます。PaaSは、構築、テスト、デプロイ、管理、更新など、ソフトウェア開発ライフサイクル(SDLC)全体をサポートします。
IaaS
インフラ・アズ・ア・サービス(IaaS)プラットフォームは、PaaSよりもシンプルなサービスです。これらのクラウドコンピューティングサービスでは、コンピューティング、ストレージ、ネットワークリソースをオンデマンドで利用できます。インフラはクラウドサービスプロバイダーが全面的に管理し、ユーザーの要件に応じて自動的にスケールアップまたはスケールダウンします。
FaaS
CaaSがコンテナのデプロイに特化しているのと同様に、ファンクション・アズ・ア・サービス(FaaS)は、サーバーを管理せずに特定のアプリケーションコンポーネントを実行する必要があるマイクロサービスのデプロイに特化しています。サーバーレスインフラの一種であるFaaSは、特定のイベントやリクエストに応じてアプリケーションコードやコンテナを実行する、イベント駆動型のコンピューティングモデルを採用しています。
CaaSプロバイダー
多くのクラウドサービスベンダーがCaaSプラットフォームを提供しています。なかでも広く利用されているコンテナ・アズ・ア・サービスのプロバイダーとして、Amazon、Google、Microsoftの3社が挙げられます。どのクラウド環境に慣れているかによって、チームが選ぶサービスは異なります。CaaSプラットフォームを利用する開発者も、コンテナイメージの構築方法やその内容に注意を払う必要があります。Snyk Containerなどのツールを使えば、SCM内のDockerfileや、レジストリまたはCI/CDパイプライン内のコンテナイメージをスキャンできます。これにより、セキュアなベースイメージを基に構築されていることや、デプロイ前にアプリケーションの構成が安全であることを確認できます。
Amazon Elastic Container Service(ECS)
AWSが提供するこのコンテナ・アズ・ア・サービスは、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを容易にする、フルマネージドのコンテナオーケストレーションサービスです。Amazon ECSを使うと、開発者は好みの継続的インテグレーション/デリバリー(CI/CD)ツールや自動化ツールを利用して、クラウド全体にコンテナを起動できます。これらのサービスにより、インフラのコントロールプレーン、ノード、インスタンスを設定・管理する必要がなくなります。
Google Cloud Run
Googleのこのコンテナ・アズ・ア・サービスプラットフォームは、フルマネージドのサーバーレスプラットフォーム上で、スケーラブルなコンテナ化アプリケーションを開発・デプロイできるようチームを支援します。Google Cloud Runでは、開発者は好みのプログラミング言語、ライブラリ、バイナリを利用できます。ECSと同様、Google Cloud Runはインフラ管理を抽象化し、コンテナワークロードを自動的にスケールアップ・ダウンします。
Microsoft Azure Container Instances(ACI)
AmazonやGoogleのサービスと同様、Microsoftのコンテナ・アズ・ア・サービスプラットフォームもフルマネージドサービスです。ACIを使うと、トラフィックの急増に応じてAzure Kubernetesクラスターを柔軟に拡張し、負荷の高いワークロードに必要なコンピューティングリソースを1つのコマンドで追加できます。また、ACIはコンテナグループごとにハイパーバイザーによる隔離を提供し、カーネルを共有せずにコンテナを分離して実行します。
コンテナオーケストレーション
多くのチームが、Kubernetesなどのコンテナオーケストレーションサービスだけで十分なのか、それともCaaSが必要なのかを検討します。CaaSプラットフォームはコンテナオーケストレーションソリューションの一種と考えられますが、一般にフルマネージドであるため、すぐに利用を始めやすい選択肢です。CaaSは幅広いワークロードに適しており、Kubernetesよりも学習のハードルが低い傾向があります。
一方、Kubernetesはオープンソースであるため、より高い可搬性があると一般に考えられています。通常、あるKubernetesディストリビューションで動作するワークロードは、そのまま、あるいはわずかな変更だけで、別のKubernetesディストリビューションにデプロイできます。Kubernetesには、サービスディスカバリーやロードバランシング、ストレージのオーケストレーション、クラスターの自己修復、シークレット、構成管理など、CaaSでは利用できない場合がある高度な機能が備わっています。
Amazon Elastic Kubernetes Service(EKS)、Google Kubernetes Engine(GKE)、Azure Kubernetes Service(AKS)など、Kubernetes・アズ・ア・サービス(KaaS)の利用も検討できます。KaaSはKubernetesとフルマネージドCaaSの中間的な選択肢で、プロジェクトをオープンソースのまま維持しながら、コンテナオーケストレーションのためのツールを開発者に提供します。
Snyk ContainerでCaaSのデプロイを監視
ツールが開発者やDevOpsチームにとって使いやすい設計になっていないため、多くのチームにとってコンテナとKubernetesのセキュリティは継続的な課題です。被害範囲を抑えるには、アプリケーションコード、依存関係、コンテナのセキュリティ脆弱性をなくし、実行中のワークロードを保護することが重要です。
コンテナのセキュリティ上の問題の多くは、アプリケーション、コンテナのビルドファイル、ワークロードの設定など、何らかのコードに関係しています。多くのコンテナスキャンツールで十分な対策が取れないのは、脆弱性や問題の一覧を提示するだけで、チームが修正方法を把握できるよう支援していないためです。さらに、多くの開発者は、こうしたツールが指摘するセキュリティ問題への対処方法を十分に知りません。
Snyk ContainerはCaaSのデプロイを監視するだけでなく、開発者がセキュリティ問題を迅速に修正できるよう支援し、こうした課題を解決します。ベースイメージの推奨から、コンテナの問題を修正するための具体的なガイダンスを開発者に提供します。また、コンテナの修正用プルリクエスト(PR)を自動作成できるほか、GitリポジトリからDockerfileを検出できます。
この開発者ファーストのコンテナセキュリティアプローチにより、セキュリティをチームの日々の意識やビルドプロセスに組み込めます。Snyk Containerは、デスクトップ上でSnyk CLIやDocker Desktopを使って直接利用できます。また、ソースコード管理ツール、CI/CDツール、コンテナレジストリ、Kubernetesと連携し、クラスターへのデプロイ時や更新時にワークロードをスキャンします。
コンテナセキュリティに使っていた従来のソリューションの管理やアップグレードがますます困難になったとき、AIを活用した検索企業のCoveoはSnykを導入しました。 コンテナイメージも保護できる、使いやすく開発者に優しい単一のツールである点がCoveoにとって魅力でした。
「Snykは使いやすいSaaSサービスを提供しています… 本番環境に移行する前にコンテナイメージを検証できる、信頼性の高いソリューションが必要でした。Snykのおかげで、シンプルに検証できています。」
Jean Phillipe - Coveo
Snykが開発者による高品質でセキュアなコードの作成をどのように支援できるか、セキュリティリソースページをご覧ください。