IBM Cloud：Client to Site型VPNでVPC環境に接続する (Secrets Manager)

# はじめに
Certificate ManagerのEOSに伴い、VPN for VPCにおいてもSecrets Managerを利用いただく必要があります。本記事では、Sercrets Managaerを利用したClient to Site型のVPN for VPCの作成方法について記載します。

Certificate Managerを使用した設定方法は以下に記載されています。併せて参照ください。
[Client VPN for VPC（Client to Site型VPN）でVPC環境に接続する](https://qiita.com/y_tama/items/16987e07842262cd9068)

Certificate ManagerからSecrets Managerへの移行方法は以下を参照ください。
[Certificate ManagerからSecret Managerへの手動移行](https://www.ibm.com/blogs/solutions/jp-ja/migrationfromcm-sm/)

# 1. Secrets Managerをオーダー
VPN接続をセキュアに行うため証明書が必要です。証明書はSecrets Managerで管理します。
Secrets Managerをまだ利用していない場合、カタログからオーダーします。
https://cloud.ibm.com/catalog/services/Secrets%20Manager



# 2. VPNサービスからSecrets Managerを使えるよう権限設定
https://cloud.ibm.com/iam/authorizations にアクセスし、VPNからSecrets Managerへのアクセスを許可します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/0a37bbcc-5b26-4041-12fb-d14bd5d2b081.png)



# 3. 証明書の発行
下記のdocsに従い、サーバー証明書や鍵ファイルを作成します。
https://cloud.ibm.com/docs/vpc?topic=vpc-client-to-site-authentication&interface=ui#import-certificate


##### Easy-RSA 3 リポジトリーをローカル・フォルダーに複製 
```
$ git clone https://github.com/OpenVPN/easy-rsa.git
Cloning into 'easy-rsa'...
remote: Enumerating objects: 4239, done.
remote: Counting objects: 100% (52/52), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 4239 (delta 22), reused 46 (delta 17), pack-reused 4187
Receiving objects: 100% (4239/4239), 27.46 MiB | 12.72 MiB/s, done.
Resolving deltas: 100% (1994/1994), done.

$ cd easy-rsa/easyrsa3
```


##### 新しい PKI と CA を作成
```
$ ./easyrsa init-pki
Notice
------
'init-pki' complete; you may now create a CA or requests.

Your newly created PKI dir is:
* /Users/takason/easy-rsa/easyrsa3/pki

* Using Easy-RSA configuration:

* IMPORTANT: Easy-RSA 'vars' template file has been created in your new PKI.
             Edit this 'vars' file to customise the settings for your PKI.

* Using x509-types directory: /Users/takason/easy-rsa/easyrsa3/x509-types


$ ./easyrsa build-ca nopass
* Using SSL: openssl LibreSSL 2.8.3
* Using Easy-RSA configuration: /Users/takason/easy-rsa/easyrsa3/pki/vars

.......+++
...................................................................................+++
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

Notice
------
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/Users/takason/easy-rsa/easyrsa3/pki/ca.crt
```


##### VPN サーバー証明書を生成
```
$ ./easyrsa build-server-full vpn-server.vpn.ibm.com nopass
* Using SSL: openssl LibreSSL 2.8.3

* Using Easy-RSA configuration: /Users/takason/easy-rsa/easyrsa3/pki/vars

Generating a 2048 bit RSA private key
.....+++
.................................................................................................................................................+++
writing new private key to '/Users/takason/easy-rsa/easyrsa3/pki/3b9f96c9/temp.a403a5f9'
-----

Notice
------
Keypair and certificate request completed. Your files are:
req: /Users/takason/easy-rsa/easyrsa3/pki/reqs/vpn-server.vpn.ibm.com.req
key: /Users/takason/easy-rsa/easyrsa3/pki/private/vpn-server.vpn.ibm.com.key


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = vpn-server.vpn.ibm.com


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Using configuration from /Users/takason/easy-rsa/easyrsa3/pki/3b9f96c9/temp.aa0d5554
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'vpn-server.vpn.ibm.com'
Certificate is to be certified until Feb 26 07:56:42 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Notice
------
Certificate created at: /Users/takason/easy-rsa/easyrsa3/pki/issued/vpn-server.vpn.ibm.com.crt
```

##### VPN クライアント証明書を生成
```
$ ./easyrsa build-client-full client1.vpn.ibm.com nopass
* Using SSL: openssl LibreSSL 2.8.3

* Using Easy-RSA configuration: /Users/takason/easy-rsa/easyrsa3/pki/vars

Generating a 2048 bit RSA private key
.................................+++
.................................................+++
writing new private key to '/Users/takason/easy-rsa/easyrsa3/pki/7f50222a/temp.622e029e'
-----

Notice
------
Keypair and certificate request completed. Your files are:
req: /Users/takason/easy-rsa/easyrsa3/pki/reqs/client1.vpn.ibm.com.req
key: /Users/takason/easy-rsa/easyrsa3/pki/private/client1.vpn.ibm.com.key


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 825 days:

subject=
    commonName                = client1.vpn.ibm.com


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Using configuration from /Users/takason/easy-rsa/easyrsa3/pki/7f50222a/temp.9d45ed70
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client1.vpn.ibm.com'
Certificate is to be certified until Feb 26 08:54:08 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Notice
------
Certificate created at: /Users/takason/easy-rsa/easyrsa3/pki/issued/client1.vpn.ibm.com.crt

$
```

# 4. Secrets Managerへ証明書を登録
「追加」→「インポートされたTLS証明書」をクリックします。
シークレットの名前を入力し、「次へ」をクリックします。
![スクリーンショット 2025-04-25 14.40.59.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/8e0a41b6-54bc-4fcc-8620-9e21c8dc9ad3.jpeg)

「ファイルの選択」をクリックし、証明書ファイルとして ./pki/issued/vpn-server.vpn.ibm.com.crt を選択します。
「ファイルの選択」をクリックし、証明書の秘密鍵として ./pki/private/vpn-server.vpn.ibm.com.key を選択します。
「ファイルの選択」をクリックし、中間証明書として ./pki/ca.crt を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/959f71bc-84b0-3af9-b0c2-a32dbb3c652c.png)

作成されると、以下のように格納した情報を取得するためのコマンド等が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/d115e335-200d-34d7-acb6-c8195db93007.png)



