Amazon EKS の AWS プライベート CA を使用して AWS App Mesh の mTLS をアクティベートします - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EKS の AWS プライベート CA を使用して AWS App Mesh の mTLS をアクティベートします

作成者: Omar Kahil (AWS)、Emmanuel Saliu (AWS)、Muhammad Shahzad (AWS)、Andy Wong (AWS)

環境:PoC またはパイロット

テクノロジー:コンテナとマイクロサービス

AWS サービス: AWS App Mesh、Amazon EKS、AWS Certificate Manager (ACM)

[概要]

このパターンは、AWS App Mesh の AWS プライベート認証局 (AWS プライベート CA) からの証明書を使用して、Amazon Web Services (AWS) に相互トランスポート層セキュリティ (mTLS) を実装する方法を示しています。全員のためのセキュアプロダクションアイデンティティフレームワーク (SPIFFE) を通じて Envoy シークレットディスカバリーサービス (SDS) API を使用しています。SPIFFE はクラウド・ネイティブ・コンピューティング財団 (CNCF) のオープンソース・プロジェクトで、幅広いコミュニティからの支持を得ており、きめ細かく動的なワークロードID管理を実現しています。SPIFFE 標準を実装するには、SPIRE SPIFE ランタイム環境を使用してください。

App Mesh で mTLSを使用すると、TLS上にセキュリティレイヤーが追加され、メッシュ内のサービスが接続を行うクライアントを確認できるため、双方向のピア認証が可能になります。クライアントとサーバーの関係にあるクライアントは、セッションネゴシエーションプロセス中に X.509 証明書も提供します。サーバーは、この証明書を使用してクライアントを識別し、認証します。これは、証明書が信頼できる認証局 (CA) によって発行されたかどうか、また、証明書が有効であるかどうかを確認するのに役立ちます。

前提条件と制限

前提条件

  • セルフマネージドノードグループまたはマネージドノードグループを含む Amazon Elastic Kubernetes Service (Amazon EKS) クラスター

  • SDS がアクティブ化されたクラスターにデプロイされた App Mesh コントローラー

  • AWS プライベート CA によって発行される AWS Certificate Manager (ACM) からのプライベート証明書

制約事項

  • SPIRE エージェントは Kubernetes として実行する必要があるため、SPIRE を AWS Fargate にインストールすることはできません DaemonSet。

製品バージョン

  • AWS App Mesh Controller Gurt 1.3.0 以降

アーキテクチャ

次の図は、VPC 内の App Mesh を使用した EKS クラスターを示しています。あるワーカーノードの SPIRE サーバーは、他のワーカーノードの SPIRE エージェントと AWS プライベート CA と通信します。Envoy は SPIRE エージェントのワーカーノード間の mTLS 通信に使用されます。

SPIRE Agents と Server、App Mesh、Envoys for mTLS を使用する EKS クラスターワーカーノード。

この図表は以下のステップを示しています。

  1. 証明書が発行されます。

  2. 証明書の署名と証明書をリクエストします。

ツール

AWS サービス

  • AWS Private CA – AWS Private Certificate Authority (AWS Private CA) では、オンプレミス CA の運用にかかる投資コストや保守コストなしに、ルート CA や下位 CA を含むプライベート認証機関 (CA) 階層を作成できます。

  • AWS App Mesh – AWS App Mesh(App Mesh)は、サービスのモニタリングとコントロールを容易にするサービスメッシュです。App Mesh は、サービスの通信方法を標準化し、アプリケーション内のすべてのサービスについて一貫した可視性とネットワークトラフィックコントロールを実現できます。

  • Amazon EKS」— Amazon Elastic Kubernetes Service (Amazon EKS) は、独自の Kubernetes コントロールプレーンやノードをインストール、運用、保守することなく、AWS 上で Kubernetes を実行するために使用できるマネージドサービスです。

その他のツール

  • Helm – Helm は、Kubernetes クラスターでのアプリケーションのインストールと管理を支援する Kubernetes のパッケージマネージャーです。このパターンでは、Helm を使用して AWS App Mesh コントローラーをデプロイします。

  • AWS App Mesh コントローラチャート — このパターンでは AWS App Mesh コントローラチャートを使用して Amazon EKS で AWS App Mesh を有効にします。

エピック

タスク説明必要なスキル

Amazon EKS でApp Mesh をセットアップします。

