Aqua Platform EnterpriseをECS-Fargateを利用して試すためセットアップしてみた

aqua社が提供しているAqua Platform の Enterprise版 を試す機会がありましたのでECS-Fargate上に検証環境向けセットアップをおこない手順をまとめました。
2021.11.20

こんにちは、コカコーラ大好きカジです。

aqua社が提供しているAqua Platform の Enterprise版 を試す機会がありましたのでECS-Fargate上に検証環境向けセットアップをおこない手順をまとめました。

Aqua Platformとは?

Aqua Platformはaqua社が提供するソリューションでコンテナとクラウドネイティブアプリのために開発された、 フルライフサイクルなセキュリティソリューションになります。

aqua コンテナ・クラウドネイティブアプリのためのセキュリティソリューション

記事の前提について

今回の記事は、Aqua社と交渉の上、検証用のトライアルアカウントを利用しています。 コンテナイメージや、セットアップ用のドキュメントなどは、公式ドキュメントアクセス用のアカウントが必要となりますのでご留意ください。

検証環境について

今回、ECS Fargateを利用して構築しますが、Aqua のセットアップは複数の構成を選べます。 他のメンバーがブログを書いておりますので、別な環境が良い場合は、以下を利用ください。

セットアップ

aquaのガイドページに掲載されている手順に沿って導入を進めていきます。 ※ ガイドページはログインが必要なページとなっております。

DEPLOY AQUA ENTERPRISE > Non-Kubernetes Platforms > Amazon Elastic Container Service (ECS)

こちらを参照すると、Githubを参照するように記載がありますが迷って、問い合わせ確認したところ以下であることがわかりました。

GitHub - aquasecurity/deployments/server/ecs/cloudformation

ECS on EC2と、ECS-Fargateを選択できるので、今回はECS-Fargateを選択します。

構築されるリソース

構築されたものは、以下となりました。

構築されるもの 用途
ALB Aqua Server(Aqua Console)用のALB
NLB Aqua GatewayとAqua Server用のNLB
Aqua Server (Aqua Console) Fargateで起動するアプリケーションサーバ
Aqua Gateway Fargateで起動するAqua ServerとAqua Enforcerの通信を処理するコンポーネント
Aqua Database RDSインスタンス 起動する設定やセキュリティポリシー、ユーザ管理、ログ履歴を保存。別途構築のRDSの指定も可能
Secrets Manager RDS接続情報の保存
AWS Lambda Random String 生成用
Cloudwatch Logs Console/enforcer/gateway、performance用の4個のロググループ と上記Lambdaのロググループ
S3 ALBのアクセスログ保管先バケット
IAM ECSのタスク用ロールと、Lambda用ロール

各コンポーネントの詳細については以下のブログを参照

前提条件

  • 少なくとも2つのサブネットを持つVPC(ECR/Cloudwatch Logsへアクセス可能なこと)
  • AWS Certificate Manager(ACM)による証明書
  • Aqua資格情報(ユーザー名とパスワード)とエンタープライズライセンストークン
  • ECRへDockerイメージアップロードするため、dockerコマンドが利用できる環境

ライセンストークンの取得

以下のブログと同じ手順でライセンストークンを取得します。こちらのブログでは省略します。

準備作業

手順1.資格情報を使用してAquaレジストリにログイン

docker login registry.aquasec.com -u  -p
Username: <username>
Password: <password>
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

手順2.server(console)とgatewayのAqua Docker ImageをPullします。

$ docker pull registry.aquasec.com/console:6.5
$ docker pull registry.aquasec.com/gateway:6.5

$ docker images
REPOSITORY                     TAG       IMAGE ID       CREATED      SIZE
registry.aquasec.com/gateway   6.5       42cddb7ad1d7   8 days ago   302MB
registry.aquasec.com/console   6.5       a080d56da117   8 days ago   481MB

手順3.ECRにリポジトリを作成

私は、以下の名前で構築 - kaji-aqua-console - kaji-aqua-gateway

手順4.両方のimageをECRにプッシュ

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

