💨

VPCピアリング経由で別アカウントのGitLabサーバーにプライベートでhttps接続~前編~

2024/09/08に公開

こんにちは。
AWSサービスを用いて、VPCピアリング経由で別アカウントのGitLabのサーバーにプライベート(インターネットに出ない通信)でhttps接続する構成を構築したのでそれをまとめていきたいと思います。
前編ではVPCピアリング経由で別アカウントのGitLabサーバーにプライベートIPで直接http接続するところまでを構築していこうと思います。

構成の概略

GitLabサーバーの構築

GitLab Self-Managedのインストール

下記を参考にしてEC2インスタンスにGitLabをインストールしました。
https://about.gitlab.com/ja-jp/install/#ubuntu
EC2インスタンスの要件は以下です。

  • AMI: Ubuntu Server 22.04 LTS
  • インスタンスタイプ: t3.large
  • ストレージ: 10GiB gp2

続いて、EC2インスタンスにssh接続して、GitLabサーバーを構築します。

  • 依存関係のインストール
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
  • GitLabのパッケージリポジトリを追加
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
  • パッケージをインストール
    今回はプライベートでの通信を行いたいのでEC2インスタンスのプライベートIPを指定します。
    ドメインでのhttps化は後ほど設定します。
sudo EXTERNAL_URL="http://プライベートIP" apt-get install gitlab-ee

これにてGitLab Self-Managedのインストールは終わりです。

GitLabにブラウザアクセス

プライベートIPではブラウザアクセスができないのでsshトンネルを用いて、ローカルホストでブラウザアクセスします。

ssh -i key.pem -L 8080:プライベートIP:80 ubuntu@パブリックIP
http://lacalhost:8080

初期設定では、ユーザー: root、パスワード: 初期パスワード、でログインします。
初期パスワードは下記で確認します。

sudo cat /etc/gitlab/initial_root_password

また初期パスワードの期限は24時間なので、ログイン後、新しいパスワードに変更してください。

VPCピアリング

今回はアカウント間のVPCでプライベートでの通信を行うためVPCピアリングを用います。
VPCピアリングの詳細に関しては下記のドキュメントをご参照ください。
https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/what-is-vpc-peering.html

それではVPCピアリングを構築していきます。
今回はGitLabサーバーが構築されてあるアカウントをA、別のアカウントをBとして説明していきます。

アカウントA、BのVPCの基本情報

  • アカウントA
アカウントID VPCのCIDR VPC ID
aaaaaa 10.0.0.0/16 vpc-aaaaaa
  • アカウントB
アカウントID VPCのCIDR VPC ID
bbbbbb 192.168.0.0/24 vpc-bbbbbb

アカウントA側でピアリング接続を作成(リクエスタ)

マネージメントコンソールからVPCダッシュボード仮想プライベートクラウドピアリング接続ピアリング接続を作成の順で選んでください。
また画像のようにそれぞれの属性を設定し、ピアリング接続を作成からピアリングを作成します。

アカウントB側でリクエストを承諾(アクセプタ)

マネージメントコンソールからVPCダッシュボード仮想プライベートクラウドピアリング接続ピアリング接続を作成の順で選び、先ほどアカウントAで作成したピアリング接続を選択します。
アクションタブを開きリクエストを承諾を選択します。

リクエストを承諾したら、アカウントAのピアリング接続のステータスを確認します。
ステータスActiveとなっていたらピアリング成功です。

ルートテーブル作成

ピアリング接続を作るだけでは通信するこはできないので、次にルートテーブルを作成していきます。
具体的には、アカウントAのVPCのサブネットのルートテーブルに、送信先をアカウントBのVPCのCIDR、ターゲットをVPCピアリング向けのルートを追加します。
今回、GitLabサーバーを構築したEC2インスタンスはパブリックサブネットに配置しているので、パブリックサブネットのルートテーブルを編集します。

アカウントBのVPCのサブネットのルートテーブルも同じように、送信先をアカウントA、ターゲットをVPCピアリング向けのルートを追加します。

セキュリティグループの設定

アカウントAのGitLabサーバーのEC2インスタンスでは、アカウントBのVPCのCIDRからの通信(今回はアカウントBのVPCのCIDRからの全てのトラフィック)を許可するようにします。

また、次の動作確認でアカウントBのEC2インスタンスからアカウントAのGitLabサーバーへ通信可能か確認するため、アカウントBのパブリックサブネットにEC2インスタンスを作成しておきます。
アカウントBのEC2インスタンスでも同様に、アカウントAのVPCのCIDRからの通信を許可します。

ここまで設定できたらVPCピアリング経由で通信できるはずです!

動作確認

それではVPCピアリング経由で、アカウントBのEC2インスタンスからアカウントAのEC2インスタンス上のGitLabサーバーに通信できているか見ていきましょう。
現段階ではプライベートIPでhttp接続できるか確認します。
レスポンスとして、GitLab全文を表示するのは情報量が多いので、リダイレクト先(GitLab)まで正常にhttp通信ができているか確かめました。

[ec2-user@ip-192-168-0-6 ~]$ curl -o /dev/null -s -w "%{http_code}\n" http://10.0.20.113 -L
200

無事通信ができていそうですね!

一応気になる方は下記のコマンドでGitLabのページが表示されるかも確かめてください。

[ec2-user@ip-192-168-0-6 ~]$ curl http://10.0.20.113 -L

今回はここまでで次回自己署名証明書とプライベートホストゾーンを使ってドメイン名でhttps通信することろまでを構築していこうと思います!
ありがとうございました。

Discussion