Amazon Web Services ブログ

Amazon ECS Service Connect による Amazon ECS ワークロードの保護

この記事は Secure Amazon Elastic Container Service workloads with Amazon ECS Service Connect (記事公開日 : 2024 年 1 月 30 日) の翻訳です。

導入

先日発表されたアップデートによって、Amazon Elastic Container Service (Amazon ECS)AWS Private Certificate Authority (Private CA) と統合し、証明書の発行や配布、ローテーションのプロセスを自動化できるようになりました。Amazon ECS Service Connect をご利用のお客様は、アプリケーションコードを変更することなく、また余分なネットワークインフラストラクチャやサービスメッシュソリューションを運用することなく、サービス間通信を TLS で暗号化できます。

既存の Service Connect 名前空間において、Service Connect を使用するサービス単位でトラフィックを暗号化できます。まず、使用する Private CA を AWS マネジメントコンソール上で選択するか、あるいは Private CA の ARN を AWS CLI で指定します。このとき、既存の、あるいは新規に作成した Private CA を利用できます。この CA は証明書に署名する際に使用され、信頼のルートとしても使用されます。デフォルトでは、Amazon ECS は AWS 管理の対称暗号鍵 (共通鍵) を使用して、秘密鍵をお客様の AWS Secrets Manager に保管します。このとき、コンプライアンス上の理由などにより、独自の共通鍵を提供することもできます。

ソリューション概要

それでは、TLS 証明書を使用してトラフィックを暗号化することで、Amazon ECS Service Connect を使用している既存の Amazon ECS ワークロードを保護する方法を確認しましょう。

まず、証明書と暗号鍵をどのように管理するか、決める必要があります。

推奨される方法は、AWS Private CA の有効期限の短い証明書モードを使用することです。Service Connect が発行する証明書の有効期限はデフォルトで 7 日間であり、5 日ごとにローテーションされます。AWS Private CA の有効期限の短い証明書モードを使用すると、汎用モードを使用した場合に比べて大幅なコスト削減を実現できます。また、Service Connect は証明書の失効をサポートしておらず、代わりに有効期限の短い証明書を利用して頻繁に証明書をローテーションするため、このモードはほとんどのユースケースにおいて効果的に機能します。Amazon ECS は 7 日間の有効期限を持つ証明書を発行し、5 日ごとに自動ローテーションを実施するため、有効期限やローテーションの頻度を設定する必要もありません。

別の選択肢として、既存の下位 CA を使用するか、オンプレミスの CA を使用して AWS Private CA に新しい下位 CA を作成、設定することもできます。また、独自のキーマテリアルを提供することも可能で、AWS Key Management Service (AWS KMS) を通じて外部のキーストアを使用することもできます。独自のキーを使用する場合は、AWS KMS にインポートした後、Amazon ECS Service Connect でそのキーの ARN を指定します。

証明書と暗号鍵の管理方法を決定すれば、Service Connect で TLS を有効化するのは簡単です。ここではシンプルさと一貫性のために、Amazon ECS Service Connect が re:Invent 2022 で発表された際に Channy Yun が書いた人気記事 (Secure Amazon Elastic Container Service workloads with Amazon ECS Service Connect) をベースにお話しします。

Amazon ECS ワークロードのアーキテクチャ図

ウォークスルー

1. トラフィックを暗号化したいサービスにおいて、Service Connect 名前空間を選択します。この例では、クラスター作成時に service-connect という名前の名前空間を作成しているので、これを選択し、保護したいサービスを配置します。

TLS 暗号化で保護する名前空間の選択

2. 次に、トラフィックを暗号化したいサービスの Service Connect 設定において、「トラフィックの暗号化を有効にする」にチェックを入れます。

選択した名前空間におけるトラフィック暗号化の有効化

3. Service Connect の TLS ロールでは、既存のロールを選択するか、新しいロールを作成します。Amazon ECS は、証明書の発行に必要な一連の権限の大枠を定義した、マネージド型の IAM ポリシーを提供します。この新しいポリシーの詳細については、Amazon ECS の AWS マネージドポリシーに関するドキュメントを参照してください。

Service Connect TLS ロールの選択

4. Signer CA (署名者認証機関) では、既存の CA を使用するか、新しい CA を作成します。

Signer CA の選択

5. AWS KMS キーの選択では、AWS が所有・管理するキーを選択するか、別のキーを選択できます。必要に応じて、この画面から新しくキーを作成することもできます。

TLS のセットアップに使用する AWS KMS キーの選択

6. 別の方法として、AWS CLI から直接 TLS 暗号化を有効化できます。このとき必要なのは、証明書の ARN (awsPcaAuthorityArn)、KMS キー (kmsKey)、AWS IAM ロールの ARN (roleArn) を JSON ペイロードに追加することだけです。

AWS CLI から TLS 暗号化を有効化するコードスニペットの例

前提条件

トラフィックを TLS 暗号化するための唯一の前提条件は、サービス間通信に Service Connect を使用していることです。他の接続方法を使用しているサービスでは、上記の方法で TLS 暗号化することはできません。

まとめ

この記事では、Service Connect を使用している既存の Amazon ECS サービスを TLS 暗号化により保護する方法を紹介しました。コンプライアンスや規制上の理由から追加の暗号化レイヤーを必要とするお客様にとって、Amazon ECS Service Connect における TLS 暗号化サポートは重要なアップデートです。一部のお客様は、アプリケーションコードに変更を加えることなく、プロキシレベルでトラフィックを暗号化する AWS App Mesh のようなサービスメッシュを好みます。あるいは、アプリケーションコード内に直接 TLS を実装するお客様もいます。サービスメッシュは、通常ツールや技術者への多大な投資を必要とするため、お客様のアプリケーションの総所有コスト (TCO) が増加します。一方で TLS を直接実装するのは、手作業による証明書の発行、配布、ローテーションが複雑になり、開発スピードが損なわれてしまいます。また、Elastic Load Balancing (ELB) を使用すると、サービス間通信のためのインフラストラクチャの複雑さが増加します。Amazon ECS Service Connect の TLS 暗号化サポートの詳細については、ドキュメントを確認し、今回のリリース記事をお読みください。

Amazon ECS Service Connect は、Amazon ECS および AWS Private CA が利用可能なすべての AWS リージョンで利用可能です。また、AWS CloudFormationAWS CDKAWS Copilot、および AWS Proton で完全にサポートされており、これらを用いたインフラストラクチャのプロビジョニング、コードデプロイ、サービス監視を実現できます。詳細については、Amazon ECS Service Connect 開発者ガイドを参照してください。

ぜひ一度試してみてください。フィードバックも受け付けてますので、AWS re:Post (Amazon ECS) や AWS サポート窓口までお願いします。