作成したリポジトリにイメージをプッシュできるように、イメージにタグを付けます。
$ docker tag registry.aquasec.com/console:6.5 xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-console:latest
$ docker tag registry.aquasec.com/gateway:6.5 xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-gateway:latest

ECRにプッシュします。
$ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-console:latest
$ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-gateway:latest

CloudFormationで構築

マネージメントコンソールまたはCLIで実施できるようになっています。

Aqua Enterpriseの展開には、通常、最大20分かかります。

完了すると、Aqua Console接続用のALBやNLBのDNS名を取得できます。

情報をメモしておく

以下をメモしておきます。

  • 構築先のVPC
  • 利用予定のAmazon Certificate Managerの証明書のARN(証明書導入されたALBで構築できる)
  • 構築したECRのリポジトリ
  • Aquaのポータル画面(aqua success)からダウンロードするライセンストークン

手順1.

注意:GithubページのREADMEには、[Launch Stack]アイコンをクリックし、スタックの作成機能に移動しますと記載がありますが、S3のアクセス権限がなくダウンロードできません。

以下のGithubのCloudFormationのテンプレートファイルをダウンロードして実行しましょう。

https://github.com/aquasecurity/deployments

server/ecs/cloudformation/aqua-ecs-fargateにCloudFromationテンプレートファイルがあります。

今回はDBも構築するため、aquaFargate.yamlを利用します。構成によって他のテンプレートも選べます。

手順2.パラメータ指定

設定項目
VPC ID 自分のVPC
VPC CIDR 上記VPCのCIDRアドレスを記入
ECS Instance Subnets コンテナ起動するサブネットの指定
Aqua LB Subnets ALBの起動サブネットの指定
SSL cert ARN Amazon Certificate Managerの証明書ARN
Aqua LB Scheme ALBのインターネット向け or 内部向け 選択の設定
Web Console Sourceのアクセス元IPアドレス フルオープン(0.0.0.0/0)がデフォルトなので接続元IPに修正
AquaServerImage 構築したECRのリポジトリURIを入力
AquaGatewayImage 構築したECRのリポジトリURIを入力
ActiveActive aqua consoleの冗長化設定 デフォルト False
RDS instance type RDSインスタンスタイプ指定 デフォルト db.t3.medium
RDS storage size (GB) RDSのストレージ指定 デフォルト 50GB
Enable Multi-AZ RDS RDSの冗長化設定 デフォルト true
AuditRDS Audit DBを分離構成 デフォルト No
AuditRdsInstanceClass RDSインスタンスタイプ指定 デフォルト db.t3.medium
ClusterName ECS Cluster名を指定 例:aqua-ecs

手順3.スタックオプションの設定

[次へ]をクリック

手順4.スタックを作成

AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認して、スタックを作成をクリック

構築が完了すると構築されたリソースが見れます。

ConsoleのURLは出力に表示されます。

DNSサーバ(Route 53などに)に、ACMサーバ証明書と同じドメイン名のCNAMEまたはエイリアスで上記URLを登録します。 取り急ぎ接続したい場合は、証明書内のURLとアクセスするURLが不一致のためブラウザで警告が表示されますが、無視して接続となります。

手順5.aqua 初期アカウントの登録

ユーザー名とパスワードを入力しログインをおこないます。 パスワードは8文字以上の設定が必要になります。

aqua 初期アカウントの登録

手順6.aqua ライセンストークンの登録

ライセンストークンの登録をおこないます。

aqua ライセンストークンの登録

手順7.aqua ダッシュボードのアクセス

設定が完了するとaquaのダッシュボードが表示されます。

aqua コンソールのアクセス

さいごに

今回は、ECS-FargateでのAqua Platformのセットアップを試してみました。初心者の人がハマりやすいところにハマった気がします。誰かのお役に立てれば光栄です。 次は、AWSFargateやMicrosoft Azure Container Instances(ACI)などのマネージドサービス環境で実行されているコンテナにランタイムセキュリティを提供するために必要なAqua MicroEnforcerを構築したいと思います。