リポジトリ」に用意されている基本的なデプロイ手順に従います。

DevOps エンジニア

SPIREをインストールします。

spire_setup.yaml」を使用して EKS クラスターに SPIRE をインストールします。

DevOps エンジニア

AWS Private CA 証明書をインストールします。

AWS ドキュメント」の指示に従って、プライベートルート CA の証明書を作成してをインストールします。

DevOps エンジニア

クラスターノードインスタンスロールに権限を付与します。

クラスターノードインスタンスロールにポリシーをアタッチするには、「追加情報」セクションにあるコードを使用します。

DevOps エンジニア

AWS プライベート CA 用の SPIRE プラグインを追加します。

SPIRE サーバー設定にプラグインを追加するには、「追加情報」セクションにあるコードを使用してください。certificate_authority_arnAmazon リソースネーム (ARN) を、プライベート CA ARN に置き換えます。使用する署名アルゴリズムは、プライベート CA の署名アルゴリズムと同じである必要があります。your_regionをお使いの AWS リージョンに置き換えます。

プラグインの詳細については、「サーバープラグイン: UpstreamAuthority 」aws_pca」を参照してください。

DevOps エンジニア

バンドル.cert を更新してください。

SPIRE サーバーを作成すると、spire-bundle.yamlファイルが作成されます。spire-bundle.yamlファイル内のbundle.crt値をプライベート CA からパブリック証明書に変更します。

DevOps エンジニア
タスク説明必要なスキル

ノードとワークロードのエントリを SPIRE に登録する。

ノードとワークロード (サービス) を SPIRE Server に登録するには、「リポジトリ」内のコードを使用します。

DevOps エンジニア

mTLS をアクティブにした状態で App Mesh でメッシュを作成します。

マイクロサービスアプリケーションのすべてのコンポーネント (仮想サービス、仮想ルーター、仮想ノードなど) を含む新しいメッシュを App Mesh に作成します。

DevOps エンジニア

登録されたエントリを調べる。

以下のコマンドを実行して、ノードとワークロードの登録済みエントリを調べることができます。

kubectl exec -n spire spire-server-0 -- /opt/spire/bin/spire-server entry show

これにより、SPIRE Agents のエントリが表示されます。

DevOps エンジニア
タスク説明必要なスキル

mTLS トラフィックを検証します。

  1. フロントエンドサービスからバックエンドサービスに HTTP ヘッダーを送信し、SPIRE に登録されているサービスで成功応答を確認します。

  2. 相互TLS認証の場合、以下のコマンドを実行することで、ssl.handshake統計を調べることができます。

    kubectl exec -it $POD -n $NAMESPACE -c envoy -- curl http://localhost:9901/stats | grep ssl.handshake

    先ほどのコマンドを実行すると、リスナーのssl.handshakeカウントが表示され、以下の例のようになります。

    listener.0.0.0.0_15000.ssl.handshake: 2
DevOps エンジニア

証明書が AWS プライベート CA から発行されていることを確認します。

SPIRE サーバーのログを見ることで、プラグインが正しく設定され、証明書がアップストリームのプライベート CA から発行されていることを確認できます。以下のコマンドを実行します。

kubectl logs spire-server-0 -n spire

次に、生成されたログを確認します。このコードでは、サーバーの名前がspire-server-0であり、spire ネームスペースでホストされていると仮定しています。プラグインが正常に読み込まれ、上流のプライベート CA への接続が確立されているはずです。

DevOps エンジニア

関連リソース

追加情報

クラスターノードインスタンスロールに権限をアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ACMPCASigning", "Effect": "Allow", "Action": [ "acm-pca:DescribeCertificateAuthority", "acm-pca:IssueCertificate", "acm-pca:GetCertificate", "acm:ExportCertificate" ], "Resource": "*" } ] } AWS Managed Policy: "AWSAppMeshEnvoyAccess"

ACM 用の SPIRE プラグインを追加します。

Add the SPIRE plugin for ACM Change certificate_authority_arn to your PCA ARN. The signing algorithm used must be the same as the signing algorithm on the PCA. Change your_region to the appropriate AWS Region. UpstreamAuthority "aws_pca" { plugin_data { region = "your_region" certificate_authority_arn = "arn:aws:acm-pca:...." signing_algorithm = "your_signing_algorithm" } }