1. はじめに
目的
この記事では、Easy RSAを使用してOpenVPN用の証明書を生成し、それをAWS ACMに登録する手順を説明します。証明書は、VPN接続のセキュリティを確保するために重要です。
Easy RSAとは
Easy RSAは、OpenVPN用の証明書を生成するためのツールセットです。OpenSSLのコマンドを簡素化し、PKI(公開鍵基盤)の設定や管理を容易にします。これにより、証明書の作成や署名が簡単に行えるため、VPN接続のセキュリティを強化することができます。
なぜEasy RSAを使用するのか
AWS Client VPNはOpenVPNプロトコルに基づいており、VPN接続のための証明書を必要とします。Easy RSAはOpenVPNのために設計されているため、AWS Client VPNで使用する証明書の生成に適しています。
実際の利用シーン
-
リモートワーク環境のセキュアなアクセス 開発者や運用チームが自宅や外出先から安全に社内ネットワークやクラウド環境にアクセスできるようにするために、VPN接続を利用します。これにより、どこからでも安全に作業を行うことができます。
-
インフラ管理のセキュリティ強化 管理者がクラウドインフラにアクセスしてリソースの管理や監視を行う際に、VPNを使用して通信を暗号化することでセキュリティを確保します。これにより、不正アクセスやデータの盗聴を防ぐことができます。
-
開発・テスト環境の保護 開発やテスト用の環境を外部からの不正アクセスから保護し、開発チームのみがアクセスできるようにします。これにより、機密情報やプロジェクトのコードが漏洩するリスクを減らすことができます。
-
異なるクラウドサービス間のセキュアな通信 異なるクラウドサービス間での通信を安全に行うために、VPNを利用して通信経路を暗号化します。これにより、サービス間のデータが第三者に盗聴されるリスクを低減します。
前提条件
- 基本的なAWSの知識
- Easy RSAの基本的な理解
- 有効なFQDN(例:
vpn.example.com
)
2. Easy RSAのインストールと設定
Easy RSAのインストール
Amazon Linux
yum
がdnf
のエイリアスと設定されているため、Amazon Linux2とAmazon Linux2023ともに共通です。
- 必要なパッケージのインストール
sudo yum update -y
sudo yum install -y git openssl
- Easy RSAのダウンロードとインストール手順
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
Linux
- 必要なパッケージのインストール
sudo apt-get update
sudo apt-get install -y git openssl
- Easy RSAのダウンロードとインストール手順
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
macOS
-
Homebrewを使用する場合
-
Homebrewのインストール(まだインストールしていない場合)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
Easy RSAのインストール
brew install easy-rsa
-
Easy RSAのインストールディレクトリを確認
brew --prefix easy-rsa
-
Easy RSAのディレクトリに移動(上記のコマンドの出力に基づいてパスを指定)
cd $(brew --prefix easy-rsa)/libexec
-
-
Homebrewを使用しない場合
-
必要なパッケージのインストール(OpenSSLとGit)
brew install openssl git
-
Easy RSAのダウンロードとインストール手順
git clone https://github.com/OpenVPN/easy-rsa.git cd easy-rsa/easyrsa3
-
Windows
- Git for Windowsのインストール(まだインストールしていない場合)
- Git for Windowsからインストールします。
- Easy RSAのダウンロードとインストール手順
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
PKI環境の初期化
以下は共通手順となります。PKI(公開鍵基盤)環境の初期化は、証明書を管理するためのディレクトリ構造と初期設定を作成するプロセスです。証明書の発行、署名、および管理が容易になります。以下は、PKI環境を初期化するためのコマンドです。
- PKIディレクトリの初期化
./easyrsa init-pki
3. 証明書の生成
CA証明書の生成
CA(認証局)証明書の生成は、公開鍵基盤の中核となるプロセスです。CAは、他の証明書(サーバー証明書やクライアント証明書)を発行および署名する役割を持ちます。以下のコマンドは、CAのプライベートキーと自己署名証明書を生成します。
./easyrsa build-ca nopass
このコマンドを実行すると、以下のような入力を求められます。
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
ここでは、認証局(CA)の名前を入力します。例として「MyVPN-CA」と入力します。
サーバー証明書の生成
サーバー証明書の生成は、サーバーがクライアントに対して自分自身を証明するために必要です。このプロセスでは、まず証明書署名リクエスト(CSR)を生成し、その後CAに署名してもらいます。以下のコマンドは、サーバー証明書のリクエストを生成し、CAによって署名されたサーバー証明書を作成します。
./easyrsa gen-req vpn.example.com nopass
./easyrsa sign-req server vpn.example.com
gen-req
コマンドを実行すると、以下のような入力を求められます。
Common Name (eg: your user, host, or server name) [vpn.example.com]:
ここでは、サーバーのFQDN(完全修飾ドメイン名)を入力します。例として「vpn.example.com」と入力します。このフィールドを正しく設定しないと、クライアントがサーバー証明書を検証できず、接続が失敗する可能性があります。
また、証明書を署名する際には以下のようなプロンプトが表示されます。
Type the word 'yes' to continue, or any other input to abort.
ここでは、証明書の署名を確認するために「yes」と入力する必要があります。これは、意図しない署名を防ぐための確認ステップです。署名を続行するには「yes」と入力し、他の入力をすると署名プロセスが中止されます。
クライアント証明書の生成
クライアント証明書の生成は、クライアントがサーバーに対して自分自身を証明するために必要です。このプロセスでは、まずクライアント証明書の署名リクエスト(CSR)を生成し、その後CAに署名してもらいます。以下のコマンドは、クライアント証明書のリクエストを生成し、CAによって署名されたクライアント証明書を作成します。
./easyrsa gen-req client nopass
./easyrsa sign-req client client
こちらもサーバー証明書と同様の質問がされます。
4. AWS ACMへの証明書の登録
証明書ファイルの準備
生成された証明書と鍵ファイルを確認し、AWS ACMにインポートするために必要なファイルが正しく作成されたかを確認します。以下のファイルが生成されていることを確認してください。
ファイルパス | 説明 |
---|---|
pki/issued/vpn.example.com.crt | サーバー証明書 |
pki/private/vpn.example.com.key | サーバーのプライベートキー |
pki/issued/client.crt | クライアント証明書 |
pki/private/client.key | クライアントのプライベートキー |
pki/ca.crt | CA証明書 |
これらのファイルを確認した後、次のステップでAWS ACMにインポートします。
AWS CLIを使用した証明書のインポート
AWS ACMに証明書をインポートすることで、AWSサービス(例:AWS Client VPN)で証明書を使用できるようになります。以下のコマンドを使用して、生成されたサーバー証明書、プライベートキー、および証明書チェーン(CA証明書)をAWS ACMにインポートします。
サーバー証明書のインポート
aws acm import-certificate --certificate fileb://pki/issued/vpn.example.com.crt --private-key fileb://pki/private/vpn.example.com.key --certificate-chain fileb://pki/ca.crt
このコマンドは次のように機能します。
-
--certificate
オプションは、サーバー証明書のファイルパスを指定します。
-
--private-key
オプションは、対応するプライベートキーのファイルパスを指定します。
-
--certificate-chain
オプションは、CA証明書(または中間証明書)のファイルパスを指定します。
このコマンドを実行すると、AWS ACMに証明書がインポートされ、AWS Client VPNエンドポイントで使用できるようになります。
5. まとめと後片付け
まとめ
この記事では、Easy RSAを使用してFQDN(完全修飾ドメイン名)で証明書を生成し、それをAWS ACMに登録する方法を学びました。具体的には、以下のステップを実施しました。
- Easy RSAのインストールと設定
- PKI環境の初期化
- CA証明書、サーバー証明書、およびクライアント証明書の生成
- 生成した証明書をAWS ACMにインポート
これにより、AWS Client VPNなどのAWSサービスで安全な通信を確立するための証明書を準備することができました。
リソースのクリーンアップ
作成した証明書と関連ファイルの整理を行います。以下の手順に従ってクリーンアップを行ってください:
-
不要な証明書と鍵ファイルの削除
- セキュリティを考慮し、不要になった証明書とプライベートキーを安全に削除します。
rm -f pki/private/*.key pki/issued/*.crt pki/reqs/*.req
-
Easy RSAのディレクトリ構造の削除(必要に応じて)
- Easy RSAを今後使用しない場合は、ディレクトリ構造も削除します。
rm -rf /path/to/easy-rsa
これらの手順を実行することで、作業環境をクリーンに保つことができます。
参考資料
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.05.13
CICDパイプラインでECSを使用したアプリケーションのデプロイ
今回は、このパイプラインを拡張し、ECSを使用してアプリケーションをデプロイするデプロイステージの設定と動作確認を行います。
- AWS
- ハンズオン
2024.04.22
AWS CodePipelineとGitHubで実現するCICDハンズオン
このハンズオンでは、AWS CodePipelineとGitHub、Elastic Beanstalkを使って、簡単なWebアプリケーションのCI/CDパイプラインを構築する方法を学びます。CI/CDの自動化により、開発プロセスの効率化と高速なリリースを実現することができます。
- AWS
- ハンズオン
2024.03.19
初心者からステップアップ!Docker Compose応用ハンズオン
前回は「初心者でもサクッとできるDocker Composeハンズオン」でDocker Composeの基本を学びました。今回はさらに一歩踏み込み、Docker Composeを使った応用技術に目を向けます。ログの確認からデバッグ方法まで、効率的なトラブルシューティング技術を身に付けましょう。
- ハンズオン
- Docker