APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【AWS】ECS上にNetBoxを構築してみた


目次

はじめに

こんにちは、エーピーコミュニケーションズ iTOC事業部BzD部0-WANの柳田です。
NetBoxというツールをご存じでしょうか?ネットワーク機器やデータセンターの情報を一元管理できるOSS(オープンソースソフトウェア)であり、誰でもGithubからダウンロードして構築することが出来ます。 今回はNetBoxをECS上に構築する方法を紹介します。

netboxlabs.com

github.com

構成図

ECS(Fargate)にNetboxを構築し、ファイルシステムにEFS、データベースにRDS(PostgreSQL)、キャッシュサーバにElastiCache(Redis)、認証情報管理としてSecret Manager、またコンテナイメージはGithub Container Registoryからイメージを取得します。

NetBoxの構成図
NetBoxの構成図
※VPC 、Public Subnetなどのリソースや一部の通信フローは省略しています。

前提

以下のリソースは作成済とします。

  • VPC

  • Public Subnet

  • Private Subnet

  • Internet Gateway

  • NAT Gateway

  • Application Load Balancer

  • Security Group

RDS

RDSの構築を行う前に「Aurora and RDS > パラメータグループ」からカスタムパラメータグループを作成し、「rds.force_ssl」の値を0に変更します。

rds.force_sslの変更
rds.force_sslの変更

デフォルトでこのオプションは1に設定されており、SSL接続を強制する動作となります。この状態でNetBoxを起動するとエラーが発生します。 エラーの原因としては、NetBoxコンテナがルートユーザ以外で起動するため証明書が格納されている/rootディレクトリにアクセスできないことが考えられます。 値を0に設定することでSSL接続が強制されずエラーを回避することができます。

デフォルト値でNetBoxを起動した場合のエラー
デフォルト値でNetBoxを起動した場合のエラー

RDSを以下の要件で構築します。

  • エンジンタイプ:PostgreSQL

  • エンジンバージョン:PostgreSQL 16.3-R3

  • デプロイオプション:シングル AZ DB インスタンスデプロイ

追加設定として「最初のデータベース名」をnetboxに設定し、先ほど作成したカスタムパラメータグループを設定します。

データベース名とパラメータグループの設定
データベース名とパラメータグループの設定

ElastiCache

NetBoxではキャッシュ用とジョブ用の2つのRedisコンテナが起動します。今回は、ElastiCacheを用いてキャッシュサーバを2つ起動させます。

  • エンジンバージョン:7.1

  • ノードのタイプ:cache.t3.micro

  • レプリケーション数:2

  • アクセスコントロール:認証デフォルトユーザーアクセス

注意点としてデプロイオプションを「独自のキャッシュを設計」、クラスターモードを「無効」にします。 クラスターモードが有効だとNetBoxで使用される一部のコマンドがサポートされておらずエラーが出てしまいます。

クラスターモードの設定
クラスターモードの設定

EFS

「EFS > ファイルシステム」からファイルシステムを推奨設定で作成した後、「EFS > アクセスポイント」からアクセスポイントを作成します。
ルートディレクトリのパスを/netboxで設定し、POSIXユーザーおよびルートディレクトリに適用させるUID:GIDを任意の値で指定します。
「アクセスポイントのアクセス許可」の設定では作成したルートディレクトリの権限を設定することができます。今回は所有者だけ書き込みができるように0755で設定します。

POSIXユーザとルートディレクトリの設定
POSIXユーザとルートディレクトリの設定

EFSはアクセスポイント無しだとルートユーザでしか書き込みができません。NetBoxが動作しているコンテナはunitユーザで実行されるため、権限エラーとなってしまいます。 上記で設定したアクセスポイントを経由することでPOSIXユーザで設定したUID:GIDでアクセスするようになり、設定したルートディレクトリのパスに書き込まれます。

アクセスポイントの動作
アクセスポイントの動作

Secret Manager

ユーザ名やパスワード情報などのシークレット情報をSecret Managerに格納します。

Secret Managerに格納する値
Secret Managerに格納する値

ECS

「ECS > タスク定義」から以下の図となるようにタスク定義を作成します。

タスク定義のイメージ図
タスク定義のイメージ図

使用するコンテナイメージのURLを入力します

コンテナイメージの設定
コンテナイメージの設定

netbox.envに記載されている環境変数を3つのコンテナに設定します。設定する環境変数と値は以下の通りです。 一部の環境変数にはSecret Managerに保存したARNと対応するキー名を設定します。

設定する環境変数と値
設定する環境変数と値

実際の入力では以下のように設定します。

環境変数の設定
環境変数の設定

一部のコンテナにDockerコマンドを設定します。

Dockerコマンドの設定
Dockerコマンドの設定

ボリュームの設定ではEFSで作成したファイルシステム、アクセスポイントを指定し、NetBoxコンテナのメディアルートにマウントします。

Volumeの設定
Volumeの設定

タスク定義作成後にクラスターとサービスを作成します。NetBoxを起動させ、ALB経由でアクセスします。

Netboxのログイン画面
NetBoxのログイン画面

作成したスーパーユーザのユーザ名とパスワードでログインできれば完了です。

NetBoxのホーム画面
NetBoxのホーム画面

参考記事

github.com

qiita.com

dev.classmethod.jp

docs.aws.amazon.com

まとめ

今回はECSを利用してNetBoxを構築する方法を紹介しました。複数のAWSサービスを利用し、連携させる必要があるため設定ミスで多くのエラーが発生してしまいましたが、各サービスの細かい仕様を知る良い機会になりました。

0-WANについて
私たち0-WANは、ゼロトラスト製品を中心とした、マルチベンダーでのご提案で、お客様の経営課題解決を支援しております。 ゼロトラストってどうやるの?製品を導入したけれど使いこなせていない気がする等々、どんな内容でも支援いたします。 お気軽にご相談ください。
問い合わせ先、0-WANについてはこちら。

www.ap-com.co.jp