# 5. Client to SiteのVPNサーバーをオーダー
「client vpn for vpc」で検索、あるいは以下にアクセスしてオーダーします。
今回はクライアント証明書認証方式を選びました。
トンネリングモードは`Full tunnel`と`Split tunnel`を選ぶことができます。トンネルを通さずにインターネット向き通信を行いたい場合は`Split tunnel`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/5a7ea1a5-07b4-60c7-25a6-0f97e531dc9f.png)



# 6. Security Group設定
VPNサーバーに対してもSecurity Groupが適用されるため、VPN接続に必要なポートを許可します。使用するポート番号は、VPNサーバーのオーダー画面で指定します。今回はデフォルトで設定されている`UDP 443`です。
接続元を、クライアント端末のグローバルIPアドレス範囲のみに制限することで、よりセキュアな状態にできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/2caadece-24bd-6e72-6692-f1a3a528581d.png)


# 7. VPNサーバー経路の設定
「VPNサーバー経路」タブで、VPNサーバーに到達したパケットをどうルーティングするか指定します。
https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-routes&interface=ui
![Screen Shot 2022-11-24 at 19.07.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/eec3e332-8f36-d560-8004-c8a2b7f494ee.png)


# 8. Client用のプロファイルをダウンロード、編集
VPNサービスのプロビジョニングが終わったら詳細プロパティ画面から、Client用プロファイルをダウンロードします。OpenVPN接続用に一般的に使われるOVPNファイルとして提供されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/f0d29d8c-c9b4-51b6-a76e-e1aac8a62aa0.png)

続いて、ovpnファイルをテキストエディタで開いて編集します。
今回は証明書認証をしているため、下記の部分に、クライアント証明書のファイル名を書きます。
```:client-vpn-test.ovpn
# Uncomment the next two lines if certificate-based client authentication is enabled.
#  Ask your VPN administrator provides your client certificate and replace client_public_key
#  with your client certificate filename.
cert client1.vpn.ibm.com.crt
key client1.vpn.ibm.com.key
```

ダウンロードしたovpnファイルを、easyrsaコマンドで作成したクライアント証明書と鍵ファイルと同じディレクトリに保存します。
```
$ ls -l ./cert-dir
total 32
-rw-r--r--@ 1 takason  staff  1772 Nov 24 19:13 client-vpn-test.ovpn
-rw-------  1 takason  staff  4465 Nov 24 19:16 client1.vpn.ibm.com.crt
-rw-------  1 takason  staff  1704 Nov 24 19:16 client1.vpn.ibm.com.key
```

# 9. OpenVPNクライアントソフトにOVPNファイルを読み込み
以下のdocsに従い、手順を進めます。
[IBM Cloud docs：クライアント VPN 環境のセットアップと VPN サーバーへの接続](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-environment-setup)
- OpenVPNクライアントのインストール
- `.ovpn`ファイルのダウンロード



動作確認されているクライアントソフトについて下記に記載されています。今回はMac端末でOpenVPN Connectを使っています。
[IBM Cloud docs：サポートされるVPN Client Software](https://cloud.ibm.com/docs/vpc?topic=vpc-client-to-site-vpn-planning#vpn-client-software)


## OpneVPN 設定手順
プラスボタンをクリックし、接続を設定します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/505b0462-3fda-6c30-cb84-f83adff2c415.png width=40%>

「FILE」タブを選択し、`.ovpn`ファイルをコピー＆ペーストか「BROWSE」で選択します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/6c278f40-351d-394d-ffff-6ca3b3674f35.png width=40%>

VPN サーバーが指定されていることを確認し、「CONNECT」をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/35a76e71-5d7d-505c-e325-ae8b14205523.png width=40%>

接続が完了し、トラフィックが流れていることが確認できます。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/9b112f5e-019f-e9cf-d986-c0087c219fcf.png width=40%>