AWS Fargateのセキュアな運用方法
コンテナ化は、より高速で柔軟かつ俊敏なソフトウェア開発を可能にする、最新のクラウドネイティブ開発の柱のひとつとなっています。コンテナ・エコシステムの成熟は近年加速しており、さまざまなベンダーが多数のソリューションを提供しています。主要なクラウドプロバイダーである AWS は、コンテナ化されたアプリケーションをより効率的かつ効果的に実行できるよう、ユーザーを支援するために特別に設計されたサービスを導入しています。ツールやサービスに関しては、AWSユーザーは3つの主要なAWSコンテナサービスから選択できます: Fargate、Elastic Container Service (ECS)、Elastic Kubernetes Service (EKS)です。
FargateはAWS Elastic Container Service (ECS)とAWS Elastic Kubernetes Service (EKS)の両方でサポートされており、コンテナ管理(クラスタの作成、セットアップ、メンテナンスを含む)をシンプルにしています。
他のAWSサービスと同様に、AWS Fargateは、顧客がクラウド “内 “のセキュリティに責任を持ち、AWSがクラウド “外 “のセキュリティに責任を持つ責任共有モデルで運用されます。AWSがインフラのプロビジョニングを監督するAWS Fargateのユニークな配置を考えると、コンテナアプリケーション内のAWS Fargateのセキュリティを確保するユーザーの役割について疑問がありました。
AWS Fargateとその関連サービスであるECSとEKSをセキュアにする方法を学ぶために、このブログを読み進めてください。また、実装可能なベストセキュリティプラクティスについても説明します。
AWS Fargateとは?
AWS Fargateは、コンテナの最小要件に基づいて仮想マシンクラスタを自動的にプロビジョニング、構成、スケールできる従量課金のAWSサービスです。基盤となるインフラのプロビジョニングや管理を行うことなく、コンテナの起動と実行に使用されるサーバーレスコンピュートエンジンです。
AWS Fargateは、Amazon Elastic Container Service(ECS)およびAmazon Elastic Kubernetes Service(EKS)と連携します。AWS Fargateの技術を使用することで、サーバーやAmazon EC2インスタンスのクラスタを管理することなくコンテナを実行できます。その結果、コンテナを実行するために仮想マシンクラスタをプロビジョニング、構成、スケールする必要がなくなります。これは、基盤となるリソースを抽象化することで実現されます。
AWS Fargateの主な特徴は以下の通りです:
- AWS Fargate を使用すると、サーバーのスケーリング、パッチ適用、セキュリティ保護、管理などの運用上のオーバーヘッドを取り除くことで、インフラストラクチャを気にすることなくアプリケーションをデプロイおよび管理できます。
- AWS Fargateは、Amazon CloudWatch Container InsightsのようなAWSサービスとのビルトイン統合を通じて、アプリケーションを監視することができます。また、サードパーティのツールを使用してメトリクスとログを収集することもできます。
- AWS Fargateは、使用した分だけ支払う従量課金モデルをサポートしています。Fargateは、指定されたリソース要件に密接に一致するようにコンピュートをスケールします。
AWS Fargateの安全性は?
AWS Fargateが提供するセキュリティのレベルは、利用者とAWSがどれだけ密接に責任共有モデルを守れるかに依存します。抽象化の利点のため、FargateはユーザーがAWSにより多くのセキュリティ責任を与えることを可能にします。他のセルフマネージドインスタンスと比較して、AWS Fargateはより多くのAWSインフラリソースに責任を持ちます。
しかし、ユーザーアカウントとアプリケーションを安全に保つことは引き続き重要です。攻撃者は、Fargateコンテナをベースとして横方向に移動し、一旦そのコンテナをコントロールすると、追加の権利や機密情報にアクセスすることができます。お客様は、アプリケーションコードとサービス構成を保護することで、このシナリオを回避する責任があります。
AWS責任共有モデル
以下の図は、EC2インスタンス上でECSを実行する責任が、ECS Fargateを実行する責任とどのように異なるかを示しています。AWSは、物理的なハードウェア、基礎となるサービス、ECSのコントロールプレーンを担当しています。しかし、クライアントがECS/EC2上のコンテナインスタンスを格納する仮想マシンを管理することは非常に重要です。良いニュースは、AWSがこれらの仮想マシンを管理するためのワンクリックのソリューションを提供していることです。
![Secure-AWS-Fargate](https://sysdig.jp/wp-content/uploads/Secure-AWS-Fargate-2-1.png)
![image_tooltip Secure-AWS-Fargate](https://sysdig.jp/wp-content/uploads/Secure-AWS-Fargate-1-1.png)
Fargateセキュリティの懸念とリスク
Fargateを提供することで、AWSはインフラストラクチャのセキュリティに対してより多くの責任を負うことになりますが、それでもなお、考慮すべきアタックサーフェイス攻撃対象が存在します。AWS Fargateの利用者は、以下のようないくつかの懸念やリスクに遭遇します:
- 可視性の欠如: AWS Fargateではオペレーティングシステムにアクセスできないため、コンテナインフラストラクチャで何が起きているのかを高いレベルで可視化することは非常に難しいです。Fargateワークロードのアクティビティに対する深い可視性がなければ、異常なアクティビティを検出することはほぼ不可能です。見えないものを保護することはできません。
- AWS Fargate IAMの設定ミス:IAMロールとアクセス設定は、Fargateデプロイメントにアクセスできるグループやユーザーを指定する権限を委譲するため、Fargateセキュリティの不可欠な部分です。AWS Fargate IAM内の設定ミスは、機密データへの不正アクセスを許可することになります。
- コンテナセキュリティの欠如: コンテナセキュリティは、Fargate内のコンテナワークロードが意図したとおりに動作することを保証するための重要な部分です。コンテナを保護する効果的なセキュリティがなければ、コンテナの権限昇格、ネットワーク経由で複数のコンテナに広がるマルウェア、アクセス制御の悪用など、いくつかの脅威の犠牲になる可能性があります。
AWS Fargateをセキュアにする方法: ベストプラクティス
コンテナイメージスキャンの自動化
自動化された AWS Fargate イメージスキャンを実装してコンテナの脅威をブロックすることで、AWS Fargate をセキュアにすることができます。イメージスキャンは、セキュリティ問題、脆弱性、またはバッドプラクティスを検出するために、ビルドプロセスとコンテナイメージの内容を分析します。
イメージスキャンは、コンテナやKubernetesのライフサイクル全体を通じて、さまざまなポイントで実装できます。アプリケーションの構築と実行に必要な柔軟性を損なうことなく、セキュリティとコンプライアンスの確保に役立つ重要な洞察を提供します。
データ暗号化
EKSまたはECS上でAWS Fargateを実行する場合、業界標準のAES-256暗号アルゴリズムを使用してサービス管理鍵でエフェメラルストレージに保存されたデータを暗号化できます。AWS Fargateのお客様は、暗号化されたデータのダウンロードと処理のために提供される20GBのエフェメラルストレージを利用できます。Fargateはデータの暗号化と復号化をシームレスに処理するため、データにアクセスするためにアプリケーションを変更する必要はありません。これにより、生産性とセキュリティが向上します。お客様は、コンプライアンスとセキュリティの目標を達成しながら、無料でデータの暗号化を行うことができます
AWS Fargate監視
AWS Fargateを監視することで、アプリを360度可視化し、トラブルシューティングを迅速に行うことができます。AWSのデフォルトモニタリングツールセットであるCloudWatchは、ECSとFargateユーザのためのいくつかの機能を含んでいます。例えば、CloudWatch Container Insightsは、コンテナ内部で何が起こっているかについての洞察を提供します。Amazon CloudWatchコンソールで利用可能なパフォーマンス監視機能を使用すると、コンテナのCPU、メモリ、ネットワーク、およびバイトの読み取り/書き込みを確認できます。CloudWatch Container Insightsダッシュボード上のインサイトのサマリーは、エンジニアリングチームが問題をより迅速にデバッグするのに役立ちます。
AWS ECS Fargateのセキュリティ
There are several best practices you can implement to secure AWS Fargate when working with ECS. For example:
AWS FargateをECSと連携させる際に実施できるベストプラクティスがいくつかあります。例えば
- セキュリティグループを使用します: AWS ECS Fargateでは、セキュリティグループを使用してコンテナとのトラフィックを制御できます。これにより、ECS環境に不要なトラフィックが侵入しないようにFargateデプロイメントを保護します。
- IAMの構成:他のAWSリソースと同様に、強力なIdentity and Access Management(IAM)、多要素認証のようなポリシー、IAMロール、およびセキュリティトークンを構成することによって、AWS ECS Fargateを保護し、コンテナアプリケーションへの不正アクセスを防止することができます。
AWS EKS Fargateのセキュリティ
EKSでFargateを使用する場合、IAMロール、セキュリティトークン、セキュリティグループを使用してFargateに権限を委譲することで、Kubernetesコンテナサービス全体を保護するための最善のセキュリティプラクティスを構成できます。さらに、セキュリティグループを使用してコンテナへのトラフィックを制限することで、Fargateに連絡するためのセキュアなプロトコルを構成できます。また、AWS CloudTrailとAmazon CloudWatchを使用してデータをログおよび分析するようにEKSを構成できます。これにより、EKS環境内のAWS Fargateリソースのセキュリティが確保されます。
結論
クラウドでのコンテナ管理を簡素化したい企業にとって、AWS Fargateはインフラ管理を抽象化したサーバーレス・エクスペリエンスを提供することで、チームの運用負担を軽減します。この投稿で説明したように、お客様はアプリケーションコードのセキュリティに責任を持ち、AWSは基盤となるFargateインフラストラクチャと実行環境の管理を監督します。顧客はAWS Fargateとその関連サービスであるEKSとECS内のセキュリティを積極的に管理する責任があります。
上述したセキュリティのベストプラクティスに加えて、Fargate ユーザーは、脅威の検出と対応、およびクラウドセキュリティの全体的な態勢を管理するための包括的なセキュリティプラットフォームを利用する必要があります。